var schoolPolygon;
var polygon;
var polyPoints = new Array();
var loadingRates = false;
var markerList = [];
var trainList = [];
var schoolList = [];
var supermarketList = [];
var userDefinedList = [];
var busList = [];
var suburbList = [];
var markerIndexes = [];
var watchList = [];
var info = [];
var iconsOn = [];
var iconsOff = [];
var suburbIcon = [];
var owner;
var user;
var currentlySelectedSchool;
var isSundexExpanded = false;

var map;
var lastClickedMarkerIndex;
var zeroPoint = new GLatLng(-41.248512, 176);
var geocoder;
var x = 0;


function onloadHook()
{
    load();
}


function expandSundexPanel()
{
    if (!isSundexExpanded)
    {
        new Effect.Scale($('sundex-panel'), 180, {scaleY:false});
        isSundexExpanded = true;
    }
}
function closeSundexPanel()
{
    if (isSundexExpanded)
    {
        new Effect.Scale($('sundex-panel'), 55, {scaleY:false});
        isSundexExpanded = false;
    }
}

function setLastZoomButton(obj)
{
    $('zoom' + currentZoom).src = 'image/buttons/zoom' + currentZoom + '.gif';
    //reset last
    $('zoom' + obj).src = 'image/buttons/zoom' + obj + '-down.gif';
    //push down
    map.setZoom(11 + 2 * (obj - 1));
    currentZoom = obj;
}

function handleEnter(field, event) {
    var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
    if (keyCode == 13) {
        getLocationInfo();
        return false;
    }
    else
    {
        loadStreetsViaAjax();
        return true;
    }
}


function createIcons() {

    iconsOn[1] = new GIcon();
    iconsOn[1].image = "image/openhomes/jp/pointer.gif";
    iconsOn[1].iconSize = new GSize(44, 28);
    iconsOn[1].iconAnchor = new GPoint(22, 28);
    iconsOn[1].infoWindowAnchor = new GPoint(5, 1);


    iconsOn[3] = new GIcon();
    iconsOn[3].image = "image/openhomes/train.gif";
    iconsOn[3].shadow = "image/openhomes/train.gif";
    iconsOn[3].iconSize = new GSize(14, 20);
    iconsOn[3].shadowSize = new GSize(14, 20);
    iconsOn[3].iconAnchor = new GPoint(6, 28);
    iconsOn[3].infoWindowAnchor = new GPoint(5, 1);

    iconsOn[4] = new GIcon();
    iconsOn[4].image = "image/openhomes/bus2.gif";
    iconsOn[4].iconSize = new GSize(24, 14);
    iconsOn[4].shadowSize = new GSize(24, 14);
    iconsOn[4].iconAnchor = new GPoint(1, 7);
    iconsOn[4].infoWindowAnchor = new GPoint(5, 1);


    iconsOn[8] = new GIcon();
    iconsOn[8].image = "image/school.gif";
    iconsOn[8].iconSize = new GSize(62, 20);
    iconsOn[8].iconAnchor = new GPoint(1, 10);

    iconsOn[9] = new GIcon();
    iconsOn[9].image = "image/school2.gif";
    iconsOn[9].iconSize = new GSize(62, 20);
    iconsOn[9].iconAnchor = new GPoint(1, 10);

    iconsOff[12] = new GIcon();
    iconsOff[12].image = "image/buttons/keyring-pointer.gif";
    iconsOff[12].iconSize = new GSize(80, 46);
    iconsOff[12].iconAnchor = new GPoint(40, 46);
    iconsOff[12].infoWindowAnchor = new GPoint(5, 1);


    iconsOn[13] = new GIcon();
    iconsOn[13].image = "image/countdown2.gif";
    iconsOn[13].iconSize = new GSize(58, 14);
    iconsOn[13].iconAnchor = new GPoint(1, 7);
    iconsOn[14] = new GIcon();
    iconsOn[14].image = "image/foodtown.gif";
    iconsOn[14].iconSize = new GSize(69, 15);
    iconsOn[14].iconAnchor = new GPoint(1, 7);
    iconsOn[15] = new GIcon();
    iconsOn[15].image = "image/newworld.gif";
    iconsOn[15].iconSize = new GSize(69, 15);
    iconsOn[15].iconAnchor = new GPoint(1, 7);
    iconsOn[16] = new GIcon();
    iconsOn[16].image = "image/paknsave.gif";
    iconsOn[16].iconSize = new GSize(36, 22);
    iconsOn[16].iconAnchor = new GPoint(1, 11);
    iconsOn[17] = new GIcon();
    iconsOn[17].image = "image/woolworths.gif";
    iconsOn[17].iconSize = new GSize(69, 15);
    iconsOn[17].iconAnchor = new GPoint(1, 7);
}

function openAgentWindow(url)
{
    window.open(url);
    //    window.open(url, "My openhomes", "toolbar=no,titlebar=no,menubar=yes,scrollbars=yes,statusbar=no,resizable=yes,width=800,height=500,left=50,top=50");
    return false;
}
function createMarker(point, values, number) {
    var markerObject = {
        mk:undefined,
        point:point,
        value:values,
        hasBeenAdded:false
    };
    if (values.type == 'bus') {
        var marker = new GMarker(point, iconsOn[4]);
        markerObject.mk = marker;
        busList.push(markerObject);
        return markerObject;
    }
    if (values.type == 'train') {
        var marker = new GMarker(point, iconsOn[3]);
        markerObject.mk = marker;
        trainList.push(markerObject);
        return markerObject;
    }
    if (values.type == 'school') {
        if (values.poly == undefined)
        {
            var marker = new GMarker(point, { icon: iconsOn[8], title: values.tip});
            markerObject.mk = marker;
        } else {
            var marker = new GMarker(point, { icon: iconsOn[9], title: values.tip});
            markerObject.mk = marker;
            GEvent.addListener(marker, "click", function() {
                drawSchoolPolygon(markerObject, values.poly);
            });
        }
        schoolList.push(markerObject);

        return markerObject;
    }
    if (values.type == 'mkt') {
        if (values.tip.indexOf('World') != -1)
            var marker = new GMarker(point, { icon: iconsOn[15], title: values.tip});
        else if (values.tip.indexOf('Countdown') != -1)
            var marker = new GMarker(point, { icon: iconsOn[13], title: values.tip});
        else                if (values.tip.indexOf('Wool') != -1)
            var marker = new GMarker(point, { icon: iconsOn[17], title: values.tip});
        else                    if (values.tip.indexOf('Pak') != -1)
            var marker = new GMarker(point, { icon: iconsOn[16], title: values.tip});
        else                        if (values.tip.indexOf('Food') != -1)
            var marker = new GMarker(point, { icon: iconsOn[14], title: values.tip});
        markerObject.mk = marker;
        supermarketList.push(markerObject);
        return markerObject;
    }
    if (values.type == 'user') {
        var marker = new GMarker(point, {draggable: false});
        var opts = {maxWidth:380};
        markerObject.mk = marker;
        userDefinedList.push(markerObject);
        return markerObject;
    }
}


function submitHomeData(lat, lng)
{
    GDownloadUrl("../openhomes?action=add_house" +
                 "&addr=" + $('addr-input').value +
                 "&lat=" + lat +
                 "&lng=" + lng +
                 "&b=" + $('blurb-input').value +
                 "&h=" + $('head-input').value +
                 "&h1=" + $('h1-input').value +
                 "&m1=" + $('m1-input').value +
                 "&h2=" + $('h2-input').value +
                 "&m2=" + $('m2-input').value +
                 "&bd=" + $('bed-input').value +
                 "&bath=" + $('bath-input').value +
                 "&pk=" + $('park-input').value +
                 "&a=" + $('agent-input').value +
                 "&price=" + $('price-input').value, function(data, responseCode) {
        showHelpMessage('OK, house entered and saved!');
    });
    map.closeInfoWindow();

}
function deleteHouse(id)
{
    GDownloadUrl("../openhomes?action=delete_house&id=" + id, function(data, responseCode) {
        var mk = markerList[id];
        map.removeOverlay(mk.mk);
        addVisibleMarkersToMap();
        showHelpMessage('Ok, that house has been deleted and saved... :-)');
    });
    map.closeInfoWindow();
}
function saveHomeData()
{
    GDownloadUrl("../openhomes?action=save_houses", function(data, responseCode) {
        showHelpMessage('Ok, the list has been saved... :-)');
    });
    map.closeInfoWindow();
}


function addVisibleMarkersToMap()
{
    var mapbounds = map.getBounds();

    var zoomLevel = map.getZoom();


    if (zoomLevel >= 15)
        for (i = 0; i < markerIndexes.length; i++)
        {
            var id = markerIndexes[i];
            var mk = markerList[id];
            var isVisible = mapbounds.contains(mk.mk.getPoint());

            if (!mk.hasBeenAdded && isVisible)
            {
                map.addOverlay(mk.mk);
                mk.hasBeenAdded = true;
            }
        }
    else {
        for (i = 0; i < markerIndexes.length; i++)
        {
            var id = markerIndexes[i];
            var mk = markerList[id];
            var isVisible = mapbounds.contains(mk.mk.getPoint());

            if (zoomLevel < 15 && mk.hasBeenAdded && isVisible) {
                map.removeOverlay(mk.mk);
                mk.hasBeenAdded = false;
            }
        }
    }


    for (i = 0; i < userDefinedList.length; i++)
    {
        var mk = userDefinedList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }
    }
    for (i = 0; i < schoolList.length; i++)
    {
        var mk = schoolList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible && zoomLevel >= 13)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }
        else if (zoomLevel < 13 && mk.hasBeenAdded == true && isVisible) {
            map.removeOverlay(mk.mk);
            mk.hasBeenAdded = false;
        }
    }

    for (i = 0; i < supermarketList.length; i++)
    {
        var mk = supermarketList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible && zoomLevel >= 13)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }
        else if (zoomLevel < 13 && mk.hasBeenAdded == true && isVisible) {
            map.removeOverlay(mk.mk);
            mk.hasBeenAdded = false;
        }
    }

    /*for (i = 0; i < trainList.length; i++)
    {
        var mk = trainList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible && zoomLevel >= 15)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }
        else if (zoomLevel < 15 && mk.hasBeenAdded == true && isVisible) {
            map.removeOverlay(mk.mk);
            mk.hasBeenAdded = false;
        }
    } */


    for (i = 0; i < busList.length; i++)
    {
        var mk = busList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible && zoomLevel >= 15)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }
        else if (zoomLevel < 15 && mk.hasBeenAdded == true && isVisible) {
            map.removeOverlay(mk.mk);
            mk.hasBeenAdded = false;
        }
    }

    for (i = 0; i < suburbList.length; i++)
    {
        var mk = suburbList[i];
        var isVisible = mapbounds.contains(mk.mk.getPoint());
        if (mk.hasBeenAdded == false && isVisible && zoomLevel < 15)
        {
            map.addOverlay(mk.mk);
            mk.hasBeenAdded = true;
        }

        else if (zoomLevel >= 15 && mk.hasBeenAdded == true && isVisible) {
            map.removeOverlay(mk.mk);
            mk.hasBeenAdded = false;
        }
    }
}


function loadNonHouseMarkerDataViaAjax(action)
{
    var mapbounds = map.getBounds();
    var sw = mapbounds.getSouthWest();
    var ne = mapbounds.getNorthEast();

    GDownloadUrl("../openhomes?action=" + action + "&sw=" + sw.toUrlValue() + "&ne=" + ne.toUrlValue(),
            function(data, responseCode) {

                var xml = GXml.parse(data);
                var markers = xml.documentElement.getElementsByTagName("marker");
                for (i = 0; i < busList.length; i++)
                {
                    var mk = busList[i];
                    var isVisible = mapbounds.contains(mk.mk.getPoint());
                    if (mk.hasBeenAdded == true) {
                        map.removeOverlay(mk.mk);
                    }
                }
                busList.clear()
                for (var i = 0; i < markers.length; i++) {
                    var marker = markers[i];
                    var point = new GLatLng(parseFloat(marker.getAttribute("lat")),
                            parseFloat(marker.getAttribute("lng")));
                    var dataValues =
                    {
                        type:marker.getAttribute("type"),
                        tip:marker.getAttribute("tip"),
                        size:marker.getAttribute("size")
                    };
                    var polyCoords = marker.getAttribute("poly");

                    if (polyCoords != undefined)
                    {
                        var points = new Array();
                        //                        GLog.write(polyCoords);
                        var encodedPolyline = new GPolyline.fromEncoded({
                            color: "#FF0000",
                            weight: 10,
                            points: polyCoords,
                            levels: "BBB",
                            zoomFactor: 32,
                            numLevels: 4
                        });
                        //                        GLog.write('here 2');

                        for (var vertexcnt = 0; vertexcnt < encodedPolyline.getVertexCount(); vertexcnt++)
                        {
                            points.push(encodedPolyline.getVertex(vertexcnt));
                        }
                        //                        GLog.write('here 3');
                        dataValues.poly = points;
                    }

                    var markerObject = createMarker(point, dataValues, i);

                }
                addVisibleMarkersToMap();
            });
}

function rand(n)
{
    return ( Math.floor(Math.random() * n + 1) );
}

// byte2hex - Takes number n from 0-255 and converts to hexadecimal string e.g. 'AA'
// Courtesy Jim Bumgardner of krazydad.com
function byte2Hex(n)
{
    var nybHexString = "0123456789ABCDEF";
    return String(nybHexString.substr((n >> 4) & 0x0F, 1)) + nybHexString.substr(n & 0x0F, 1);
}

// RGB2Color - Takes 3 hexadecimal string color components and concatenates into standard HTML format
// Courtesy Jim Bumgardner of krazydad.com
function RGB2Color(r, g, b)
{
    return '#' + byte2Hex(r) + byte2Hex(g) + byte2Hex(b);
}

function drawPolygon(point) {
    if (point != null) polyPoints.push(point);
    map.removeOverlay(polygon)
    polygon = new GPolygon(polyPoints, "#000000", 2, .2, "#999999", .2);
    map.addOverlay(polygon);
}
function drawSchoolPolygon(schoolMarkerObject, points) {
    if (schoolPolygon != undefined) map.removeOverlay(schoolPolygon);
    if (currentlySelectedSchool == schoolMarkerObject)
    {
        currentlySelectedSchool = undefined;
        return;
    }
    if (points == undefined) return;
    currentlySelectedSchool = schoolMarkerObject;
    schoolPolygon = new GPolygon(points, "#000000", 2, .2, "#ffff00", .4);
    map.addOverlay(schoolPolygon);
}
function showPolygon() {
    for (var i = 0; i < polyPoints.length; i++)
    {
        GLog.write(polyPoints[i]);
    }
}

function loadStreetsViaAjax()
{
    GDownloadUrl("../openhomes?action=place&place=" + $('helloForm:address').value,
            function(data, responseCode) {
                var xml = GXml.parse(data);
                var markers = xml.documentElement.getElementsByTagName("l");
                var height = markers.length * 15;
                if (height > 150) height = 150;
                var lines = '<div class="raised-grey" style="width:280px;">' +
                            '<b class="top"><b class="b1"></b><b class="b2"></b><b class="b3"></b><b class="b4"></b></b>' +
                            '<div class="boxcontent">' +
                            '<div class="street-block">';
                $('rates').style.display = 'block';
                for (var i = 0; i < markers.length; i++) {
                    var line = markers[i];
                    var str;
                    if (typeof line.textContent != 'undefined')
                        str = line.textContent;
                    else
                        str = line.text;
                    lines += '<div class="place-line"><a  onclick="$(\'helloForm:address\').value=\'' + str + '\';getLocationInfo();" >' + str + '</a></div>';
                }
                if (markers.length >= 15)
                    lines += '<div class="place-line">more...</div>';
                lines += '</div>' +
                         '</div>' +
                         '<b class="bottom"><b class="b4b"></b><b class="b3b"></b><b class="b2b"></b><b class="b1b"></b></b>' +
                         '</div>';

                $('rates').innerHTML = lines;
            });
}

function doSunProfile(lat, lng, addr, isCustom)
{
    if (lat == '' || lng == '')
    {
        $('sun-tab-inside').innerHTML = '<div style="padding:5px">' +
                                        '<h2>Please click on a location on the map, or search for an address.<h2><div>We can then calculate the sun exposure for that location...' +
                                        '</div></div>'
        $('sun-tab').show();

        return;
    }
    $('helloForm:latStore').value = lat;
    $('helloForm:lngStore').value = lng;


    if ($('sundex-button') != undefined)
    {
        $('sundex-button').src = 'image/buttons/calculating.gif'
    }
    showHelpMessage('Calculating SunDex<img src="image/openhomes/Throbber-small.gif" alt=""/>');
    $('sun-tab-inside').innerHTML = '<div class="calc-sundex">Calculating Altitude and SunDex<div><img src="image/openhomes/Throbber-small.gif" alt=""/></div></div>'
    $('sun-tab').show();
    $("close-tab").show();
    $('slope-tab').hide();


    //
    new Ajax.Request('../openhomes/' + Math.random() + '/?action=sun_profile',
    {
        method:'get',
        parameters: {lat: lat + '', lng: lng + ''},

        onSuccess: function(transport) {
            var response = transport.responseText || "no response text";
//          alert("Success! \n\n" + response);
        {
            var xml = GXml.parse(response);
            var alt = xml.firstChild.getAttribute("alt");
            var html = '<div style="margin-top:5px; padding-left:20px; width:200px; float:left">';
            html += '<img src="../openhomes?action=sun_profile_img&id=' + Math.random() + '"/></div>';
            html += '<div style="float:left; padding:5px 0 0 10px; width:200px">';

            html += '<div style="padding:5px; font-size:12pt; font-weight:bold">' +
                    '<div style="padding-bottom:5px">School zones</div>';

            var markers = xml.documentElement.getElementsByTagName("schoolname");
            for (var i = 0; i < markers.length; i++) {
                var line = markers[i];
                var str;
                if (typeof line.textContent != 'undefined')
                    str = line.textContent;
                else
                    str = line.text;

                html += '<div style="padding-left:5px;font-size:10pt; font-weight:normal">' + str + '</div>';

            }
            html += "</div>"
            html += '<div style="padding:5px; font-size:12pt; font-weight:bold">Altitude:' + alt + 'm</div>';
//                if (user == 'admin') html += '<div>Lat:' + lat + ' Lng:' + lng + '</div>'
            html += "</div>"
            html += '<div >';
            html += '<div  style="float:left;width:196px" >';
            html += '<a style=" float:left" href="purchase.jsf?addr=' + encodeURI(addr) + '&lat=' + lat + '&lng=' + lng + '&custom=' + isCustom + '">';
            html += '<img id="popup1" src="../resources/images/purchase-button.gif" alt=""/></a></div>';
            html += '    </div >';
//                html += '<a style="float:left" href="purchase.jsf?addr=' + encodeURI(addr) +
            //                        '&lat=' + lat + '&lng=' + lng + '&custom=' + isCustom + '"><img src="image/buttons/purchase.gif" height="38px" alt=""/></a>';
            html += "<br/>"

            expandSundexPanel();


            $('sun-tab-inside').innerHTML = html
//                showHelpMessage(getZoomDescription());
            if ($('sundex-button') != undefined)
            {
                $('sundex-button').src = 'image/buttons/sundex.gif'
            }

        }

        },
        onFailure: function() {
            alert('Something went wrong...')
        }
    });


//    GDownloadUrl("../openhomes?action=sun_profile&lat=" + lat + "&lng=" + lng,
    //            function(data, responseCode) );
}
function doSlopeProfile(lat, lng)
{
    if (lat == '' || lng == '')
    {
        $('slope-tab').innerHTML = '<div style="padding:5px">' +
                                   '<h2>Please click on a location on the map, or search for an address.<h2><div>We can then calculate the slope profile for that location...' +
                                   '</div></div>'
        $('slope-tab').show();

        return;
    }

    if ($('slope-button') != undefined)
    {
        $('slope-button').src = 'image/buttons/calculating.gif'
    }
    showHelpMessage('Calculating Slope<img src="image/openhomes/Throbber-small.gif" alt=""/>');
    $('slope-tab').innerHTML = '<div class="calc-sundex">Calculating Slope Profile<div><img src="image/openhomes/Throbber-small.gif" alt=""/></div></div>'
    $('sun-tab').hide();
    $("close-tab").hide();
    $('slope-tab').show();


    //
    new Ajax.Request('../openhomes/' + Math.random() + '/?action=slope_profile',
    {
        method:'get',
        parameters: {lat: lat + '', lng: lng + ''},

        onSuccess: function(transport) {
            var response = transport.responseText || "no response text";
            var html = '<div style="overflow:auto"><img style="margin-top:5px" src="../openhomes?action=slope_profile_img&id=' + Math.random() + '"/></div>';
            expandSundexPanel();
            $("close-tab").show();
            $('slope-tab').innerHTML = html
        },
        onFailure: function() {
            alert('Something went wrong...')
        }

    });
}

var myPano;
var currentYaw = 180;
var currentPitch = 0;
var timer;

function spiral() {
    currentYaw += 2;
    myPano.panTo({yaw:currentYaw, pitch:currentPitch});
}

function load() {

    if (GBrowserIsCompatible()) {
        GDownloadUrl("../openhomes?action=reset");
        owner = $('owner').value;
        user = $('user').value;
        geocoder = new GClientGeocoder();

        var map_container = $("map");
        var right_container = $("right");
        var h = self.innerHeight ? self.innerHeight : document.documentElement.clientHeight;
        if (h == 0) h = 500;
        map_container.style.height = (h - 115) + 'px';

        map = new GMap2(document.getElementById("map"));
        createIcons();

        myPano = new GStreetviewPanorama(document.getElementById("pano"));
        myPano.setLocationAndPOV(new GLatLng(-41.26025916937327, 174.86801147460938), {yaw: currentYaw, pitch: currentPitch});
        timer = window.setInterval(spiral, 200);


        //                map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
        map.setCenter(new GLatLng(-41.26025916937327, 174.86801147460938), 11);

        GEvent.addListener(map, "click", function(overlay, point) {
            map.closeInfoWindow();
            if (user == 'admin') {
                //                drawPolygon(point);
            }
            if (point != undefined)
            {
                if (point.lat() < -41.190 && point.lat() > -41.36598753850305 &&
                    point.lng() > 174.59884643554688 && point.lng() < 175.15708923339844)
                {
                    doSunProfile(point.lat(), point.lng(), "Your custom location!", true);
                    showLocation("Your custom location!", point, true)
                } else {
                    $('sun-tab-inside').innerHTML = '<img src="image/sundex/no-sundex.gif"/>';

                }
            }
        });
        GEvent.addListener(map, "moveend", function() {

            if (map.getZoom() > 14) {
                loadNonHouseMarkerDataViaAjax("bus_info");
            }
            else if (map.getZoom() > 12) {
                loadNonHouseMarkerDataViaAjax("amenity_info");
            }
            else {
            }
        });
        GEvent.addListener(map, "move", function() {

            addVisibleMarkersToMap();
        });
        GEvent.addListener(map.getInfoWindow(), "closeclick", function() {
            $('video').style.display = 'none';
        });

        GEvent.addListener(map, 'zoomend', function (fromZoom, toZoom) {
            if (toZoom <= 10) {
                map.zoomIn();
            }

            showHelpMessage(getZoomDescription());
            map.closeInfoWindow();
            //            addVisibleMarkersToMap();

        });
        if (!getLocationInfo())
        {
            //            getSuburbFiltered();
        }

        if (owner != 'keyring')
        {
            $('left').style.display = 'block';
        }


        var points = [];


        points.push(new GLatLng(-41.190, 174.59884643554688));
        points.push(new GLatLng(-41.190, 175.15708923339844));
        points.push(new GLatLng(-41.36598753850305, 175.15708923339844));
        points.push(new GLatLng(-41.36598753850305, 174.59884643554688));
        points.push(new GLatLng(-41.190, 174.59884643554688));

//        map.addOverlay(new GPolygon(points, "#FFF066", 2, 1, "#FF8400", 0.1));

    }
}

function getZoomDescription()
{
    switch (map.getZoom())
            {
        case  10:case 11: return 'Welcome to keyring! click the ' + ' button below to zoom in and see schools and supermarkets...click inside the yellow box for a SunDex!'
        case 14: case 13: case 12: {
        if (currentlySelectedSchool != undefined)
            return 'Showing schools  and supermarkets. Click on yellow schools to hide the school zone. Zoom in to see busses and trains...';
        else
            return 'Showing schools (click on yellow school to see the school zone) and supermarkets. Zoom in to see busses and trains...';
    }
        case 15: case 16: case 17:case 18:case 19:case 20:case 21:        return 'Showing everything. Click on the yellow schools to see its school zone (green schools are not zoned)';
    }
}
function getRatesInformation(id) {
    if (loadingRates == true) {
        showHelpMessage('Still loading rates...<img src="image/openhomes/Throbber-small.gif" alt=""/>');
        return;
    }
    showHelpMessage('Loading...<img src="image/openhomes/Throbber-small.gif" alt=""/>');
    loadingRates = true;
    var url = 'openhomes';
    var pars = 'action=wcc-rates&no=' + id;
    var myAjax = new Ajax.Request(url, { method: 'get', parameters: pars, onComplete: showRatesData,
        onFailure: reportError()});
}
function getRatesInformationForAddr(addrNum, addr) {
    if (loadingRates == true) {
        showHelpMessage('Still loading rates...<img src="image/openhomes/Throbber-small.gif" alt=""/>');
        return;
    }
    showHelpMessage('Loading rates...<img src="image/openhomes/Throbber-small.gif" alt=""/>');
    loadingRates = true;


    var url = 'openhomes';
    var street = addr.substring(0, addr.indexOf(","))
    var pars = 'action=wcc-rates&addr=' + encodeURI(street) + "&addrNum=" + encodeURI(addrNum);
    var myAjax = new Ajax.Request(url, { method: 'get', parameters: pars, onComplete: showRatesData,
        onFailure: reportError()});
}
function getLocationInfo() {

    if ($('helloForm:address') == undefined || $('helloForm:address').value == "") return false;

    showHelpMessage('Finding ' + $('helloForm:address').value + ' ...<img src="image/openhomes/Throbber-small.gif" alt=""/>');

    var addr = $('helloForm:address').value;
    if (addr.toLowerCase().indexOf('wellington') == -1) addr += ' wellington ';
    addr += ' new zealand';

    geocoder.getLatLng(addr,
            function(point) {
                if (!point) {
                    showHelpMessage('Sorry, we couldnt find ' + $('helloForm:address').value + '. We\'ll look into it, but in the meantime, please check your address, and try again.');
                    $('helloForm:address').style.background = '#faa';
                } else {
                    doSunProfile(point.lat(), point.lng(), $('helloForm:address').value, false)
                    showLocation($('helloForm:address').value, point, false)
                }
            }
            );
}
function reportError()
{
}
function showRatesData(originalRequest)
{
    loadingRates = false;

    var xmlData = originalRequest.responseXML.getElementsByTagName("data");
    var dataValues =
    {
        la:xmlData[0].getAttribute("la"),
        lv:xmlData[0].getAttribute("lv"),
        rv:xmlData[0].getAttribute("rv"),
        cv:xmlData[0].getAttribute("cv")
    }

    if (dataValues.la == null)
        showHelpMessage('Rates information was not available. This may be an apartment, or we might not ' +
                        'have enough info for the council to give us the data.');

    else
        showHelpMessage(
                '<div>Land Area:' + dataValues.la + '</div>' +
                '<div>Land Value:' + dataValues.lv + '</div>' +
                '<div>Capital Value:' + dataValues.cv + '</div>' +
                '<div>Rates:' + dataValues.rv + '</div>');

}
function showLocation(addr, point, isCustom)
{
    if ($('rates') != undefined)
        $('rates').style.display = 'none';


    var dataValues =
    {
        lat:0,
        lng:0,
        addr:addr,
        addrNum:'',
        type:"user",
        id:userDefinedList.length
    }

    if (dataValues.lat != undefined)
    {
        $('helloForm:address').style.background = '#dfd';

        if (isCustom)
            map.setCenter(point);
        else
            map.setCenter(point, 15);

        var marker = createMarker(point, dataValues, 0);
        addVisibleMarkersToMap();

        myPano.setLocationAndPOV(point);


        var uri1 = "http://www.keyring.co.nz/%3faddress%3d" + encodeURI(addr);
        var uri2 = "http://www.keyring.co.nz/?address=" + encodeURI(addr);

        var html = '<div class=\"popup\" style="width:300px; height:200px">' +
                   '<div>' +
                   addr +
                   '</div>' ;
        if (point.lat() < -41.190 && point.lat() > -41.36598753850305 && point.lng() > 174.59884643554688 && point.lng() < 175.15708923339844)
        {


            html += '    <div >';
            html += '    <div style="clear:both; padding-top:5px; color:#333">The world famous keyring SunDex. Purchase a report to see the true sun potential of your property</div>';

            html += '<div  style="text-align:center" >';
            html += '<a style=" float:left" href="purchase.jsf?addr=' + encodeURI(addr) + '&lat=' + point.lat() + '&lng=' + point.lng() + '&custom=' + isCustom + '">';
            html += '<img id="popup1" src="../resources/images/image/buttons/purchase.gif" alt=""/></a></div>';
//            html += '    <div style="float:left; width:90px; font-size:9pt; color:black">';
            //            html += '    New pricing! I got lots of reports saying "The SunDex report is great, but we want one for 5 houses..."';
            //            html += '    </div >';

            //            html += '<a style="float:left" onclick="doSunProfile(' + point.lat() + ',' + point.lng() + ');">' +
            //                    '<img id="sundex-button" src="image/buttons/sundex.gif" height="38px"/></a>';
            //            html += '</div>';
            //            html += '    <div> <a style="float:left" onclick=\"doSlopeProfile(' + point.lat() + ',' + point.lng() + ');\">' +
            //                    '<img id="sundex-button" src="image/buttons/slope.gif" height="38px"/></a>';
            //            html += '</div>';
            html += '    <div style="clear:both; padding-top:15px; color:#333">';
            html += '    <div>And the keyring DesirabilityIndex. Choose whats important to you, and see how this property stacks up';
            html += '<a style="float:left" onclick="$(\'helloForm:desdex\').click()"><img id="desdex-button" src="image/buttons/desdex.gif" height="38px"/></a>';
            html += '</div>';
            html += '</div>';
            html += '<br/>';


//            html += 'Click ';
            //            html += '        <a onclick=\" $(\'helloForm:desdex\').click()\">';
            //            html += 'here</a> for the desdex!';
            //            html += '<div style="">The keyring DESirability InDEX. Choose whats important to you, and see how this property stacks up! Do the DesDex!</div></div>';
            //
            //             html += '    <div  style="background: url(../resources/images/images/thumbnail_03.png); height:90px">' ;
            //                    html += '<div style="">The world first SunDex! Shows a quick overview of the sun potential of this property</div></div>';
            //                    html +='        <a onclick=\"doSlopeProfile(' + point.lat() + ',' + point.lng() + ');\">' ;
            //                    html+='Click here for the slope profile' ;
            //                //                    '<img id="slope-button" src="image/buttons/slope.gif" height="38px"/>' +
            //                    html+='</a>';


        } else {
            html += '    <div class="watchlist" style="height:50px">' +
                    '<div style="vertical-align:middle; float:left; width:300px">Sorry, our Snndex report is not available for this address. We are ' +
                    ' increasing our data coverage, so let us know via the contact page, and give us some encouragement!' +
                    '</div></div>' +
                    '</div>'

        }
        html += '</div>';


        GEvent.addListener(marker.mk, "click", function() {
            marker.mk.openInfoWindowHtml(html, {maxWidth:380});
            if ($('addr-input') != undefined)
            {
                $('addr-input').value = $('helloForm:address').value
            }
        });
        GEvent.addListener(marker.mk, "dragend", function() {
        });

        marker.mk.openInfoWindowHtml(html, {maxWidth:380});

        showHelpMessage(getZoomDescription());
        $('map').focus();

    } else {
    }
}

function findPosX(obj)
{
    var curleft = 0;
    if (obj.offsetParent)
        while (1)
        {
            curleft += obj.offsetLeft;
            if (!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    if (obj.offsetParent)
        while (1)
        {
            curtop += obj.offsetTop;
            if (!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

function turnOnPopupImage(img)
{
    $('popup' + img).src = "../resources/images/images/thumbnailon_0" + img + ".png";
}
function turnOffPopupImage(img)
{
    $('popup' + img).src = "../resources/images/images/thumbnail_0" + img + ".png";
}

function hideMarker(markerValues)
{
    myVar.mk.setPoint(zeroPoint);
}
function showMarker(markerVar)
{
    myVar.mk.setPoint(myVar.point);
}

function createTestMarker()
{
    var marker = new GMarker(point, icon);

    GEvent.addListener(marker, "click", function() {

        marker.openInfoWindowHtml(point);
    });
    return marker;

}


function showHelpMessage(message) {
    //$('help-window-fixed').innerHTML = message;

    //    Effect.Appear('help-window-fixed', {duration: 0.25});
    //    Effect.Fade('help-window-fixed', {duration:2.0,       from:1.0, to:0.6});
}