﻿var DEBUG = false;
var DATA_URL = "wuc/data.aspx";
var _googleMap;
var _markerGroups;
var _clickablemarkers;
//var _selectedGroup;
var _selectedID;

function Initialize_Map(canvas, lat, lng, zoom, type, enabledragging, uidefault, clickablemarkers, showOverviewControl) {

    if (!GBrowserIsCompatible()) {
        ShowInfo("Sorry, the Google Maps API is not compatible with this browser.", true);
        return;
    }

    if (!document.getElementById(canvas)) {
        ShowInfo("Sorry, there seems to be no canvas placeholder for the Google map.", false);
        return;
    }

    _googleMap = new GMap2(document.getElementById(canvas));
    _googleMap.setCenter(new GLatLng(lat, lng), zoom, type);
    
    if (uidefault)
        _googleMap.setUIToDefault();

    if (showOverviewControl)
        _googleMap.addControl(new GOverviewMapControl(new GSize(200, 125)));

    if (!enabledragging)
        _googleMap.disableDragging();
        
    _googleMap.disableDoubleClickZoom();

    if (clickablemarkers) {
        GEvent.addListener(_googleMap, "zoomend", function() { OnMoveEnd(); });
        //GEvent.addListener(_googleMap, "dragstart", function() { _selectedGroup = null; _selectedID = null; _selectedZoom = 0; });
        
        //This will trigger the loading of the markers
        OnMoveEnd();
    }
    
}

function OnMoveEnd() {

    var sw = _googleMap.getBounds().getSouthWest();
    var ne = _googleMap.getBounds().getNorthEast();

    var zoomLevel = _googleMap.getZoom();
    
//    if (zoomLevel > 3) 
//        LoadMarkers(sw.lng(), sw.lat(), ne.lng(), ne.lat());    
//    else
//        LoadMarkers('0', '0', '0', '0');

//	if (document.getElementById("lblZoom").innerHTML != ("Zoom: " + zoomLevel))

	LoadMarkers('0', '0', '0', '0');

    document.getElementById("lblZoom").innerHTML = "Zoom: " + zoomLevel;
    
    if (DEBUG) {
        GLog.write("Zoomlevel: " + _googleMap.getZoom());
        GLog.write("Center: " + _googleMap.getCenter());
        GLog.write("southWest:" + sw.toString() + ", northEast:" + ne.toString());        
    }

}

function LoadMarkers(swLat, swLng, neLat, neLng) {

	var medid;
	medid = document.forms(0).item("ddlMedic").value;
	//	medid = document.forms(0).item("ddlMedic").selectedIndex;

    var requestUrl = DATA_URL + "?request=bounds&medid=" + medid + "&swlat=" + swLat + "&swlng=" + swLng + "&nelat=" + neLat + "&nelng=" + neLng;

    GDownloadUrl(requestUrl,
        function(data) {
            var xml = GXml.parse(data);
            if (xml.documentElement) {
                var markers = xml.documentElement.getElementsByTagName("marker");
                
                _markerGroups = [];
                _googleMap.clearOverlays();                
                
                for (var i = 0; i < markers.length; i++)
                    CreateMarker(markers[i], false);

                if (DEBUG)
                    GLog.write(markers.length);
            }
        });
           
}

function ShowDetailInfo(marker) {

    var requestUrl = "detail.aspx?id=" + marker.dat_id;
    GDownloadUrl(requestUrl,
        function(data) {
            //_selectedGroup = marker.group;
            //_selectedID = marker.dat_id;
            marker.openInfoWindowHtml(data);           
            if (DEBUG)
                GLog.write("Data retrieved");
            
        }); 

}

function CreateMarker(node) {

    var group = '';
    var med_id = node.getAttribute("med_id");
    _selectedID = med_id;
    var dat_id = node.getAttribute("dat_id");
    var dat_country = node.getAttribute("dat_country");
    var dat_city = node.getAttribute("dat_city");

    var dat_price_desc = node.getAttribute("dat_price_desc");
    var dat_price_type = node.getAttribute("dat_price_type");
    var dat_price_num = node.getAttribute("dat_price_num");
    var dat_price = node.getAttribute("dat_price");

//    var dat_ob_price = node.getAttribute("dat_ob_price");
//    var dat_gp_price = node.getAttribute("dat_gp_price");

    var lat = parseFloat(node.getAttribute("dat_geo_x"));
    var lng = parseFloat(node.getAttribute("dat_geo_y"));
    
    if (!(_markerGroups))
        _markerGroups = new Array();
        
    if (_markerGroups['GP'] == null)
        _markerGroups['GP'] = new Array();

    if (_markerGroups['OB'] == null)
        _markerGroups['OB'] = new Array();

    // add Orginator brand marker
    if (dat_price_type == 'OB') {
        group = 'OB';
//        var title = dat_country + ', ' + dat_city + ', $' + dat_price;
        var title = dat_country + ', ' + dat_city;
        var marker = CreateDrugMarker(_googleMap.getZoom(), lng, lat, title, group, dat_price, dat_price_num);

        marker.dat_id = dat_id;
        marker.group = group;

        GEvent.addListener(marker, 'click', function() {
            ShowDetailInfo(marker);
        });

        _markerGroups[group].push(marker);
        _googleMap.addOverlay(marker);

        if (!document.getElementById("chk" + group).checked)
            marker.hide();

    }
            
    // add Lowest Price Generic
    if (dat_price_type == 'GP') {
        group = 'GP';
//        var title = dat_country + ', ' + dat_city + ', $' + dat_price;
        var title = dat_country + ', ' + dat_city;
        var marker = CreateDrugMarker(_googleMap.getZoom(), lng, lat, title, group, dat_price, dat_price_num);

        marker.dat_id = dat_id;
        marker.group = group;

        GEvent.addListener(marker, 'click', function() {
            ShowDetailInfo(marker);
        });

        _markerGroups[group].push(marker);
        _googleMap.addOverlay(marker);

        if (!document.getElementById("chk" + group).checked)
            marker.hide();        
        
    }

    if (!document.getElementById("chk" + marker.group).checked)
        marker.hide();

    
    //if (marker.group==_selectedGroup && _selectedID==marker.dat_id)
    //    ShowDetailInfo(marker);        
        
}

function ToggleMarkerGroup(group, on) {

//    if (group==_selectedGroup)
//        _googleMap.closeInfoWindow();
//    
    if (_markerGroups && _markerGroups[group]) {
        for (var i = 0; i < _markerGroups[group].length; i++) {            
            if (on)
                _markerGroups[group][i].show();
            else                
                _markerGroups[group][i].hide();
        } 
    }
}

function ToggleAllMarkers(on) { 

    if (_markerGroups) {
        for (group in _markerGroups) {
            ToogleMarkerGroup(group, on);
            document.getElementById("chk" + group).checked = on;
        }
    }

}

function ShowInfo(msg, showAlert) {

    if (document.getElementById("lblMessage"))
        document.getElementById("lblMessage").innerText = msg;

    if (showAlert)
        alert(msg);

}

//Used for the small static map on the detail pages (location and weatherstation)
function AddOneStaticMarker(lat, lng, imgurl, name) {

    var ico = new GIcon(G_DEFAULT_ICON);
    ico.image = imgurl;
    ico.shadow = "";
    ico.iconSize = new GSize(20, 20);

    var markerOptions = { icon: ico, title: name };
    var marker = new GMarker(new GLatLng(lat, lng), markerOptions);

    _googleMap.addOverlay(marker);

}

//Create icon
//Zoomlevel: 1 - 19
//Type: GP - OB
//Price: 0 - 160+
function CreateDrugMarker(zoomLevel, lng, lat, tooltip, group, price, number) {

    // Set up our GIcon object        
    var ico = new GIcon(G_DEFAULT_ICON);
    ico.image = "images/" + group + number + ".png";
    ico.shadow = "";

    switch (zoomLevel) {
    	case 0:
    	case 1:
        case 2:
        case 3:
        	if (price < 2)
        		size = (((price - 0) / 2) * 5) + 10;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 5) + 15;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 5) + 20;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 5) + 25;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 5) + 30;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 3) + 35;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 2) + 38;
        	else
        		size = 40;
        	break;

        case 4:
        	if (price < 2)
        		size = (((price - 0) / 2) * 5) + 10;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 5) + 15;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 15) + 20;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 25) + 35;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 10) + 60;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 3) + 70;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 2) + 73;
        	else
        		size = 75;
        	break;

        case 5:
        	if (price < 2)
        		size = (((price - 0) / 2) * 10) + 10;		// 0 .. 2
        	else if (price < 5)
        		size = (((price - 2) / 3) * 15) + 20;		// 2 .. 5
        	else if (price < 10)
                size = (((price - 5) / 5) * 25) + 35;		// 5 .. 10
            else if (price < 25)
               	size = (((price - 5) / 15) * 40) + 60;		// 10 .. 25
            else if (price < 50)
                size = (((price - 10) / 25) * 10) + 100;	// 25 .. 50
            else if (price < 100)
                size = (((price - 50) / 50) * 3) + 110;		// 50 .. 100
            else if (price < 160)
                size = (((price - 100) / 60) * 2) + 113;	// 100 .. 160
            else
                size = 115;									// 160 +
            break;
               
        case 6:
        case 7:
        	if (price < 2)
        		size = (((price - 0) / 2) * 20) + 15;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 20) + 35;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 20) + 55;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 40) + 75;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 20) + 115;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 3) + 135;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 2) + 138;
        	else
        		size = 140;
        	break;

        case 8:
        case 9:
        	if (price < 2)
        		size = (((price - 0) / 2) * 25) + 25;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 25) + 50;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 25) + 75;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 40) + 100;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 25) + 140;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 5) + 165;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 5) + 170;
        	else
        		size = 175;
        	break;

        case 10:
        case 11:
        	if (price < 2)
        		size = (((price - 0) / 2) * 30) + 25;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 30) + 55;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 30) + 85;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 50) + 115;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 25) + 165;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 5) + 190;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 5) + 195;
        	else
        		size = 200;
        	break;

        case 12:
        case 13:
        	if (price < 2)
        		size = (((price - 0) / 2) * 40) + 25;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 40) + 65;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 40) + 105;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 50) + 145;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 30) + 195;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 10) + 225;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 5) + 235;
        	else
        		size = 240;
        	break;

        case 14:
        case 15:
        	if (price < 2)
        		size = (((price - 0) / 2) * 50) + 25;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 50) + 75;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 50) + 125;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 60) + 175;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 40) + 235;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 10) + 275;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 5) + 285;
        	else
        		size = 290;
        	break;

        case 16:
        case 17:
        case 18:
        case 19:
        	if (price < 2)
        		size = (((price - 0) / 2) * 50) + 30;
        	else if (price < 5)
        		size = (((price - 2) / 3) * 50) + 80;
        	else if (price < 10)
        		size = (((price - 5) / 5) * 50) + 130;
        	else if (price < 25)
        		size = (((price - 5) / 15) * 60) + 180;
        	else if (price < 50)
        		size = (((price - 10) / 25) * 40) + 240;
        	else if (price < 100)
        		size = (((price - 50) / 50) * 10) + 280;
        	else if (price < 160)
        		size = (((price - 100) / 60) * 10) + 290;
        	else
        		size = 300;
        	break;
    }

    var offset = Math.ceil(size / 2);
    
    ico.iconSize = new GSize(size, size);    
    ico.iconAnchor = new GPoint(offset, offset);
    ico.infoWindowAnchor = new GPoint(offset, offset);

    var markerOptions = { icon: ico, title: tooltip };
    
    return new GMarker(new GLatLng(lat, lng), markerOptions);

}