
$j(document).ready(function(){
	
    // onkey press
    if ( $j('#projectSearchForm :input[type=text]').length > 0) {
    	$j('#projectSearchForm :input[type=text]').keydown(function(event){
		if (event.keyCode == 13 && (jQuery.browser.mozilla || jQuery.browser.msie) ) {
                geocodeAndRedirect();
                return false;
            }
        });
    }

    // Add view link events
    $j("#branchView").click(function(event) {
        displayMapView("branch");
		event.preventDefault();
    });
    $j("#europeView").click(function(event) {
        displayMapView("europe");
		event.preventDefault();
    });
    $j("#worldView").click(function(event) {
        displayMapView("world");
		event.preventDefault();
    });

});


var markerData = [];
var map;
var country;
	
var setSubmit = function()
{
    var input = document.getElementById("searchSubmit");
    var newInput = document.createElement("input");
    newInput.type = "button";
    newInput.name = input.name
    newInput.value = newInput.defaultValue = input.value;
    newInput.onclick = function(){
        geocodeAndRedirect();
    };
    input.parentNode.replaceChild(newInput, input);
}

var loadData = function ()
{
    country = $j("[name=country]").val();
    setSubmit();
			
    // Load markers form hidden div
    if ($j("#markerData").length > 0)
    {
        $j("#markerData").find(".projectDescription").each(function()
        {
            var marker =
            {
                se: this.getAttribute('data-sector'),
                s: this.getAttribute('data-slug'),
                n: this.getAttribute('data-common-name'),
                b: this.getAttribute('data-subbuilding'),
                h: this.getAttribute('data-house-identifier'),
                a: this.getAttribute('data-street-address'),
                hn: this.getAttribute('data-house-no'),
                sl: this.getAttribute('data-sublocality'),
                d: this.getAttribute('data-district'),
                l: this.getAttribute('data-locality-name'),
                p: this.getAttribute('data-state-or-province-name'),
                c: this.getAttribute('data-country-name'),
                la: this.getAttribute('data-latitude'),
                lo: this.getAttribute('data-longitude'),
                v: this.getAttribute('data-visual'),
                url : this.getAttribute('data-url'),
                hp: parseInt(this.getAttribute('data-has-page'), 10),
                os: this.getAttribute('data-other-site'),
                branch: this.getAttribute('data-branch'),
                highlighted: true
            };
            markerData.push(marker);
        });
    }
};
	
var gettext = function(text)
{
    return text;
}
	
createMarkerHTML = function(o)
{
    if (!o.contentDiv)
    {
        var header =
        [
        o.v == '' ? '' : '<img src="' + o.v + '" class="ethumb" width="80" height="60">',
        '<div class="sector">', o.se, '</div><strong class="title">',
        o.n,
        '</strong>'
        ].join('');

        o.hn = o.hn == null ? "" : o.hn;
			
        var htmllist =
        [
        header,
        o.b == null || o.b == '' || o.b == o.n ? '' : '<div class="subbuilding">' + o.b + '</div>',
        o.h == null || o.h == '' || o.h == o.n ? '' : '<div class="house_identifier">' + o.h + '</div>',
        o.a == null || o.a == '' ? '' : '<div class="street_address">' + o.a + ' ' + o.hn + '</div>',
        o.sl == null || o.sl == '' ? '' : '<div class="sublocality">' + o.sl + '</div>',
        o.d == null || o.d == '' ? '' : '<div class="district">' + o.d + '</div>',
        o.l == null || o.l == '' ? '' : '<div class="locality_name">' + o.l + '</div>',
        o.p == null || o.p == '' ? '' : '<div class="state_or_province_name">' + o.p + '</div>',
        o.c == null || o.c == '' ? '' : '<div class="country_name">' + o.c + '</div>'
        ];

        var htmllistUK =
        [
        header,
        o.h == null || o.h == '' || o.h == o.n ? '' : '<div class="house_identifier">' + o.h + '</div>',
        o.a == null || o.a == '' ? '' : '<div class="street_address">' + o.a + ' ' + o.hn + '</div>',
        o.b == null || o.b == '' || o.b == o.n ? '' : '<div class="subbuilding">' + o.b + '</div>',
        o.sl == null || o.sl == '' ? '' : '<div class="sublocality">' + o.sl + '</div>',
        o.d == null || o.d == '' ? '' : '<div class="district">' + o.d + '</div>',
        o.l == null || o.l == '' ? '' : '<div class="locality_name">' + o.l + '</div>',
        o.p == null || o.p == '' ? '' : '<div class="state_or_province_name">' + o.p + '</div>',
        o.c == null || o.c == '' ? '' : '<div class="country_name">' + o.c + '</div>'
        ];



        o.contentDiv = document.createElement('div');
        o.contentDiv.className = o.v != '' ? 'infowindow' : 'infowindow_novisual';

        var theCountry = $j("meta[name=hostPrefix]").attr("content").toString();
        if ( theCountry == 'uk' ){
            o.contentDiv.innerHTML = htmllistUK.join('');
        }else{
            o.contentDiv.innerHTML = htmllist.join('');
        }

        var el = document.createElement('a');
        o.contentDiv.appendChild(el);
		el.className = 'zoomIn';
		el.href = 'javascript:;';
        	el.innerHTML = translate("mgggbundle", "balloon.zoomInOnMap.label");
			
        $j(el).click(function()
        {
            var lat_lng = new google.maps.LatLng(o.la, o.lo);
            var z = 15;
            map.setCenter(lat_lng, z);
        });
        el = null;
        if (o.hp)
        {
            var info_el = o.contentDiv.appendChild(document.createElement('a'));
            info_el.href = o.url;
            info_el.innerHTML = translate("mgggbundle", "balloon.moreInfo.label");
        }
    }
    return o.contentDiv;
};
	
var createMarker = function(markerData) {

    var n=0;
    var icon = new GIcon(G_DEFAULT_ICON);
    //icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=14x24&chco=FF766AFF,FF766AFF,000000FF&ext=.png";
    icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=18x32&chco=ff4200,ff4200,000000FF&ext=.png";
    //icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(18, 32);
    icon.shadowSize = new GSize(29, 32); //(height * 1.6, width)
    icon.iconAnchor = new GPoint(9, 32); //(width/2, height)
    icon.infoWindowAnchor = new GPoint(9, 3);  //(width/2, Math.floor(height/12))
		
    iconOtherBranch = new GIcon(icon,"http://chart.apis.google.com/chart?cht=mm&chs=18x32&chco=d8d8d8,d8d8d8,000000FF&ext=.png");
		
    var currentBranch = $j('#currentBranch').html();
    if (currentBranch == markerData.branch) {
        var marker = new GMarker(new GLatLng(markerData.la, markerData.lo), icon);
    }
    else {
        var marker = new GMarker(new GLatLng(markerData.la, markerData.lo), iconOtherBranch);
    }
		
    //var marker = new GMarker(new GLatLng(markerData.la, markerData.lo)/*, {icon:icon}*/);
    map.addOverlay(marker);
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(createMarkerHTML(markerData));
    });
}
	
	
var createMarkers = function() {
    var latlngbounds = new google.maps.LatLngBounds( );
		
    for (var i=0; i<markerData.length; ++i) {
			
        if (markerData[i].la != 0 && markerData[i].lo != 0 ) {
            createMarker(markerData[i]);
            latlngbounds.extend( new GLatLng(markerData[i].la, markerData[i].lo) );
        }
    }
		
    setTimeout(function() {
			
        if ($j('#searchType').html() == 'keywords' ) {
            map.setCenter( latlngbounds.getCenter( ), map.getBoundsZoomLevel( latlngbounds ) );
        }
        else {
            map.setCenter(initial_center, initial_zoom);
        }
    }, 1000);
				

}
	
var getServerParameters = function()
{
    // get the current URL
    var url = window.location.toString();
    //get the parameters
    url.match(/\?(.+)$/);
    var params = RegExp.$1;
    // split up the query string and store in an
    // associative array
    var params = params.split("&");
    var queryStringList = {};
		 
    for(var i=0;i<params.length;i++)
    {
        var tmp = params[i].split("=");
        queryStringList[tmp[0]] = unescape(tmp[1]);
    }
		 
    if (queryStringList)
    {
        return queryStringList;
    }
}

displayMapView = function(viewName) {
    if (viewName != "") {
        var lat = $j("meta[name=" + viewName + "Lat]").attr("content");
        var lng = $j("meta[name=" + viewName + "Lng]").attr("content");
        var zoomLevel = $j("meta[name=" + viewName + "ZoomLevel]").attr("content");

        if (lat && lng && zoomLevel) {
            initial_center = new GLatLng(lat,lng);
            map.setCenter(initial_center, parseInt(zoomLevel));
        }
    }
};	
	
var geocodeAndRedirect = function()
{
        //var el = document.getElementById('location');
        var el = null;
	if($j('input[name=searchString]').length > 0 && $j('input[name=searchType]').length > 0){
            el = $j('input[name=searchString]')[0];
	}
	else {
            return;
	}
		var geocoder = new google.maps.ClientGeocoder();
		var urlencode = function ()
		{
			var re = /\+/g;
			return function (s)
			{
				return escape(s).replace(re, '%2B');
			};
		}();
        if($j("input[name=hostPrefix]").val() != 'com'){
            geocoder.setBaseCountryCode($j("input[name=hostPrefix]").val());
        }

    geocoder.getLocations(el.value, function (response)
    {
        if (response && response.Status.code == 200)
        {
            // Get Google Maps Results
            var place 			= response.Placemark[0];
            var accuracy 		= urlencode(place.AddressDetails.Accuracy);
            var latitude 		= urlencode(place.Point.coordinates[1]);
            var longitude 		= urlencode(place.Point.coordinates[0]);
								
            // Fill hidden form fields
            $j("[name=lat]").val(latitude);
            $j("[name=lng]").val(longitude);
            $j("[name=accuracy]").val(accuracy);
            $j("[name=clientSearch]").val("true");
				
				

            document.forms[1].submit();
            return true;
        }

        document.forms[1].submit();
        return true;
    });
};
    
if (GBrowserIsCompatible())
{
    var mapType = $j("#map #type").html();

    // Display the map, with some controls and set the initial location
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());

    if(mapType == 'G_SATELLITE_MAP'){
        map.addMapType(G_SATELLITE_MAP);
        map.setMapType(G_SATELLITE_MAP);
    }
    else if(mapType == 'G_NORMAL_MAP'){
        map.addMapType(G_NORMAL_MAP);
        map.setMapType(G_NORMAL_MAP);
    }
    else if (mapType == 'G_PHYSICAL_MAP') {
        map.addMapType(G_PHYSICAL_MAP);
        map.setMapType(G_PHYSICAL_MAP);
    }
    else if (mapType == 'G_HYBRID_MAP'){
        map.addMapType(G_HYBRID_MAP);
        map.setMapType(G_HYBRID_MAP);
    }
    
    loadData();

    var defaultValue = translate("projectsearchbundle", "searchString.default.text");
    if($j('input[name=searchType]').length > 0 && $j('input[name=searchType]:checked').val() == 'location'
        && $j('input[name=searchString]').val() != '' && $j('input[name=searchString]').val() != defaultValue){
       
        var el = $j('input[name=searchString]')[0];
        //if (el && el.value != "" && el.value != defaultValue) {
        var geocoder=new GClientGeocoder();

        if($j("input[name=hostPrefix]").val() != 'com'){
            geocoder.setBaseCountryCode($j("input[name=hostPrefix]").val());
        }
        geocoder.getLocations(el.value, function(response)
        {
            if (response && response.Status.code == 200)
            {
                setTimeout(function() {
			
                    var box = response.Placemark[0].ExtendedData.LatLonBox;
                    var sw = new GLatLng(box.south,box.west);
                    var ne = new GLatLng(box.north,box.east);
                    var bounds = new GLatLngBounds(sw,ne);
                   
                    initial_center = bounds.getCenter();
                    initial_zoom = map.getBoundsZoomLevel(bounds);
                        
                    createMarkers();
                }, 1000);
            }
        });
    } else {
        var lat = $j("meta[name=branchLat]").attr("content");
        var lng = $j("meta[name=branchLng]").attr("content");
        var zoomLevel = $j("meta[name=branchZoomLevel]").attr("content");

        if (lat && lng && zoomLevel) {
            initial_center = new GLatLng(lat,lng);
            initial_zoom = parseInt(zoomLevel);
            createMarkers();
        }
    }
}
    
else
{
    alert("Sorry, the Google Maps API is not compatible with this browser. Please upgrade your browser.");
}
