/// <reference path="jquery-1.3.2.js" />
/// <reference path="GMAPJSHelper_Release.js" />


var sHtmlBubbleTemplate 	= "<p><strong>#SITE_TITLE#</strong><br />#SITE_ADDRESS#</p>";
/*
sHtmlBubbleTemplate 	+= "<div class=\"routeplanner\"><p><strong>Get directions: </strong>";
sHtmlBubbleTemplate 	+= "<a class=\"tohere nolink\" href=\"javascript: void(null);\" onclick=\"initTo();\">To here</a>";
sHtmlBubbleTemplate 	+= " - <a class=\"fromhere\" href=\"javascript: void(null);\" onclick=\"initFrom();\">From here</a>";
sHtmlBubbleTemplate 	+= "<br /></p><div class=\"fromdiv\"><form method=\"get\" action=\"http://maps.google.com/maps\" target=\"_blank\">";
sHtmlBubbleTemplate 	+= "<p>Starting address<br /><input name=\"saddr\" maxlength=\"40\" type=\"text\" />";
sHtmlBubbleTemplate 	+= "<input type=\"hidden\" name=\"daddr\" value=\"#LATITUDE#,#LONGITUDE#\" />";
sHtmlBubbleTemplate 	+= "<input type=\"hidden\" name=\"hl\" value=\"en\" />";
sHtmlBubbleTemplate 	+= "<input type=\"submit\" value=\"Go!\" /><br /><br /></p></form></div>";
sHtmlBubbleTemplate 	+= "<div class=\"todiv\"><form method=\"get\" action=\"http://maps.google.com/maps\" target=\"_blank\">";
sHtmlBubbleTemplate 	+= "<p>Destination address<br /><input name=\"daddr\" maxlength=\"40\" type=\"text\" />";
sHtmlBubbleTemplate 	+= "<input type=\"hidden\" name=\"saddr\" value=\"#LATITUDE#,#LONGITUDE#\" />";
sHtmlBubbleTemplate 	+= "<input type=\"hidden\" name=\"hl\" value=\"en\" />";
sHtmlBubbleTemplate 	+= "<input type=\"submit\" value=\"Go!\" /><br /><br /></p></form></div></div>";
*/

var xicon 		= new GIcon(G_DEFAULT_ICON);
var bounds 		= new GLatLngBounds();
var map 		= null;
var geocoder 	= null;
var marker		= [];
var minimarker	= [];
var States		= [];
var StatesTmp	= [];
var countryCoord = null;
var S = null;
var W = null;
var N = null;
var E = null;
var countriesXml = "/img/GoogleMapIcons/countries.xml";


// environment-sign
var eIcon = new GIcon();
eIcon.image = '/img/GoogleMapIcons/environment-sign/image.png';
eIcon.shadow = '/img/GoogleMapIcons/environment-sign/shadow.png';
eIcon.iconSize = new GSize(15, 20);
eIcon.shadowSize = new GSize(25, 20);
eIcon.iconAnchor = new GPoint(8, 20);
eIcon.infoWindowAnchor = new GPoint(8, 0);
eIcon.printImage = '/img/GoogleMapIcons/environment-sign/printImage.gif';
eIcon.mozPrintImage = '/img/GoogleMapIcons/environment-sign/mozPrintImage.gif';
eIcon.printShadow = '/img/GoogleMapIcons/environment-sign/printShadow.gif';
eIcon.transparent = '/img/GoogleMapIcons/environment-sign/transparent.png';
eIcon.imageMap = [8, 0, 9, 1, 9, 2, 9, 3, 10, 4, 10, 5, 11, 6, 11, 7, 12, 8, 12, 9, 13, 10, 13, 11, 14, 12, 14, 13, 14, 14, 14, 15, 14, 16, 8, 17, 8, 18, 8, 19, 6, 19, 6, 18, 6, 17, 0, 16, 0, 15, 0, 14, 0, 13, 0, 12, 1, 11, 1, 10, 2, 9, 2, 8, 3, 7, 3, 6, 4, 5, 4, 4, 5, 3, 5, 2, 5, 1, 6, 0];

// food-sign
var fIcon = new GIcon();
fIcon.image = '/img/GoogleMapIcons/food-sign/image.png';
fIcon.shadow = '/img/GoogleMapIcons/food-sign/shadow.png';
fIcon.iconSize = new GSize(15, 20);
fIcon.shadowSize = new GSize(25, 20);
fIcon.iconAnchor = new GPoint(8, 20);
fIcon.infoWindowAnchor = new GPoint(8, 0);
fIcon.printImage = '/img/GoogleMapIcons/food-sign/printImage.gif';
fIcon.mozPrintImage = '/img/GoogleMapIcons/food-sign/mozPrintImage.gif';
fIcon.printShadow = '/img/GoogleMapIcons/food-sign/printShadow.gif';
fIcon.transparent = '/img/GoogleMapIcons/food-sign/transparent.png';
fIcon.imageMap = [8, 0, 9, 1, 10, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 10, 11, 8, 12, 7, 13, 6, 14, 6, 15, 6, 16, 6, 17, 5, 17, 5, 16, 5, 15, 5, 14, 4, 13, 3, 12, 2, 11, 1, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 1, 2, 2, 1, 4, 0];

// /img/GoogleMapIcons/pharma-sign
var pIcon = new GIcon();
pIcon.image = '/img/GoogleMapIcons/pharma-sign/image.png';
pIcon.shadow = '/img/GoogleMapIcons/pharma-sign/shadow.png';
pIcon.iconSize = new GSize(15, 20);
pIcon.shadowSize = new GSize(25, 20);
pIcon.iconAnchor = new GPoint(8, 20);
pIcon.infoWindowAnchor = new GPoint(8, 0);
pIcon.printImage = '/img/GoogleMapIcons/pharma-sign/printImage.gif';
pIcon.mozPrintImage = '/img/GoogleMapIcons/pharma-sign/mozPrintImage.gif';
pIcon.printShadow = '/img/GoogleMapIcons/pharma-sign/printShadow.gif';
pIcon.transparent = '/img/GoogleMapIcons/pharma-sign/transparent.png';
pIcon.imageMap = [11, 0, 11, 1, 11, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 7, 11, 7, 12, 6, 13, 6, 14, 6, 15, 6, 16, 5, 16, 5, 15, 5, 14, 5, 13, 4, 12, 4, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0];


// /img/GoogleMapIcons/sales-sign
var sIcon = new GIcon();
sIcon.image = '/img/GoogleMapIcons/sales-sign/image.png';
sIcon.shadow = '/img/GoogleMapIcons/sales-sign/shadow.png';
sIcon.iconSize = new GSize(15, 20);
sIcon.shadowSize = new GSize(25, 20);
sIcon.iconAnchor = new GPoint(8, 20);
sIcon.infoWindowAnchor = new GPoint(8, 0);
sIcon.printImage = '/img/GoogleMapIcons/sales-sign/printImage.gif';
sIcon.mozPrintImage = '/img/GoogleMapIcons/sales-sign/mozPrintImage.gif';
sIcon.printShadow = '/img/GoogleMapIcons/sales-sign/printShadow.gif';
sIcon.transparent = '/img/GoogleMapIcons/sales-sign/transparent.png';
sIcon.imageMap = [7, 0, 8, 1, 8, 2, 9, 3, 10, 4, 11, 5, 11, 6, 11, 7, 11, 8, 10, 9, 9, 10, 8, 11, 7, 12, 6, 13, 6, 14, 6, 15, 6, 16, 5, 16, 5, 15, 5, 14, 5, 13, 4, 12, 3, 11, 2, 10, 1, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 1, 3, 2, 2, 3, 1, 4, 0];


// /img/GoogleMapIcons/agroscience-sign
var aIcon = new GIcon();
aIcon.image = '/img/GoogleMapIcons/agroscience-sign/image.png';
aIcon.shadow = '/img/GoogleMapIcons/agroscience-sign/shadow.png';
aIcon.iconSize = new GSize(15, 20);
aIcon.shadowSize = new GSize(25, 20);
aIcon.iconAnchor = new GPoint(8, 20);
aIcon.infoWindowAnchor = new GPoint(8, 0);
aIcon.printImage = '/img/GoogleMapIcons/agroscience-sign/printImage.gif';
aIcon.mozPrintImage = '/img/GoogleMapIcons/agroscience-sign/mozPrintImage.gif';
aIcon.printShadow = '/img/GoogleMapIcons/agroscience-sign/printShadow.gif';
aIcon.transparent = '/img/GoogleMapIcons/agroscience-sign/transparent.png';
aIcon.imageMap = [11, 0, 11, 1, 11, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 7, 11, 7, 12, 6, 13, 6, 14, 6, 15, 6, 16, 5, 16, 5, 15, 5, 14, 5, 13, 4, 12, 4, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0];

// /img/GoogleMapIcons/genomics-sign
var gIcon = new GIcon();
gIcon.image = '/img/GoogleMapIcons/genomics-sign/image.png';
gIcon.shadow = '/img/GoogleMapIcons/genomics-sign/shadow.png';
gIcon.iconSize = new GSize(15, 20);
gIcon.shadowSize = new GSize(25, 20);
gIcon.iconAnchor = new GPoint(8, 20);
gIcon.infoWindowAnchor = new GPoint(8, 0);
gIcon.printImage = '/img/GoogleMapIcons/genomics-sign/printImage.gif';
gIcon.mozPrintImage = '/img/GoogleMapIcons/genomics-sign/mozPrintImage.gif';
gIcon.printShadow = '/img/GoogleMapIcons/genomics-sign/printShadow.gif';
gIcon.transparent = '/img/GoogleMapIcons/genomics-sign/transparent.png';
gIcon.imageMap = [11, 0, 11, 1, 11, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 7, 11, 7, 12, 6, 13, 6, 14, 6, 15, 6, 16, 5, 16, 5, 15, 5, 14, 5, 13, 4, 12, 4, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0];

// /img/GoogleMapIcons/producttesting-sign
var ptIcon = new GIcon();
ptIcon.image = '/img/GoogleMapIcons/producttesting-sign/image.png';
ptIcon.shadow = '/img/GoogleMapIcons/producttesting-sign/shadow.png';
ptIcon.iconSize = new GSize(15, 20);
ptIcon.shadowSize = new GSize(25, 20);
ptIcon.iconAnchor = new GPoint(8, 20);
ptIcon.infoWindowAnchor = new GPoint(8, 0);
ptIcon.printImage = '/img/GoogleMapIcons/producttesting-sign/printImage.gif';
ptIcon.mozPrintImage = '/img/GoogleMapIcons/producttesting-sign/mozPrintImage.gif';
ptIcon.printShadow = '/img/GoogleMapIcons/producttesting-sign/printShadow.gif';
ptIcon.transparent = '/img/GoogleMapIcons/producttesting-sign/transparent.png';
ptIcon.imageMap = [11, 0, 11, 1, 11, 2, 11, 3, 11, 4, 11, 5, 11, 6, 11, 7, 11, 8, 11, 9, 11, 10, 7, 11, 7, 12, 6, 13, 6, 14, 6, 15, 6, 16, 5, 16, 5, 15, 5, 14, 5, 13, 4, 12, 4, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0];

// /img/GoogleMapIcons/m-sign
var mIcon = new GIcon();
mIcon.image = '/img/GoogleMapIcons/m-sign/image.png';
mIcon.shadow = '/img/GoogleMapIcons/m-sign/shadow.png';
mIcon.iconSize = new GSize(40, 39);
mIcon.shadowSize = new GSize(62, 40);
mIcon.iconAnchor = new GPoint(25, 25);
mIcon.infoWindowAnchor = new GPoint(25, 25);
mIcon.printImage = '/img/GoogleMapIcons/m-sign/printImage.gif';
mIcon.mozPrintImage = '/img/GoogleMapIcons/m-sign/mozPrintImage.gif';
mIcon.printShadow = '/img/GoogleMapIcons/m-sign/printShadow.gif';
mIcon.transparent = '/img/GoogleMapIcons/m-sign/transparent.png';
mIcon.imageMap = [32,0,35,1,37,2,39,3,41,4,42,5,44,6,45,7,45,8,44,9,43,10,42,11,41,12,40,13,38,14,38,15,37,16,36,17,36,18,37,19,52,20,52,21,52,22,52,23,52,24,52,25,52,26,52,27,52,28,52,29,52,30,52,31,52,32,52,33,52,34,51,35,51,36,50,37,50,38,49,39,49,40,48,41,47,42,47,43,46,44,45,45,44,46,43,47,42,48,40,49,38,50,36,51,17,51,15,50,13,49,11,48,10,47,9,46,8,45,7,44,6,43,5,42,5,41,4,40,3,39,3,38,2,37,2,36,2,35,1,34,1,33,0,32,0,31,0,30,0,29,0,28,0,27,0,26,0,25,0,24,0,23,0,22,0,21,1,20,1,19,17,18,17,17,16,16,15,15,14,14,13,13,12,12,11,11,10,10,9,9,8,8,8,7,9,6,10,5,12,4,13,3,15,2,18,1,21,0,32,0];



function LoadMap(page, division, country, source, mapid) {

    try {

        var request = GXmlHttp.create();
        var xmlDoc;
        var page = page + "?division=" + division + "&source=" + source;


        if (country != "") {
              LoadCountries(country);
        }


        request.open("GET", page, true);
        request.onreadystatechange = function() {

            try {
                if (request.readyState == 4) {

                    States = GetStates(request.responseXML);
            
                    if (States.length > 0) {

                        var point = new GPoint(-8.56, 39.6);
                        var mapControl = new GHierarchicalMapTypeControl();
                        map = new GMap(document.getElementById(mapid));

                        RenderMarkers(States);

                        map.addControl(new GSmallMapControl());
                        /*map.addControl(mapControl);*/
                        map.centerAndZoom(point, 4);

                        var center = bounds.getCenter();
                        map.setZoom(map.getBoundsZoomLevel(bounds));
                        map.setCenter(center);
                        map.panDirection(0, 0.1);

                        if (S != null && W != null && N != null && E != null) {
                            var boundsA = new GLatLngBounds(new GLatLng(S, W), new GLatLng(N, E));
                            var zoom = map.getBoundsZoomLevel(boundsA);
				if (zoom > 12) {
					zoom = 12;
				}
	                   map.setCenter(boundsA.getCenter(), zoom);
                        }
                        else {
                            var zoom = map.getBoundsZoomLevel(bounds);
				if (zoom > 12) {
					zoom = 12;
				}
                            map.setCenter(bounds.getCenter(), zoom);
			if(map.getCenter().x > 139 && map.getCenter().x < 140){
			map.setCenter(new GLatLng(30, 17), 1);
			}			 
			
                        }
                    }
                    else {
                        document.getElementById(mapid).style.display = "none";
                    }
                }
            }
            catch (err) {

                document.getElementById(mapid).style.display = "none";
            }
        }
        request.send(null);

    }
    catch (err) {
        
        document.getElementById(mapid).style.display = "none";
    }
}

function CreateInfoWindow(marker, point) {
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowTabsHtml(RenderInfoWindow(point));
    }
	);
}

function CountryCoord(name, coord) {
    var p = coord.split(",");
    this.name = name;
    this.w = p[0];
    this.s = p[1];
    this.e = p[2];
    this.n = p[3];
}

function GetStates(xmlDoc) {

    var States = [];
    var itemName = "state";
    var pn = xmlDoc.getElementsByTagName(itemName);
    
	
	for (var i = 0; i < pn.length; i++) {
		
		if (pn[i].getAttribute("id") == "point") 		
		{	
		    var name = "", hover="", lat = "", lng = "", size = "", src = "", target = "", url = "", address = "";

		    for (var j = 0; j < pn[i].childNodes.length; j++) {
    			
			      switch (pn[i].childNodes[j].tagName) {
			        case "name" :
					    name = pn[i].childNodes[j].childNodes[0].nodeValue;
					    break;
			        case "loc" :
					    lng = SplitLoc("lng", pn[i].childNodes[j].childNodes[0].nodeValue);
					    lat = SplitLoc("lat", pn[i].childNodes[j].childNodes[0].nodeValue);
					    break;
			        case "url" :
					    url = pn[i].childNodes[j].childNodes[0].nodeValue;
					    break;
			        case "address" :
					    address = pn[i].childNodes[j].childNodes[0].nodeValue;
					    break;
					case "src" :
					    src = pn[i].childNodes[j].childNodes[0].nodeValue;
					    break;			        					    
			      }
		    }
		    States[States.length] = new State(name, hover, lat, lng, "", src, "", url, address);
		}
    }
    return States;
}

function initFrom() {
    $('.routeplanner .fromhere').addClass('nolink');
    $('.routeplanner .tohere').removeClass('nolink');
    $('.routeplanner .fromdiv').hide();
    $('.routeplanner .todiv').show();
    return false;
}

function initTo() {
    $('.routeplanner .tohere').addClass('nolink');
    $('.routeplanner .fromhere').removeClass('nolink');
    $('.routeplanner .todiv').hide();
    $('.routeplanner .fromdiv').show();
    return false;
}

function inArray(array, value, caseSensitive) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (caseSensitive) {
            if (array[i].toLowerCase() == value.toLowerCase()) {
                return true;
            }
        }
        else {
            if (array[i] == value) {
                return true;
            }
        }
    }
    return false;
}

function LoadCountries(country) {
    var request = GXmlHttp.create();
    request.open("GET", countriesXml, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            var pn1 = request.responseXML.getElementsByTagName("option");
            for (var i = 0; i < pn1.length; i++) {
                if (pn1[i].childNodes[0].nodeValue.toLowerCase() == country.toLowerCase()) {
                    countryCoord = new CountryCoord(pn1[i].childNodes[0].nodeValue, pn1[i].getAttribute("value"));
                }
            }
            if (countryCoord != null) {
                S = countryCoord.s
                W = countryCoord.w;
                N = countryCoord.n
                E = countryCoord.e;
            }
        }
    }
    request.send(null);
}

function RenderInfoWindow(p) {

    var infoTabs = [];

    var sHtmlBubble = sHtmlBubbleTemplate;
    sHtmlBubble = sHtmlBubble.replace(/#SITE_TITLE#/g, p.name);
    sHtmlBubble = sHtmlBubble.replace(/#SITE_ADDRESS#/g, p.address);
    sHtmlBubble = sHtmlBubble.replace(/#LATITUDE#/g, p.lat);
    sHtmlBubble = sHtmlBubble.replace(/#LONGITUDE#/g, p.lng);

    if (sHtmlBubble != "") {
        infoTabs[infoTabs.length] = new GInfoWindowTab("Address", sHtmlBubble);
    }
    return infoTabs;
}
function RenderMarkers(array) {

    for (var i = 0; i < array.length; i++) {

        if (array[i].lng != null && array[i].lat != null) {

            var point = new GPoint(array[i].lng, array[i].lat);

            switch (array[i].src) {
                case "/flash/food.swf":
                    xicon = fIcon;
                    break;
                case "/flash/sales.swf":
                    xicon = sIcon;
                    break;
                case "/flash/pharma.swf":
                    xicon = pIcon;
                    break;
                case "/flash/environment.swf":
                    xicon = eIcon;
                    break;
                case "/flash/agroscience.swf":
                    xicon = aIcon;
                    break;
                case "/flash/genomics.swf":
                    xicon = gIcon;
                    break;
                case "/flash/producttesting.swf":
                    xicon = ptIcon;
                    break;
                case "/flash/multiple.swf":
                    xicon = mIcon;
                    break;

            }

            minimarker[i] = new GMarker(point, xicon);
            marker[i] = new GMarker(point, { title: array[i].name, icon: xicon });
            map.addOverlay(marker[i]);
            CreateInfoWindow(marker[i], array[i]);
            bounds.extend(marker[i].getPoint());

        }
    }
}

function State(name, hover, lat, lng, size, src, target, url, address) {
    this.name = name;
    this.hover = hover;
    this.lat = lat;
    this.lng = lng;
    this.size = size;
    this.src = src;
    this.target = target;
    this.url = url;
    this.address = address;
}

function SplitLoc(type, loc) {
    var p = loc.split(",");
    if (type == "lat") { return p[0]; }
    else if (type == "lng") { return p[1]; }
    else { return null; }
}

