var selectedState = "";
var selectedStateIndex = 0;
var selectedCity = "";

var head_office = {
    name: "Top Snap Marketing",
    place: "",
    address1: "Suite D, 9 Crane Crescent",
    address2: "Mosman, NSW 2088",
    phone: "P 1300 867 762",
    email: "sales@topsnap.com",
    emailkey: 0
};

var states = {
    0: {
        name: "NSW",
        lat: -32.794663,
        lng: 146.242675,
        cities: {}
    },
    1: {
        name: "NT",
        lat: -18.924994,
        lng: 133.542480,
        cities: {}
    },
    2: {
        name: "QLD",
        lat: -23.309973,
        lng: 145.323486
    },
    3: {
        name: "SA",
        lat: -31.229713,
        lng: 135.124511
    },
    4: {
        name: "VIC",
        lat: -37.22508,
        lng: 144.880370
    },
    5: {
        name: "WA",
        lat: -25.987675,
        lng: 122.036133
    }
};

var cities = {
    "QLD": [
        {
            name: "Brisbane",
            lat: -27.403105,
            lng: 153.010483
        }
        ,
        {
            name: "Cairns",
            lat: -16.732452,
            lng: 145.649471
        },
        {
            name: "Gold Coast",
            lat: -27.995432,
            lng: 153.372459
        },
        {
            name: "Sunshine Coast",
            lat: -26.680410,
            lng: 153.040810
        },
        {
            name: "Townsville",
            lat: -19.259566,
            lng: 146.818922
        }
    ],
        "VIC": [
        {
            name: "Melbourne",
            lat: -38.081284,
            lng: 144.824295
        }
    ],
        "NSW": [
        {
            name: "Byron Bay",
            lat: -28.643851,
            lng: 153.612356
        },
        {
            name: "Central Coast",
            lat: -33.421527,
            lng: 151.39698
        },
        {
            name: "Newcastle",
            lat: -32.92784,
            lng: 151.781502
        },
        {
            name: "Sydney",
            lat: -33.87033,
            lng: 151.206837
        }
    ],
        "SA": [
        {
            name: "Adelaide",
            lat: -34.925961,
            lng: 138.599896
        }
    ],
        "WA": [
        {
            name: "Pert",
            lat: -31.982453,
            lng: 115.861816
        }
    ]
}

var operators = {
    "QLD": [
        {
            name: "Pete Kennedy",
            place: "Caboolture to Albany Creek",
            place2: "Caboolture to Albany Creek",
            lat: -27.345268,
            lng: 152.968408,
            company: "Top Snap Marketing Caboolture To Albany Creek",
            address1: "8 Doonside Pde",
            address2: "Brendale QLD 4500",
            phone: "0413 139 271",
            email: "pete.kennedy@topsnap.com",
            emailkey: 1
        },
        {
            name: "Steve Bell",
            place: "Brisbane CBD to Samford",
            place2: "Brisbane CBD to Samford",
            lat: -27.467601,
            lng: 153.027956,
            company: "Top Snap Marketing Brisbane CBD to Samford",
            address1: "16 Kate Street",
            address2: "Kedron QLD 4031",
            phone: "0406 947 090",
            email: "steve@topsnap.com",
            emailkey: 2
        },
        {
            name: "Wayne McGregor",
            place: "West End to Tingalpa",
            place2: "West End to Tingalpa",
            lat: -27.474824,
            lng: 153.121161,
            company: "Top Snap Marketing Westend",
            address1: "1/20 Phillip Place",
            address2: "Forest Lake QLD 4078",
            phone: "0432 909 881",
            email: "wayne.mcgregor@topsnap.com",
            emailkey: 3

        },
        {
            name: "Dan O'Donoghue",
            place: "Manly to Redland Bay",
            place2: "Manly to Redland Bay",
            lat: -27.610037,
            lng: 153.303022,
            company: "Top Snap Marketing Manly to Redland Bay",
            address1: "19 Bangalow Street",
            address2: "Victoria Point QLD 4165",
            phone: "0401 039 515",
            email: "dan.odonoghue@topsnap.com",
            emailkey: 4
        },
        {
            name: "Chris Pretty",
            place: "Sunnybank South",
            place2: "Sunnybank South",
            lat: -27.588126,
            lng: 153.06083,
            company: "Top Snap Marketing Sunnybank",
            address1: "11 Kerstin Court",
            address2: "Rochedale QLD 4123",
            phone: "0403 808 504",
            email: "chris.pretty@topsnap.com",
            emailkey: 5
        },
        {
            name: "Lincoln Hyde",
            place: "Townsville",
            place2: "Townsville",
            lat: -19.258148,
            lng: 146.818407,
            company: "",
            address1: "7 Domain Court",
            address2: "Alice River QLD 4817",
            phone: "0411 521 648",
            email: "lincoln.hyde@topsnap.com",
            emailkey: 6
        },
        {
            name: "Mike Hooper",
            place: "Sunshine Coast North",
            place2: "Sunshine Coast North",
            lat: -26.544104,
            lng: 153.082057,
            company: "",
            address1: "",
            address2: "",
            phone: "0408 988 268",
            email: "mike.hooper@topsnap.com",
            emailkey: 7
        },
        {
            name: "Kirsty & Stuart Blinston",
            place: "Sunshine Coast Central & South",
            place2: "Sunshine Coast South",
            lat: -26.714594,
            lng: 153.059607,
            company: "",
            address1: "PO Box 7768",
            address2: "Sippy Downs QLD 4556",
            phone: "0423 081 364",
            email: "kirsty@topsnap.com",
            emailkey: 8
        },
        {
            name: "Kirsty & Stuart Blinston",
            place: "Sunshine Coast Central & South",
            place2: "Sunshine Coast Central",
            lat: -26.666896,
            lng: 153.094625,
            company: "",
            address1: "PO Box 7768",
            address2: "Sippy Downs QLD 4556",
            phone: "0423 081 364",
            email: "kirsty@topsnap.com",
            emailkey: 8
        },
        {
            name: "Chris & Liz Blockley",
            place: "Gold Coast Central & North",
            place2: "Gold Coast North",
            lat: -27.886835,
            lng: 153.394175,
            company: "Top Snap Marketing Gold Coast Central",
            address1: "24 Nightjar Drive",
            address2: "Upper Coomera QLD 4209",
            phone: "0448 386 443",
            email: "chris@topsnap.com",
            emailkey: 9
        },
        {
            name: "Chris & Liz Blockley",
            place: "Gold Coast Central & North",
            place2: "Gold Coast Central",
            lat: -28.013453,
            lng: 153.429022,
            company: "Top Snap Marketing Gold Coast Central",
            address1: "24 Nightjar Drive",
            address2: "Upper Coomera QLD 4209",
            phone: "0448 386 443",
            email: "chris@topsnap.com",
            emailkey: 9
        },
        {
            name: "Darrin Braybrook",
            place: "Gold Coast South",
            place2: "Gold Coast South",
            lat: -28.124344,
            lng: 153.452373,
            company: "Top Snap Marketing Gold Coast South",
            address1: "43 Ironbark Street",
            address2: "Elanora QLD 4221",
            phone: "0402 295 842",
            email: "darrin@topsnap.com",
            emailkey: 10
        },
        {
            name: "Mike Leyland",
            place: "Cairns North & South",
            place2: "Cairns North",
            lat: -16.483802,
            lng: 145.465922,
            company: "Top Snap Marketing Cairns",
            address1: "PO Box 522",
            address2: "Smithfield QLD 4878",
            phone: "0409 278 597",
            email: "mike.leyland@topsnap.com",
            emailkey: 11
        },
        {
            name: "Mike Leyland",
            place: "Cairns North & South",
            place2: "Cairns South",
            lat: -16.925397,
            lng: 145.775092,
            company: "Top Snap Marketing Cairns",
            address1: "PO Box 522",
            address2: "Smithfield QLD 4878",
            phone: "0409 278 597",
            email: "mike.leyland@topsnap.com",
            emailkey: 11
        }
    ],
    "NSW": [
        {
            name: "Anthony Solman",
            place: "Byron Bay",
            place2: "Byron Bay",
            lat: -28.640988,
            lng: 153.611841,
            company: "Top Snap Marketing Byron Bay",
            address1: "208 Eureka Road",
            address2: "Rosebank NSW 2480",
            phone: "0411 444 223",
            email: "anthony.solman@topsnap.com",
            emailkey: 12
        },
        {
            name: "Karen Brown",
            place: "Newcastle",
            place2: "Newcastle",
            lat: -32.925909,
            lng: 151.781216,
            company: "Top Snap Marketing Newcastle North",
            address1: "2 Joanne St",
            address2: "Kotara NSW 2289",
            phone: "0425 823 646",
            email: "karen@topsnap.com",
            emailkey: 13
        },
        {
            name: "Greg Rivers",
            place: "Central Coast",
            place2: "Central Coast",
            lat: -33.422186,
            lng: 151.396694,
            company: "Top Snap Marketing Central Coast",
            address1: "58 Pomona Road",
            address2: "Empire Bay NSW 2257",
            phone: "0428 247 528",
            email: "greg@topsnap.com",
            emailkey: 14
        },
        {
            name: "Greg Scott",
            place: "Sydney Central",
            place2: "Sydney Central",
            lat: -33.876316,
            lng: 151.20718,
            company: "Top Snap Marketing Sydney Central",
            address1: "23/104 Miller Street",
            address2: "Pyrmont NSW 2009",
            phone: "0415 905 932",
            email: "greg.scott@topsnap.com",
            emailkey: 15
        }
    ],
    "VIC": [
        {
            name: "John Woolley",
            place: "Melbourne - The Peninsula",
            place2: "Melbourne - The Peninsula",
            lat: -38.217602,
            lng: 145.137234,
            company: "Top Snap Marketing The Peninsula",
            address1: "PO Box 594, Eramosa Road West",
            address2: "Somerville VIC 3912",
            phone: "0419 889 398",
            email: "john.woolley@topsnap.com",
            emailkey: 16
        },
        {
            name: "Rick Edwards",
            place: "Melbourne East",
            place2: "Melbourne East",
            lat: -37.81451,
            lng: 144.963298,
            company: "Top Snap Marketing Doncaster",
            address1: "73 Norma Crescent",
            address2: "Knoxfield VIC 3180",
            phone: "0431 413 470",
            email: "rick.edwards@topsnap.com",
            emailkey: 17
        }
    ],
    "NT": [
            {
                name: "Anne Nguyen-Huyen",
                place: "Darwin",
                place2: "Darwin",
                lat: -12.463631,
                lng: 130.842991,
                company: "Top Snap Marketing Darwin",
                address1: "PO Box 237",
                address2: "Nightcliff NT 0814",
                phone: "0438 386 600",
                email: "anne@topsnap.com",
                emailkey: 18
            }
    ],
    "SA": [
            {
                name: "Shaul Arnold",
                place: "Adelaide Central",
                place2: "Adelaide Central",
                lat: -34.925961,
                lng: 138.599896,
                company: "Top Snap Marketing - Adelaide Central",
                address1: "",
                address2: "",
                phone: "0419 816 998",
                email: "shaul.arnold@topsnap.com",
                emailkey: 19
            },
            {
                name: "Jeff Richardson",
                place: "North East Adelaide",
                place2: "North East Adelaide",
                lat: -34.817397,
                lng: 138.650551,
                company: "Top Snap Marketing - North East Adelaide",
                address1: "PO Box 122",
                address2: "Ingle Farm SA 5098",
                phone: "0439 742 467",
                email: "jeff.richardson@topsnap.com",
                emailkey: 20
            }
    ],
    "WA": [
            {
                name: "Dave Sheilds",
                place: "South Perth to Kardinya",
                place2: "South Perth to Kardinya",
                lat: -32.052398,
                lng: 115.79484,
                company: "Top Snap Marketing - South Perth to Kardinya",
                address1: "PO Box 1095",
                address2: "Willagee WA 6156",
                phone: "0427 497 020",
                email: "dave@topsnap.com",
                emailkey: 21
            }
    ]
};

var zoomGoogleMapToState = function(lat, lng) {
    map.setCenter(new GLatLng(lat, lng), 5);
    map.removeControl(statesControl);
    drawOperators();

    $("#selMap").val(selectedStateIndex);

    citiesControl = new citiesZoomControl();
    map.addControl(citiesControl);
}
var zoomGoogleMapToCity = function(lat, lng) {
    map.setCenter(new GLatLng(lat, lng), 9);
    map.removeControl(citiesControl);

    backControl = new backZoomControl();
    map.addControl(backControl);
}


function statesZoomControl() { }
statesZoomControl.prototype = new GControl();


statesZoomControl.prototype.initialize = function(map) {
    var container = document.createElement("div");

    for (var i in states) {
        if (typeof i != "undefined") {
            eval("var tmpDiv" + i + " = document.createElement('div');");
            eval("this.setButtonStyle_(tmpDiv" + i + ");");
            eval("container.appendChild(tmpDiv" + i + ");");
            eval("tmpDiv" + i + ".appendChild(document.createTextNode(states[" + i + "].name));");
            eval("GEvent.addDomListener(tmpDiv" + i + ", 'click', function() {selectedState = states[" + i + "].name; selectedStateIndex = " + i + "; zoomGoogleMapToState(states[" + i + "].lat, states[" + i + "].lng);});");
        }
    }

    map.getContainer().appendChild(container);
    return container;
}

statesZoomControl.prototype.setButtonStyle_ = function(button) {
    button.style.textDecoration = "underline";
    button.style.color = "#0000cc";
    button.style.backgroundColor = "white";
    button.style.font = "small Arial";
    button.style.border = "1px solid black";
    button.style.padding = "2px";
    button.style.marginBottom = "3px";
    button.style.textAlign = "center";
    button.style.width = "6em";
    button.style.cursor = "pointer";
}

statesZoomControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
}


function citiesZoomControl() { }
citiesZoomControl.prototype = new GControl();

citiesZoomControl.prototype.initialize = function(map) {
    var container = document.createElement("div");

    var backDiv = document.createElement('div');
    this.setButtonStyle_(backDiv);
    container.appendChild(backDiv);
    backDiv.appendChild(document.createTextNode("Back"));
    GEvent.addDomListener(backDiv, 'click', function() {
        map.setCenter(new GLatLng(-25.906668, 133.850097), 4);
        map.clearOverlays();
        map.removeControl(citiesControl);
        map.addControl(statesControl);
        $("#contactfrm").hide();
        $("#info").show();
        clearInputs();
        $("#selMap").val('');
    });

    for (var i in cities[selectedState]) {
        if (typeof i != "undefined") {
            eval("var tmpDiv" + i + " = document.createElement('div');");
            eval("this.setButtonStyle_(tmpDiv" + i + ");");
            eval("container.appendChild(tmpDiv" + i + ");");
            eval("tmpDiv" + i + ".appendChild(document.createTextNode(cities[selectedState][" + i + "].name));");
            eval("GEvent.addDomListener(tmpDiv" + i + ", 'click', function() { zoomGoogleMapToCity(cities[selectedState][" + i + "].lat, cities[selectedState][" + i + "].lng);});");
        }
    }

    map.getContainer().appendChild(container);
    return container;
}

citiesZoomControl.prototype.setButtonStyle_ = function(button) {
    button.style.textDecoration = "underline";
    button.style.color = "#0000cc";
    button.style.backgroundColor = "white";
    button.style.font = "small Arial";
    button.style.border = "1px solid black";
    button.style.padding = "2px";
    button.style.marginBottom = "3px";
    button.style.textAlign = "center";
    button.style.width = "6em";
    button.style.cursor = "pointer";
}

citiesZoomControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
}


function backZoomControl() { }
backZoomControl.prototype = new GControl();

backZoomControl.prototype.initialize = function(map) {
    var container = document.createElement("div");

    var backDiv2 = document.createElement('div');
    this.setButtonStyle_(backDiv2);
    container.appendChild(backDiv2);
    backDiv2.appendChild(document.createTextNode("Back"));
    GEvent.addDomListener(backDiv2, 'click', function() {
        map.setCenter(new GLatLng(states[selectedStateIndex].lat, states[selectedStateIndex].lng), 5);
        map.removeControl(backControl);
        map.addControl(citiesControl);
        updCntFrm(head_office);
        $("#info").show();

        clearInputs();
    });

    map.getContainer().appendChild(container);
    return container;
}

backZoomControl.prototype.setButtonStyle_ = function(button) {
    button.style.textDecoration = "underline";
    button.style.color = "#0000cc";
    button.style.backgroundColor = "white";
    button.style.font = "small Arial";
    button.style.border = "1px solid black";
    button.style.padding = "2px";
    button.style.marginBottom = "3px";
    button.style.textAlign = "center";
    button.style.width = "6em";
    button.style.cursor = "pointer";
}

backZoomControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(7, 7));
}


var statesControl = new statesZoomControl();
var citiesControl;
var backControl;
var map;

function createMarker(point, operator, desc) {
    var marker = new GMarker(point);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml("<b>" + operator + "</b><br />" + desc);
    });
    return marker;
}

function drawOperators() {
    var latlng;
    for (var i in operators[selectedState]) {
        if (typeof i != "undefined") {
            latlng = new GLatLng(operators[selectedState][i].lat, operators[selectedState][i].lng);
            map.addOverlay(createMarker(latlng, operators[selectedState][i].name, operators[selectedState][i].place2 + "<br /><a href='javascript:void(0);' onclick='updCntFrm(operators[\"" + selectedState + "\"][" + i + "]);'>Contact form</a>"));
        }
    }
}

function drawAllOperators() {
    var latlng;
    for (var s in states) {
        if (typeof s != "undefined") {
            selectedState = states[s].name;
            for (var i in operators[selectedState]) {
                if (typeof i != "undefined") {
                    latlng = new GLatLng(operators[selectedState][i].lat, operators[selectedState][i].lng);
                    map.addOverlay(createMarker(latlng, operators[selectedState][i].name, operators[selectedState][i].place2 + "<br /><a href='javascript:void(0);' onclick='updCntFrm(operators[\"" + selectedState + "\"][" + i + "]);'>Contact form</a>"));
                }
            }
        }
    }
}

function initialize() {
    //var map;
    if (GBrowserIsCompatible()) {  
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(-25.958045, 132.890625), 4);

        map.addControl(new GLargeMapControl());
        map.enableDoubleClickZoom();
        
        drawAllOperators();
       
        var baseIcon = new GIcon(G_DEFAULT_ICON);
        baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
    }
    
    $("#hmtctl").hide();
}

var updCntFrm = function(obj) {
    clearInputs();
    $("#info").hide();
    $("#contactfrm").show();


    if (obj != null && typeof obj == "object") {
        if (obj == head_office) $("#contact_head_office").hide();
        else $("#contact_head_office").show();

        $("#place").text(obj.place);
        $("#operator").text(obj.name);
        $("#address1").text(obj.address1);
        $("#address2").text(obj.address2);
        $("#phone").text(obj.phone);
        $("#email").text(obj.email);
        $("#email").attr("href", "mailto:" + obj.email);
        $("#emailkey").val(obj.emailkey);

        $("#uname").focus()
    }
}

var clearInputs = function() {
    $("#contactfrm input[type=text]").val('');
    $("#contactfrm textarea").val('');
}

function MDControl() { } MDControl.prototype = new GControl();

MDControl.prototype.initialize = function(map) {

    var container = document.createElement("div");
    var selMap = document.createElement("select");
    selMap.id = "selMap";
    selMap.className = "s_button";
    selMap.title = "Change Map Type";

    // Create options list for map types
    selMap.options[selMap.options.length] = new Option("", -1);
    for (var i in states) {
        if (typeof i != "undefined") {
            var text = "   " + states[i].name;
            selMap.options[selMap.options.length] = new Option(text, i);
        }
    }
    selMap.selectedIndex = 0;

    GEvent.addDomListener(selMap, "change", function() {
        if (selMap.options[selMap.selectedIndex].value == -1) initialize();
        else {
            selectedStateIndex = selMap.options[selMap.selectedIndex].value;
            selectedState = states[selectedStateIndex].name;
            map.clearOverlays();
            map.removeControl(citiesControl);
            zoomGoogleMapToState(states[selectedStateIndex].lat, states[selectedStateIndex].lng);
        }
        selMap.blur();
    });

    container.appendChild(selMap);
    map.getContainer().appendChild(container);
    return container;
}

MDControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 7));
}
