﻿/*
* Map Controls Class 
*  Copyright (c) 2009, Pinmaps.net 
*  Modifications by Sergio Tobon - http://www.pinmaps.net
*/

/* ============================================================================================= */
/*
* Constructor for StreeViewMapTypeControl (streetview)
*/
function StreeViewMapTypeControl() { }
StreeViewMapTypeControl.prototype = new GControl();
StreeViewMapTypeControl.prototype.initialize = function(map) {
    var streetViewContainer = document.createElement("div");
    var me = this;
    var strDiv = me.createButton_("Street View");
    strDiv.style.marginRight = "8px";

    GEvent.addDomListener(strDiv, "click", function() {
        if (me.viewLayer) {
            if (me.viewLayer.getEnabled()) {
                me.viewLayer.disable();
            } else {
                me.viewLayer = new StreetViewLayer(map);  //Will create a new guyIcon at the center
                me.viewLayer.enable();
            }
        } else {
            me.viewLayer = new StreetViewLayer(map);
            me.viewLayer.enable();
        }
        me.toggleStreetViewButton_(strDiv.firstChild, me.viewLayer.getEnabled());
    });
    me.toggleStreetViewButton_(strDiv.firstChild, false);

    streetViewContainer.appendChild(strDiv);
    map.getContainer().appendChild(streetViewContainer);

    return streetViewContainer;
}

StreeViewMapTypeControl.prototype.createButton_ = function(text) {
    var buttonDiv = document.createElement("div");
    this.setButtonStyle_(buttonDiv);
    buttonDiv.style.cssFloat = "left";
    buttonDiv.style.styleFloat = "left";
    var textDiv = document.createElement("div");
    textDiv.appendChild(document.createTextNode(text));
    textDiv.style.width = "6em";
    buttonDiv.appendChild(textDiv);
    return buttonDiv;
}

StreeViewMapTypeControl.prototype.toggleStreetViewButton_ = function(div, boolCheck) {
    div.style.fontWeight = boolCheck ? "bold" : "";
    div.style.backgroundColor = boolCheck ? "#cccccc" : "";
    div.style.border = "1px solid white";
    var shadows = boolCheck ? ["Top", "Left"] : ["Bottom", "Right"];
    for (var j = 0; j < shadows.length; j++) {
        div.style["border" + shadows[j]] = "1px solid #b0b0b0";
    }
}

StreeViewMapTypeControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(173, 7));
}

StreeViewMapTypeControl.prototype.setButtonStyle_ = function(button) {
    button.style.color = "#000000";
    button.style.backgroundColor = "white";
    button.style.font = "small Arial";
    button.style.border = "1px solid black";
    button.style.padding = "0px";
    button.style.margin = "0px";
    button.style.textAlign = "center";
    button.style.fontSize = "12px";
    button.style.cursor = "pointer";
}


/* ============================================================================================= */
/*
* Constructor for The More Layers combobox control ()
*/
function MoreLayersControl() { }
MoreLayersControl.prototype = new GControl();
MoreLayersControl.prototype.initialize = function(map) {
    var container = document.createElement("div");
    var selLayer = document.createElement("select");
    selLayer.id = "selLayer";
    selLayer.className = "selM_layer";
    selLayer.title = "More layers";

    var mlayers = [];
    mlayers[0] = 'More...';
    mlayers[1] = 'Wikipedia';
    mlayers[2] = 'Photos';
    mlayers[3] = 'Videos';
    mlayers[4] = '- show all -';
    mlayers[5] = '- hide all -';

    for (var i = 0; i < mlayers.length; i++) {
        var text = "   " + mlayers[i];
        selLayer.options[selLayer.options.length] = new Option(text, i);
    }

    selLayer.selectedIndex = 0;

    // ==== toggleLayer adds and removes the layers ====
    function toggleLayer(i) {
        if (i == 0) {
            map.removeOverlay(layers[1]);
            map.removeOverlay(layers[2]);
            map.removeOverlay(layers[3]);
            return true;
        }
        if (i == 1) {
            map.removeOverlay(layers[2]);
            map.removeOverlay(layers[3]);
            map.addOverlay(layers[1]);
            return true;
        }
        if (i == 2) {
            map.removeOverlay(layers[1]);
            map.removeOverlay(layers[3]);
            map.addOverlay(layers[2]);
            return true;
        }
        if (i == 3) {
            map.removeOverlay(layers[1]);
            map.removeOverlay(layers[2]);
            map.addOverlay(layers[3]);
            return true;
        }
        if (i == 4) {
            map.removeOverlay(layers[1]);
            map.removeOverlay(layers[2]);
            map.removeOverlay(layers[3]);
            map.addOverlay(layers[1]);
            map.addOverlay(layers[2]);
            map.addOverlay(layers[3]);
            return true;
        }
        if (i == 5) {
            map.removeOverlay(layers[1]);
            map.removeOverlay(layers[2]);
            map.removeOverlay(layers[3]);
            selLayer.selectedIndex = 0;
            return true;
        }
        else {
            alert("Sorry, no layer available!");
            return false;
        }
    }

    GEvent.addDomListener(selLayer, "change", function() {
        var index = selLayer.options[selLayer.selectedIndex].index;
        toggleLayer(index);
        selLayer.blur();
    });

    container.appendChild(selLayer);
    map.getContainer().appendChild(container);
    return container;
}

MoreLayersControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(95, 7));
}

// ==== Create the GLayer()s ====
var layers = [];
layers[0] = '';
layers[1] = new GLayer("org.wikipedia.en");
layers[2] = new GLayer("com.panoramio.all");
layers[3] = new GLayer("com.youtube.all");

/* ============================================================================================= */
/*
* Constructor for the map type control (mapType)
*/
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 = "selM_Map";
    selMap.title = "Change Map Type";

    // Create options list for map types
    var mts = map.getMapTypes();
    for (var i = 0; i < mts.length; i++) {
        var text = "   " + mts[i].getName();
        selMap.options[selMap.options.length] = new Option(text, i);
    }

    //var type = map.getCurrentMapType().getName();
    //GLog.write(type);
    selMap.selectedIndex = 0;

    GEvent.addDomListener(selMap, "change", function() {
        var choose = mts[selMap.options[selMap.selectedIndex].value];
        map.setMapType(choose);
        selMap.blur();
    });

    container.appendChild(selMap);
    map.getContainer().appendChild(container);
    return container;
}

MDControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 7));
}

/* ============================================================================================= */
/*
* Constructor for PanoramioControl (panoramio)
*/
function PanoramioControl() { }
PanoramioControl.prototype = new GControl();
PanoramioControl.prototype.initialize = function(map) {
    var panoramioContainer = document.createElement("div");
    var me = this;
    var panoDiv = me.createButton_("Photos");
    var panoLayer = new GLayer("com.panoramio.all")

    var toggleState = 0;
    function togglePanoContainer() {
        StartLoading();
        if (toggleState == 1) {
            map.removeOverlay(panoLayer);
            me.togglePanoramioButton_(panoDiv.firstChild, false);
            toggleState = 0;
        } else {
            map.addOverlay(panoLayer);
            me.togglePanoramioButton_(panoDiv.firstChild, true);
            toggleState = 1;
        }
        FinishLoading();
    }

    GEvent.addDomListener(panoDiv, "click", function() {
        togglePanoContainer();
    });

    panoramioContainer.appendChild(panoDiv);
    map.getContainer().appendChild(panoramioContainer);

    return panoramioContainer;
}

PanoramioControl.prototype.createButton_ = function(text) {
    var buttonDiv = document.createElement("div");
    this.setButtonStyle_(buttonDiv);
    var textDiv = document.createElement("div");
    textDiv.appendChild(document.createTextNode(text));
    buttonDiv.appendChild(textDiv);
    return buttonDiv;
}

PanoramioControl.prototype.togglePanoramioButton_ = function(div, boolCheck) {
    div.style.fontWeight = boolCheck ? "bold" : "";
    div.style.backgroundColor = boolCheck ? "#cccccc" : "";
    div.style.width = "80px";
    div.style.height = "1.42em";
}

PanoramioControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(264, 7));
}

PanoramioControl.prototype.setButtonStyle_ = function(button) {
    button.style.color = "#000000";
    button.style.backgroundColor = "#ffffff";
    button.style.fontFamily = "Arial, sans-serif";
    button.style.border = "1px solid black";
    button.style.padding = "0px";
    button.style.margin = "0px";
    button.style.textAlign = "center";
    button.style.fontSize = "12px";
    button.style.width = "80px";
    button.style.height = "1.42em";
    button.style.cursor = "pointer";
}

//Response.Write("map.addControl(new GMapTypeControl());" & vbCrLf)
//Response.Write("var mapControl = new GHierarchicalMapTypeControl();" & vbCrLf)
//Response.Write("mapControl.clearRelationships();" & vbCrLf)
//Response.Write("mapControl.addRelationship(G_SATELLITE_MAP, G_PHYSICAL_MAP, 'Labels', true);" & vbCrLf)
//Response.Write("map.addControl(mapControl);" & vbCrLf)

//// ==== toggleLayer adds and removes the layers ====
//function toggleLayer(i) {
//    switch (i) {
//        case (i == 1):
//            //map.addOverlay(layers[1]);
//            alert(i);
//            break
//        case (i == 2):
//            //map.addOverlay(layers[2]);
//            alert(i);
//            break
//        case (i == 3):
//            //map.addOverlay(layers[3]);
//            alert(i);
//            break
//        default:
//            alert("Sorry, no layer available!");
//            break
//    }
//}

//function PanoMapTypeControl() { }
//PanoMapTypeControl.prototype = new GControl();
//PanoMapTypeControl.prototype.initialize = function(map) {
//    var panoramioContainer = document.createElement("div");
//    var me = this;
//    var panoDiv = me.createButton_("Photos");
//    panoDiv.style.marginRight = "8px";
//    GEvent.addDomListener(panoDiv, "click", function() {
//        if (me.panoLayer) {
//            if (me.panoLayer.getEnabled()) {
//                me.panoLayer.disable();
//            } else {
//                me.panoLayer.enable();
//            }
//        } else {
//            me.panoLayer = new PanoramioLayer(map);
//            me.panoLayer.enable();
//        }
//        me.togglePanoramioButton_(panoDiv.firstChild, me.panoLayer.getEnabled());
//    });
//    me.togglePanoramioButton_(panoDiv.firstChild, false);

//    panoramioContainer.appendChild(panoDiv);
//    map.getContainer().appendChild(panoramioContainer);

//    return panoramioContainer;
//}

//PanoramioControl.prototype.togglePanoramioButton_ = function(div, boolCheck) {
//    div.style.fontWeight = boolCheck ? "bold" : "";
//    div.style.backgroundColor = boolCheck ? "#cccccc" : "";
//    div.style.border = "1px solid white";
//    var shadows = boolCheck ? ["Top", "Left"] : ["Bottom", "Right"];
//    for (var j = 0; j < shadows.length; j++) {
//        div.style["border" + shadows[j]] = "1px solid #b0b0b0";
//    }
//}

//PanoramioControl.prototype.createButton_ = function(text) {
//    var buttonDiv = document.createElement("div");
//    this.setButtonStyle_(buttonDiv);
//    buttonDiv.style.cssFloat = "left";
//    buttonDiv.style.styleFloat = "left";
//    var textDiv = document.createElement("div");
//    textDiv.appendChild(document.createTextNode(text));
//    textDiv.style.width = "6em";
//    buttonDiv.appendChild(textDiv);
//    return buttonDiv;
//}
