﻿var appPath;
var layerlist;

var digimap;
var digiContainer;
var drawMode;
var digiListener;
var infowindow;
var poliEditListener;
var digiDblClick;
var digimapOverlays = new Array();
var countMarkers, countPolygons, countPolylines;
var digiOutLoc;
var geoXml;
var postbackurl;
var extra;
var myguid;


var extraToolsTimer;
var leftButtonDown;
var toolbarToggling = false;
var filledMode = 2; //2 - filled polygon, 4 - filled circle, 5 - filled rectangle

var geocoder = null;
var coo;
var polyShape;
var polyPoints = new Array();
var cur = 0;
var plmcur = 0;
var polygonstyles = new Array();
var polylinestyles = new Array();
var placemarks = new Array();
var polygonDepth = "0";

var editMode = false;
var real_editMode = false;
var toolsEnabled = {
    allTools: false,
    toolbar: false,
    search: false,
    maps: false,
    layers: false,
    marker: false,
    filledRect: false,
    openRect: false,
    filledCircle: false,
    openCircle: false,
    openPolygon: false,
    filledPolygon: false,
    polyLine: false,
    polyLineDirections: false,
    database: false,
    undo: false
};

function setDigiVars(contID,tools,misc)
{
    digiContainer = document.getElementById(contID);
    if (misc)
    {
        try{
        if (misc[0])appPath = misc[0];
        if (misc[1])layerlist = document.getElementById(misc[1]);
        if (misc[2])postbackurl = misc[2];
        if (misc[3])extra = misc[3];
        if (misc[4])myguid = misc[4];
        if (misc[5])postbackurl=misc[5];
        }catch(Error){}
    }
   
    if (tools)
    {
        for (var i=0;i<tools.length;i++)
        {
            switch (tools[i])
            {
                case 0:
                    toolsEnabled.allTools = true;
                case 1:
                    toolsEnabled.toolbar = true;
                    break;
                case 2:
                    toolsEnabled.search = true;
                    break;
                case 3:
                    toolsEnabled.maps = true;
                    break;
                case 4:
                    toolsEnabled.layers=true;
                    break;
                case 5:
                    toolsEnabled.marker = true;
                    break;
                case 6:
                    toolsEnabled.filledRect = true;
                    break;
                case 7:
                    toolsEnabled.openRect = true;
                    break;
                case 8:
                    toolsEnabled.filledCircle = true;
                    break;
                case 9:
                    toolsEnabled.openCircle = true;
                    break;
                case 10:
                    toolsEnabled.openPolygon = true;
                    break;
                case 11:
                    toolsEnabled.filledPolygon = true;
                    break;
                case 12:
                    toolsEnabled.polyLine = true;
                    break;
                case 13:
                    toolsEnabled.polyLineDirections = true;
                    break;
                case 14:
                    toolsEnabled.database = true;
                    break;
            }
        }
    }
	initMap();
	
}

function initMap()
{
	//if (google.maps.BrowserIsCompatible()){
	    
		var latlng = new google.maps.LatLng(38.3, 23.5);
		var digioptions = {
			zoom: 6,
			center: latlng,
			disableDoubleClickZoom: true,
			panControl: false,
			zoomControl: false,
			scaleControl: false,
			mapTypeControl: true,
			streetViewControl: false,
			overviewMapControl: false,
			mapTypeId : google.maps.MapTypeId.ROADMAP
		};
		digimap = new google.maps.Map(digiContainer,digioptions);
		var popup = document.getElementById("popupContent");
		infowindow = new google.maps.InfoWindow({content: popup});
		geocoder = new google.maps.Geocoder();
		digiListener = google.maps.event.addListener(digimap,"click",mapClick);
		var thesave = document.getElementById("storeBtn");
        thesave.onclick = function(){
            placemarks[plmcur].name = eval("document.getElementById('nameValue').value").toString();
            placemarks[plmcur].desc = eval("document.getElementById('descriptionValue').value").toString();
            logCoordinates();
            //setTimeout("infowindow.close();",2000);
            return false;
            
            };
		createstyleobjects();
		createplacemarkobject();
		drawTools();
		clearMap();
		
	//}else{
	//	alert("Your browser does not support Google maps!");
	//}
}

function drawTools(){
	var mytoolbar = document.createElement("DIV");
	var mysearchbar = document.createElement("DIV");
	var mylayersbox = document.createElement("DIV");
	
	mytoolbar.id = "mapToolbar";
	mytoolbar.setAttribute("class","toolbar");
	mytoolbar.className = "toolbar";
	
	mysearchbar.id = "searchbar";
	mysearchbar.setAttribute("class","toolbar");
	mysearchbar.className = "toolbar";
	//mysearchbar.style.display = "none";
	
	mylayersbox.id = "layersbox";
	mylayersbox.setAttribute("class","layersbox");
	mylayersbox.className = "layersbox";
	/*
	var ctrl=createTool("title");
    mytoolbar.appendChild(ctrl);
    */
	if (toolsEnabled.search || toolsEnabled.allTools){
		var ctrl=createTool("search");
		mysearchbar.appendChild(ctrl);
	}

	if (toolsEnabled.marker || toolsEnabled.allTools){
		var ctrl=createTool("marker");
		mytoolbar.appendChild(ctrl);
	}
	if (toolsEnabled.polyLine || toolsEnabled.allTools){
		var ctrl=createTool("polyline");
		
		mytoolbar.appendChild(ctrl);
	}
	if (toolsEnabled.filledPolygon || toolsEnabled.allTools){
		var ctrl=createTool("polygon");
		ctrl.id="problematicbutton";
		ctrl.title = msg_polygontip;    
		
		mytoolbar.appendChild(ctrl);
	}
	/*
	if (toolsEnabled.polyLineDirections || toolsEnabled.allTools){
	    var ctrl = createTool("drive");
	    ctrl.id="drive";
	    ctrl.title = msg_drive;
	    
	    mytoolbar.appendChild(ctrl);
	}
	*/
	
	//....etc....
	if (toolsEnabled.undo || toolsEnabled.allTools){
	    var ctrl = createTool("undo");
	    mytoolbar.appendChild(ctrl);
	    /*
	    var btnUndo = document.createElement("INPUT");
        btnUndo.id = "undoButton";
        btnUndo.type = "button";
        btnUndo.setAttribute("class","btnTool");
        btnUndo.setAttribute("className","btnTool");
        retobj.appendChild(btnUndo);
        */
	}
	
	var defTools = createDefaultTools();
	mytoolbar.appendChild(defTools);
	
	var toggleToolBtn = createToggleButton("tools");
	var toggleSearchBtn = createToggleButton("search");
	var toggleLayerBtn = createToggleButton("layers");
	var toggleMapsBtn = createToggleButton("maps");
	
	var ultraholder= document.createElement("DIV");
	var toolbarholder;
	if (toolsEnabled.toolbar || toolsEnabled.allTools) {
	   var toolbarholder = document.createElement("DIV");
	   toolbarholder.appendChild(toggleToolBtn);
	   toolbarholder.appendChild(mytoolbar);
	   //ultraholder.appendChild(toolbarholder);
	   //digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleToolBtn);
	   
	   digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toolbarholder);     
	   //toggleholder.appendChild(toggleToolBtn);// digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleToolBtn);
	}
	if (toolsEnabled.search || toolsEnabled.allTools) {
	    ultraholder= document.createElement("DIV");
	    toolbarholder = document.createElement("DIV");
	    toolbarholder.appendChild(toggleSearchBtn);
	    toolbarholder.appendChild(mysearchbar);
	    ultraholder.appendChild(toolbarholder);
	    //digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleSearchBtn);
	    
	    digimap.controls[google.maps.ControlPosition.LEFT_TOP].push(ultraholder);    
	    //toggleholder.appendChild(toggleSearchBtn); //digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleSearchBtn);
	}
	//digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(ultraholder);   
	if (toolsEnabled.maps || toolsEnabled.allTools){
	    //toggleholder.appendChild(toggleMapsBtn);
	    digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleMapsBtn);
	}
	if (toolsEnabled.layers || toolsEnabled.allTools){
	    //toggleholder.appendChild(toggleLayerBtn);
	    digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(toggleLayerBtn);
	}
	
	//digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(mytoolbar);
	//digimap.controls[google.maps.ControlPosition.TOP_LEFT].push(mysearchbar);
	
	var theinfo = createInfoForm();
	//theform.style.display="none";
	theinfo.style.display="none";
	//$("#retFormContainer").hide();
	//$("#InfoContainer").hide();
	//digimap.controls[google.maps.ControlPosition.LEFT_TOP].push(theform);
	//digimap.controls[google.maps.ControlPosition.LEFT_TOP].push(theinfo);
	var thelogo = createLogo();
	digimap.controls[google.maps.ControlPosition.BOTTOM_LEFT].push(thelogo);
}

function styleButton()
{
    $("#editmodeButton").button();
}

function createLogo()
{
    var retobj = document.createElement("DIV");
    //retobj.setAttribute("class","AVLogoCont");
    var btnAVMap = document.createElement("INPUT");
    btnAVMap.id = "AVLogoBtn";
    btnAVMap.type = "button";
    btnAVMap.onclick = function(){ window.open("http://www.avmap.gr/");};
    retobj.appendChild(btnAVMap);
    
    return retobj;
}

function toggleEditMode()
{
    var object = document.getElementById("editmodeButton");
    if (object.ex_HasClassName("btnTool_selected")){
        object.ex_RemoveClassName("btnTool_selected");
    }else{
        object.ex_AddClassName("btnTool_selected");
    }
    real_editMode = !real_editMode;
    for (var i=0;i<digimapOverlays.length;i++)
    {
        try{
            digimapOverlays[i].setDraggable(real_editMode);
        }catch(Error){}
    }
}

function createToggleButton(mybar)
{
    var retobj = document.createElement("DIV");
    var myname;
    retobj.className = "toggleButtonsContainer";
    /*
    retobj.style.width = "36px";
    retobj.style.zIndex = 10;
    */
    switch (mybar)
    {
        case "tools":
            var btn = document.createElement("INPUT");
            btn.onclick = toggleToolbar;
            btn.id = "toggleToolbar1";
            btn.type = "button";
            btn.title = msg_btnErgaleia;    //"Εργαλεία";
            retobj.appendChild(btn);
            break;
        case "search":
            var btn = document.createElement("INPUT");
            btn.onclick = toggleToolbar2;
            btn.id = "toggleToolbar2";
            btn.type = "button";
            //btn.className = "pressed";
            btn.title = msg_btnAnazitisi;   //"Αναζήτηση";
            retobj.appendChild(btn);
            break;
            
        case "layers":
            var btn = document.createElement("INPUT");
            btn.id = "toggleToolbar3";
            btn.onclick = function(){toggleRadControl("layers",btn.id);};
            btn.type = "button";
            btn.className = "pressed";
            btn.title = msg_btnLayers;  //"Επίπεδα";
            retobj.appendChild(btn);
            break;
        
        case "maps":
            var btn = document.createElement("INPUT");
            btn.id = "toggleToolbar4";
            btn.onclick = function(){toggleRadControl("maps",btn.id);};
            btn.type = "button";
            btn.className = "pressed";
            btn.title = msg_btnMaps;  //"Επίπεδα";
            retobj.appendChild(btn);
            break;
    }
    
    return retobj;
}

function createDefaultTools()
{
    var retobj = document.createElement("DIV");
    retobj.setAttribute("class","defaultTools");
    retobj.className = "defaultTools";
    
    var ctrl=createTool("editmode");
	    ctrl.id="editmode";
	    ctrl.title = msg_editmodetip;
	    /*
	    var ctrl_label = document.createElement("label");
	    ctrl_label.setAttribute("for",ctrl.id+"Button");
	    ctrl_label.innerHTML = msg_editmodetip;
	    
	    ctrl.appendChild(ctrl_label);
	    */
	    retobj.appendChild(ctrl.childNodes[0]);
	    /*
	    $(ctrl.childNodes[0]).button();
	    $("#editmodeButton").live('click', toggleEditMode);
	    */
	    //google.maps.event.addListenerOnce(digimap,"idle",styleButton);
    
    
    var btnReset = document.createElement("INPUT");
    btnReset.id = "btnReset";
    btnReset.type = "button";
    btnReset.setAttribute("class","btnTool");
    btnReset.setAttribute("className","btnTool");
    btnReset.onclick = resetMap;
    retobj.appendChild(btnReset);
    
   
    /*
    var btnSave = document.createElement("INPUT");
    btnSave.id = "saveButton";
    btnSave.type = "button";
    btnSave.setAttribute("class","btnTool");
    btnSave.setAttribute("className","btnTool");
    btnSave.onclick = saveMe;
    retobj.appendChild(btnSave);
    */
    
    
//    var btnExpandForm = document.createElement("INPUT");
//	btnExpandForm.id = "btnExpandForm";
//	btnExpandForm.type = "button";
//	btnExpandForm.onclick = slideMe;
//	retobj.appendChild(btnExpandForm);
    return retobj;
}

function createTool(what)
{
    var retobj = document.createElement("DIV");
    switch (what)
    {
        case "title":
            retobj.setAttribute("class","titleContainer");
            retobj.setAttribute("className","titleContainer");
            retobj.innerHTML = msg_toolbarTitle;    //"ΕΡΓΑΛΕΙΑ";
            break;
    
        case "search":
            retobj.setAttribute("class","searchContainer");
            retobj.setAttribute("className","searchContainer");
            var btn = document.createElement("input");
            btn.type = "text";
            btn.id = "searchBtn";
            btn.value = msg_searchPrompt;   //"Εισάγετε διεύθυνση...";
            btn.onfocus = function(){if (btn.value==msg_searchPrompt) {btn.value="";}};
            btn.onblur = function(){ if (btn.value==""){btn.value=msg_searchPrompt;}};
            btn.onkeypress = checkKeypress;
            break;
        case "editmode":
            var btn = document.createElement("input");
            btn.type= "button"  //"checkbox";
            btn.id = what+"Button";
            btn.setAttribute("class","btnTool");
	        btn.setAttribute("className","btnTool");
	        btn.onclick = function(){toggleEditMode();}
            /*
            btn.onmouseup = function(){
                real_editMode=document.getElementById("editmodeButton").checked;
            }
            */
            break;
        case "polygon":
            var btn = document.createElement("input");
	        btn.type = "button";
	        btn.id = what+"Button";
	        btn.setAttribute("class","btnTool");
	        btn.setAttribute("className","btnTool");
	        /*
	        btn.onmousedown= function(){
	            extraToolsTimer = setTimeout(function(){createDropDownList(btn)},1000);
	            
	        };
	        btn.onmouseout = function(){
	            
	        };
	        */
	        btn.onmouseup = function(){
	                    clearTimeout(extraToolsTimer);
	                    setTool(what,this);
	                }
	           
            break;  
        default:
            var btn = document.createElement("input");
	        btn.type = "button";
	        btn.setAttribute("class","btnTool");
	        btn.setAttribute("className","btnTool");
	        btn.id = what+"Button";
	        switch(what)
	        {
	            case "info":
	                btn.onclick = slideMe2;
	                break;
	            case "kml":
	                btn.onclick = slideMe;
	                break;
	            case "polygonCircle":
	                btn.onmousedown = function(){
	                                    filledMode = 4;
	                                    document.getElementById("polygonButton").style.backgroundImage = "url("+appPath+"/Images/circle_fill.png)";
	                                };
	                                break;
	            case "polygonRectangle":
	                btn.onmousedown = function(){
	                                    filledMode = 5;
	                                    document.getElementById("polygonButton").style.backgroundImage = "url("+appPath+"/Images/rectangle_fill.png)";
	                                };
	                                break;
	            case "polygon1":
	                btn.onmousedown = function(){
	                                    filledMode = 2;
	                                    document.getElementById("polygonButton").style.backgroundImage = "url("+appPath+"/Images/polygon_fill.png)";
	                                };
	                                break;
	            default:
	                btn.onmouseup = function(){
	                    setTool(what,this);
	                }
	                break;
	        }
	        
            break;
    }
	if (what!= "title"){
	    retobj.appendChild(btn);
	}
	return retobj;
}

function createDropDownList(sender)
{
    var newdiv = document.createElement("div");
    newdiv.setAttribute("class","dropdownPolygons");
    newdiv.setAttribute("className","dropdownPolygons");
    
		newdiv.onmouseout = function(e){
		        var targ;
		        var ctrl = document.getElementById("problematicbutton");
	            if (isMouseLeaveOrEnter(e,newdiv)){
	                while(ctrl.childNodes[1]){
	                
	                ctrl.removeChild(ctrl.childNodes[1]);
	                }
	                
	            }
	            };
	window.onmousedown = function(){
	                    var ctrl = document.getElementById("problematicbutton");
                        while(ctrl.childNodes[1]){
                        ctrl.removeChild(ctrl.childNodes[1]);
                        }
                        window.onmousedown = "";
	                };
    var btn1 = createTool("polygonCircle");
    var btn2 = createTool("polygonRectangle");
    var btn3 = createTool("polygon1");
    newdiv.appendChild(btn1);
    newdiv.appendChild(btn2);
    newdiv.appendChild(btn3);
    sender.parentNode.appendChild(newdiv);
    
}

function createForm()
{
    var retobj = document.createElement("DIV");
    retobj.id = "retFormContainer";
    var theform = document.createElement("div");
    var theKML = document.createElement("textarea");
    theKML.id = "KMLoutput";
    theKML.setAttribute("readonly","readonly");
    theKML.setAttribute("oncopy","return false;");
//    var thesubmit = document.createElement("input");
//    thesubmit.type = "submit";
//    thesubmit.value = "Get it!";
    theform.appendChild(theKML);
   // theform.appendChild(thesubmit);
    retobj.appendChild(theform);
    
    var thebuttons = document.createElement("div");
    var kmlsave = document.createElement("INPUT");
    kmlsave.id = "saveButton";
    kmlsave.type = "button";
    kmlsave.setAttribute("class","btnTool");
    kmlsave.setAttribute("className","btnTool");
    kmlsave.onclick = function(){
                        if (theKML.value!=""){
                        __doPostBack("export",theKML.value);
                        }
                        return false;
                    };
    thebuttons.appendChild(kmlsave);
    retobj.appendChild(thebuttons);
    return retobj;
}

function createInfoForm()
{
    var retobj = document.createElement("DIV");
    retobj.id = "InfoContainer";
    var thetable = document.createElement("table");
    var thebody = document.createElement("tbody");
    // edo thelei ena loop gia na dimiourgei to table apo tin vasi pou erhetai
    //...
    thetable.appendChild(thebody);
    retobj.appendChild(thetable);
    return retobj;
}

function saveMe()
{
    var theform = document.getElementById("actionfield");
    if (theform)
    {
        if (theform.value!=""){
            //postback
        }else{
            alert(msg_errNoLicence);
        }
    }
    return false;
}

function clearDigitizers(exceptme)
{
    var object;
    var myname;
    for (var i=0; i<3; i++)
    {
        switch (i)
        {
            case 0:
                myname = "marker";
                break;
            case 1:
                myname = "polyline";
                break;
            case 2:
                myname = "polygon";
                break;
        }
        if (myname !=exceptme)
        {
            object = document.getElementById(myname+"Button");
            if (object.ex_HasClassName("btnTool_selected")){
                object.ex_RemoveClassName("btnTool_selected");
            };
        }
    }  
}

function setTool(toolname,object)
{
    if (object.ex_HasClassName("btnTool_selected")){
        object.ex_RemoveClassName("btnTool_selected");
        //drawMode = 0;
        editMode = false;
        digimap.setOptions({draggableCursor: ""});
    }else{
        switch (toolname)
        {
            case "polygon":
                clearDigitizers(toolname);
                if (drawMode!=filledMode){resetMap();}
                drawMode = filledMode;
                editMode = true;
                digimap.setOptions({draggableCursor: "crosshair"});
                if(polyPoints.length > 1) drawCoordinates();
                break;
            case "polyline":
                clearDigitizers(toolname);
                if (drawMode!=1){resetMap();}
                drawMode=1;
                editMode = true;
                //google.maps.event.clearListeners(digimap,"dblclick");
                digimap.setOptions({draggableCursor: "crosshair"});
                if(polyPoints.length > 1) drawCoordinates();
                break;
            case "marker":
                clearDigitizers(toolname);
                if (drawMode!=3){resetMap();}
                drawMode = 3;
                editMode = true;
                var image = new google.maps.MarkerImage("http://digitizer.avmap.gr/DesktopModules/AVMap.MapDigitizer/Images/location.png",
                    //size
                    new google.maps.Size(18,18),
                    //origin
                    new google.maps.Point(0,0),
                    //anchor
                    new google.maps.Point(9,18),
                    //resizeTo
                    new google.maps.Size(18,18));
                //digimap.setOptions({draggableCursor: "url(/DesktopModules/AVMap.MapDigitizer/Images/marker.cur),default"});
                digimap.setOptions({draggableCursor: "crosshair"});
                break;
        }
        object.ex_AddClassName("btnTool_selected");
    }
}
function polygonEnd()
{
    polyEnd();
    var obj = document.getElementById("polygonButton");
    setTool("polygon",obj);
}

function polylineEnd()
{
    polyEnd();
    var obj = document.getElementById("polylineButton");
    setTool("polyline",obj);
}

function polyEnd()
{
    var loc = new Object();
    var mypath = polyShape.getPath();
    loc.position = mypath.getAt(mypath.getLength()-1);
    infowindow.setPosition(loc.position);
    infowindow.open(digimap);
    logCoordinates();
    google.maps.event.removeListener(digiDblClick);
}

function mapClick(section)
{
    var ctrl = document.getElementById("problematicbutton");
    while(ctrl.childNodes[1]){
    ctrl.removeChild(ctrl.childNodes[1]);
    }
        
    
    clickedPoint = section.latLng;
	if (!editMode){	//a drawn shape has been clicked
	
	}else{
		if(false){	//polygonMode
		
		}else{
			if (drawMode==3){	//markerMode
				createmarker(clickedPoint);
				logCoordinates();
			}
			if (drawMode==1 || drawMode ==2){   //polyline or polygon
			    pushpoint(clickedPoint);
			}
		}
	}
}

function createmarker(point) {
    if(polyPoints.length > 0) {
        polyPoints = [];
//        if(polyShape) map.removeOverlay(polyShape);
//        if(holeShape.length > 0) {
//            for(var i = 0; i < holeShape.length; i++) {
//                map.removeOverlay(holeShape[i]);
//            }
//        }
//        if(tinymarker) map.removeOverlay(tinymarker);
    }
    polyPoints[0] = point;
    //createplacemarkobject();
    plmcur = placemarks.length -1;
    placemarks[plmcur].ID = polyPoints[0];
    //var realmarker = new GMarker(point, {title:placemarks[plmcur].ID});
    var image = new google.maps.MarkerImage("http://digitizer.avmap.gr/DesktopModules/AVMap.MapDigitizer/Images/location_128.png",
        //size
        new google.maps.Size(32,32),
        //origin
        new google.maps.Point(0,0),
        //anchor
        new google.maps.Point(16,32),
        //resizeTo
        new google.maps.Size(32,32));
    var realmarker = new google.maps.Marker({
                        position: point,
                        title:"marker object",
                        animation: google.maps.Animation.DROP,
                        icon:image
                        }
                        
                        );
    realmarker.setMap(digimap);
    //var popup = document.getElementById("popupContent");
   
    //thedescr.value = realmarker.description;
    infowindow.open(digimap,realmarker);
    digimapOverlays.push(realmarker);
    increaseMarkers();
//    markerissaved = false;
//    GEvent.removeListener(mylistener);
//    GEvent.addListener(realmarker, "click", function() {
//        realmarker.openInfoWindowHtml(placemarks[plmcur].name+"<br />"+placemarks[plmcur].desc);
//    });
//    GEvent.addListener(realmarker, "infowindowclose", function() {
//        if (markerissaved === false) alert('Click "Next shape" and try again');
//    });
}

function toggleToolbar()
{
    if (!toolbarToggling)
    {
        toolbarToggling = true;
        if ($("#mapToolbar").is(":visible")){
            $("#mapToolbar").hide("slide", { direction: "left"}, 1000, function(){toolbarToggling=false;});
            document.getElementById("toggleToolbar1").setAttribute("class","pressed");
            document.getElementById("toggleToolbar1").setAttribute("className","pressed");
        }else{
            //closeToolbars("mapToolbar");
            $("#mapToolbar").show("slide", { direction: "left"}, 1000, function(){toolbarToggling=false;});
            document.getElementById("toggleToolbar1").setAttribute("class","");
            document.getElementById("toggleToolbar1").setAttribute("className","");
            
       }
   }
   
   return false;
}

function toggleToolbar2()
{
    if (!toolbarToggling)
    {
        toolbarToggling = true;
        var sender = document.getElementById("toggleToolbar2");
        if ($("#searchbar").is(":visible")){
            $("#searchbar").hide("slide", { direction: "left"}, 1000, function(){toolbarToggling=false;});
            document.getElementById("toggleToolbar2").setAttribute("class","pressed");
            document.getElementById("toggleToolbar2").setAttribute("className","pressed");
        }else{
            //closeToolbars("searchbar");
            $("#searchbar").show("slide", { direction: "left"}, 1000, function(){toolbarToggling=false;});
            document.getElementById("toggleToolbar2").setAttribute("class","");
            document.getElementById("toggleToolbar2").setAttribute("className","");
            
       }
   }
   return false;
}

function closeToolbars(exceptme)
{
    for (var i=0;i<2;i++)
    {
        var barname;
        var btnname = "toggleToolbar" + (i+1).toString();
        switch (i)
        {
            case 0:
                barname = "mapToolbar";
                break;
            case 1:
                barname = "searchbar";
                break;
        }
        if (barname!=exceptme)
        {
            if ($("#"+barname).is(":visible")){
                $("#"+barname).hide();
                document.getElementById(btnname).setAttribute("class","pressed");
                document.getElementById(btnname).setAttribute("className","pressed");
            }
        }
    }
}


function slideMe()
{
   $("#retFormContainer").slideToggle("slow");
   return false;
}

function slideMe2()
{
   $("#InfoContainer").slideToggle("slow");
   return false;
}


// logCoordinates - prints out coordinates of global polyPoints (and holePoints) array
// saves placemark object properties not already saved
function logCoordinates(){
    coo = document.getElementById("KMLoutput");
    var i;
    var lat;
    var longi;
    var plmtext = "";
    var coords1 = coords2 = "";

    if (polyPoints.length === 0) return;
    var codeID = 1; //PK edit

    if(codeID == 1) {
        if(drawMode==2 || drawMode==9 ){    //polygonmode or hole mode
            var polygonheader = '<Placemark><name>' + placemarks[plmcur].name + '</name>\n';
            polygonheader += '<description>'+placemarks[plmcur].desc+'</description>\n';
            polygonheader += '<styleUrl>#'+placemarks[plmcur].polygonstyle+'</styleUrl>\n';
            polygonheader += '<Polygon>\n<tessellate>'+placemarks[plmcur].tess+'</tessellate><altitudeMode>'+placemarks[plmcur].alt+'</altitudeMode>\n';
            polygonheader += '<outerBoundaryIs><LinearRing><coordinates>\n';
            var polygoncoordsend = "</coordinates></LinearRing></outerBoundaryIs>\n";
            var innercoordsstart = "<innerBoundaryIs><LinearRing><coordinates>\n";
            var innercoordsend = "</coordinates></LinearRing></innerBoundaryIs>\n";
            var polygonfooter = '</Polygon>\n</Placemark>\n';
        }
        if (drawMode==1) { //polylineMode
            var lineheader = '<Placemark><name>'+placemarks[plmcur].name+'</name>\n' +
            '<description>'+placemarks[plmcur].desc+'</description>\n' +
            '<styleUrl>#'+placemarks[plmcur].linestyle+'</styleUrl>\n' +
            '<LineString>\n<tessellate>'+placemarks[plmcur].tess+'</tessellate><altitudeMode>'+placemarks[plmcur].alt+'</altitudeMode>\n<coordinates>\n';
            var linefooter = '</coordinates>\n</LineString>\n</Placemark>\n';
        }
        if (drawMode==3) {  //markerMode
            
        }
        header = logHeader();
        header += logStyles();
    }

    // check mode, start placemark printing and placemark saving
    if(drawMode==2){ // print polygon
        placemarks[plmcur].toolID = 2;
        // print coords header
        plmtext = polygonheader;
        // loop to print coords within the outerBoundaryIs code
        // coordinates are printed with a maximum of 6 decimal places, function roundVal takes care of this
        for (i=0; i<polyPoints.length; i++){
            lat = polyPoints[i].lat();
            longi = polyPoints[i].lng();
            coords1 += roundVal(longi) + "," + roundVal(lat) + "," + polygonDepth + " \n";
            plmtext += roundVal(longi) + "," + roundVal(lat) + "," + polygonDepth + " \n";
        }
        placemarks[plmcur].ID = polyPoints[0].lng().toFixed(3); // remember this polygon
        plmtext += polygoncoordsend;
        plmtext += polygonfooter;
    }
    if(drawMode==3) {   //markerMode
        pmltext = "";   //pkedit
        for (var i=0; i<=plmcur;i++)
        {
            var markerheader = '<Placemark><name>'+placemarks[plmcur].name+'</name>\n' +
            '<description>'+placemarks[plmcur].desc+'</description>\n<Point>\n<coordinates>';
            var markerfooter = '</coordinates>\n</Point>\n</Placemark>\n';
            placemarks[plmcur].toolID = 3;
            plmtext += markerheader;
            lat = polyPoints[0].lat();
            longi = polyPoints[0].lng();
            coords1 = roundVal(longi) + "," + roundVal(lat);
            plmtext += roundVal(longi) + "," + roundVal(lat);
            plmtext += markerfooter;
        }
    }
    if(drawMode==1) { // print polyline(s)  //polyline Mode
        placemarks[plmcur].toolID = 1;
        plmtext = lineheader;
        for (i=0; i<polyPoints.length; i++){
            lat = polyPoints[i].lat();
            longi = polyPoints[i].lng();
            coords1 += roundVal(longi) + "," + roundVal(lat) + ",0 \n";
            plmtext += roundVal(longi) + "," + roundVal(lat) + ",0 \n";
        }
        placemarks[plmcur].ID = polyPoints[0].lng().toFixed(3); // remember this polyline
        plmtext += linefooter;
        
    }
    if(codeID == 1) coo.value = header + plmtext + '</Document>\n</kml>';
    if(codeID == 2) coo.value = coords1 + coords2;
    plmtext = "";
    coords1 = coords2 = "";
}


function logHeader() {
    var docuname = "KML file Xorothetisis";
    var docudesc = "Source: manual edit";
    var top = '<?xml version="1.0" encoding="UTF-8"?>\n' +
            '<kml xmlns="http://www.opengis.net/kml/2.2">\n' +
            '<Document><name>'+docuname+'</name>\n' +
            '<description>'+docudesc+'</description>\n';
    return top;
}

function logStyles() {
    var last = "";
    var styles = "";
    //var length = polygonstyles.length;
    if (polygonstyles.length > 1) {
        for (var i=0; i<polygonstyles.length; i++) {
            if (polygonstyles[i].name != last) {
                styles += '<Style id="'+polygonstyles[i].name+'">\n' +
                '<LineStyle><color>'+polygonstyles[i].kmlcolor+'</color><width>'+polygonstyles[i].width+'</width></LineStyle>\n' +
                '<PolyStyle><color>'+polygonstyles[i].kmlfill+'</color></PolyStyle>\n' +
                '</Style>\n';
                last = polygonstyles[i].name;
            }
        }
        for (i=0; i<polygonstyles.length; i++) {
            if (polylinestyles[i].name != last) {
                styles += '<Style id="'+polylinestyles[i].name+'">\n' +
                '<LineStyle><color>'+polylinestyles[i].kmlcolor+'</color><width>'+polylinestyles[i].width+'</width></LineStyle>\n' +
                '</Style>\n';
                last = polylinestyles[i].name;
            }
        }
    }else{ // only 1 polygonstyle and 1 polylinestyle
        styles += '<Style id="'+polygonstyles[cur].name+'">\n' +
        '<LineStyle><color>'+polygonstyles[cur].kmlcolor+'</color><width>'+polygonstyles[cur].width+'</width></LineStyle>\n' +
        '<PolyStyle><color>'+polygonstyles[cur].kmlfill+'</color></PolyStyle>\n' +
        '</Style>\n' +
        '<Style id="'+polylinestyles[cur].name+'">\n' +
        '<LineStyle><color>'+polylinestyles[cur].kmlcolor+'</color><width>'+polylinestyles[cur].width+'</width></LineStyle>\n' +
        '</Style>\n';
    }
    return styles;
}

function drawCoordinates(){
    // Recreate shapes
    if(polyPoints.length > 0){
        if(polyShape) polyShape.setMap(null); //a Polygon or a Polyline
//        if(holeShape.length > 0) { //holeShape is an array of holes for the polygon-with-holes-to-be
//            for(var i = 0; i < holeShape.length; i++) {
//                map.removeOverlay(holeShape[i]);
//            }
//        }
        //if(tinymarker) map.removeOverlay(tinymarker);
        //if(polygonstyles[cur].lineonoff == 0) polygonstyles[cur].color = polygonstyles[cur].fill;
        if(drawMode==2){ // polygon
            
            if(false){ //if(holePoints.length > 0) let's create a polygon with a hole, with help from PolylineEncoder.js
                encpoints = [];
                var verySmall = 0.00001;
        		var myZoomFactor = 2;
        		var myNumLevels = 18;
        		var polylineEncoder = new PolylineEncoder(myNumLevels,myZoomFactor,verySmall,true); // in PolylineEncoder.js
        		encpoints.push(polylineEncoder.dpEncode(polyPoints));
                for(i = 0; i < holesarray.length; i++) {
                    encpoints.push(polylineEncoder.dpEncode(holesarray[i]));
                }
                if(holePoints.length > 0) {
                    encpoints.push(polylineEncoder.dpEncode(holePoints));
                }
                encarray = [];
                for (i=0; i<encpoints.length; i++) {
                    encarray[i] ={
                    points: encpoints[i].encodedPoints,
                    levels: encpoints[i].encodedLevels,
                    color: polygonstyles[cur].color,
                    opacity: polygonstyles[cur].lineopac,
                    weight: polygonstyles[cur].width,
                    numLevels: 18,
                    zoomFactor: 2};
                }
                polyShape = new GPolygon.fromEncoded({
                    polylines: encarray,
                    fill: true,
                    color: polygonstyles[cur].fill,
                    opacity: polygonstyles[cur].fillopac,
                    outline: true
                });
                placemarks[plmcur].jstext = jscopy(); // save a printable version of the javascript
                placemarks[plmcur].hole = 1; // remember that this polygon has hole(-s)
                if(lookatsaved === false) {
                    createholeobject();
                    ph++;
                }
                GEvent.removeListener(mylistener);
            }else{ // normal polygon
                clearMap();
                if(polyPoints.length == 2){ // line between the 2 first points must be drawn as Polyline for Firefox to understand
                    polyShape = new google.maps.Polyline({
                                                            "path": polyPoints,
                                                            "strokeColor": polylinestyles[cur].color,
                                                            "strokeWeight": polylinestyles[cur].width,
                                                            "strokeOpacity": polylinestyles[cur].lineopac
                                                            });
                }else{
                    polyShape = new google.maps.Polygon({
                                                            "path": polyPoints,
                                                            "strokeColor": polygonstyles[cur].color,
                                                            "strokeWeight": polygonstyles[cur].width,
                                                            "strokeOpacity": polygonstyles[cur].lineopac,
                                                            "fillColor": polygonstyles[cur].fill,
                                                            "fillOpacity": polygonstyles[cur].fillopac
                                                            });
                    
                }
                digimapOverlays.push(polyShape);
                    polyShape.setMap(digimap);
                    increasePolygons();
                    digiDblClick = google.maps.event.addListener(polyShape,"dblclick",polygonEnd);
            google.maps.event.addListener(polyShape,"mouseover",function(gevent){ 
                                                                    
                                                                    if (real_editMode){
                                                                        polyShape.runEdit(true);
                                                                        google.maps.event.clearListeners(polyShape,"mouseover"); 
                                                                        
                                                                    }
                                                                    });
            poliEditListener = google.maps.event.addListener(polyShape,"mouseout",function(gevent){
                                                                    if (real_editMode){
                                                                        google.maps.event.clearListeners(polyShape,"mousemove");                                                      
                                                                        checkPolyBuffer(gevent,polyShape);
                                                                        return false;
                                                                    }  
                                                                    });
                //addshapelistener(polyShape);
            }
        }else{ // polyline
            clearMap();
            polyShape = new google.maps.Polyline({
                                                    "path":polyPoints,
                                                    "strokeColor":polylinestyles[cur].color,
                                                    "strokeWeight":polylinestyles[cur].width,
                                                    "strokeOpacity":polylinestyles[cur].lineopac
                                                    });
            digiDblClick = google.maps.event.addListener(polyShape,"dblclick",polylineEnd);
            google.maps.event.addListener(polyShape,"mouseover",function(gevent){ 
                                                                    
                                                                    if (real_editMode){
                                                                        polyShape.runEdit(true);
                                                                        google.maps.event.clearListeners(polyShape,"mouseover"); 
                                                                        //editMode = true;
                                                                    }
                                                                    });
            poliEditListener = google.maps.event.addListener(polyShape,"mouseout",function(gevent){
                                                                    if (real_editMode){
                                                                        google.maps.event.clearListeners(polyShape,"mousemove");                                                      
                                                                        checkPolyBuffer(gevent,polyShape);
                                                                    }    
                                                                    });

            if(polyPoints.length > 1) {
                //var length = polyShape.getLength().toFixed(2)+" meters";
                //gob("lengthandarea").value = length;
            }
        }
        
        digimapOverlays.push(polyShape);
        increasePolylines();
        polyShape.setMap(digimap);
        
    }
}

function checkPolyBuffer(gevent,caller)
{
    if (real_editMode && !leftButtonDown){
    digiOutLoc = gevent.latLng;   
    google.maps.event.addListener(digimap,"mousemove",function(gevent2){
        if (!editMode){
        var worldCoordinate1 = digimap.getProjection().fromLatLngToPoint(digiOutLoc);
        var pixel1= new google.maps.Point(
        worldCoordinate1.x * Math.pow(2, digimap.getZoom()),
        worldCoordinate1.y * Math.pow(2, digimap.getZoom()));
         
        var worldCoordinate2 = digimap.getProjection().fromLatLngToPoint(gevent2.latLng);
        var pixel2= new google.maps.Point(
        worldCoordinate2.x * Math.pow(2, digimap.getZoom()),
        worldCoordinate2.y * Math.pow(2, digimap.getZoom()));
        var sq_distance = Math.pow(pixel2.x-pixel1.x,2)+Math.pow(pixel2.y-pixel1.y,2);
        /*
        //debug:
        coo = document.getElementById("KMLoutput");
        coo.value = Math.sqrt(sq_distance);
        */
        if (Math.sqrt(sq_distance)>10){
            google.maps.event.clearListeners(digimap,"mousemove");
            caller.stopEdit();
            google.maps.event.addListener(caller,"mouseover",function(gevent){ 
                                                                    
                                                                    if (!editMode){
                                                                        caller.runEdit(true);
                                                                        google.maps.event.clearListeners(caller,"mouseover"); 
                                                                        
                                                                    }
                                                                    });
        }
        }
    });
    }
}

function createstyleobjects() {
    var polygonstyle = new polystyle();
    polygonstyles.push(polygonstyle);
    var polylinestyle = new linestyle();
    polylinestyles.push(polylinestyle);
}
function createplacemarkobject() {
    var thisplacemark = new placemarkobject();
    placemarks.push(thisplacemark);
}

function polystyle() {
    this.name = "rangecolour";
    this.kmlcolor = "660000FF";
    this.kmlfill = "660000FF";
    this.color = "#FF0000";
    this.fill = "#FF0000";
    this.width = 0.1;
    this.lineopac = .4;
    this.fillopac = .4;
    this.fillonoff = 1;
    this.lineonoff = 1;
}

function linestyle() {
    this.name = "linecolour";
    this.kmlcolor = "660000FF";
    this.color = "#FF0000";
    this.width = 3;
    this.lineopac = 0.4;
}
function placemarkobject() {
    var thename = document.getElementById("nameValue");
    var thedescr = document.getElementById("descriptionValue");
    this.name = thename.value;
    this.desc = thedescr.value;
    this.polygonstyle = "rangecolour";
    this.linestyle = "linecolour";
    this.curstyle = 0;
    this.tess = 1;
    this.alt = "clampToGround";
    this.plmtext = "";
    this.jstext = "";
    this.toolID = 1;
    this.hole = 0;
    this.ID = 0;
}

function roundVal(val){
    if(val.toString().length < 9){
        return val;
    }else{
    	var dec = 6;
    	var result = Math.round(val*Math.pow(10,dec))/Math.pow(10,dec);
    	return result;
    }
}

function resetMap(){
    polyPoints = new Array();
    clearMap();
}

function clearMap(){
    try{
    deleteOverlays();
    }catch(Error){}
   
    cur = 0;
    plmcur = 0;
    placemarks = [];
    createplacemarkobject();
    countMarkers = 0;
    countPolygons = 0;
    countPolylines = 0;
    document.getElementById("countMarkers").innerHTML = countMarkers;
    document.getElementById("countPolygons").innerHTML = countPolygons;
    document.getElementById("countPolylines").innerHTML = countPolylines;
}

function increaseMarkers()
{
    countMarkers ++;
    document.getElementById("countMarkers").innerHTML = countMarkers;
}

function increasePolygons()
{
    countPolygons ++;
    document.getElementById("countPolygons").innerHTML = countPolygons;
}

function increasePolylines()
{
    countPolylines ++;
    document.getElementById("countPolylines").innerHTML = countPolylines;
}

function deleteOverlays() {
  var added_kml; 
  if (geoXml){added_kml = geoXml.docs[0];}
  infowindow.setMap(digimap);
  infowindow.close();
  if (digimapOverlays) {
    for (i in digimapOverlays) {
      digimapOverlays[i].setMap(null);
    }
    digimapOverlays.length = 0;
  }
  if (added_kml)
  {
        /* future checks for complex kml /*
      if (added_kml.gpolygons){
        for (i in added_kml.gpolygons){
            added_kml.gpolygons[i].setMap(null);
        }
        added_kml.gpolygons.length = 0;
      }
      if (added_kml.gpolylines){
        for (i in added_kml.gpolylines){
            added_kml.gpolylines[i].setMap(null);
        }
        added_kml.gpolylines.length = 0;
      }*/
      if (added_kml.placemarks){
        for (i in added_kml.placemarks){
            if (added_kml.placemarks[i].Point){
                added_kml.placemarks[i].marker.setMap(null);
            }
            if (added_kml.placemarks[i].Polygon || added_kml.placemarks[i].LineString ){
                added_kml.placemarks[i].poly.setMap(null);
            }
        }
        added_kml.placemarks.length = 0;
      }
  }
}

function copyKmlRef()
{
    var added_kml; 
    if (geoXml){added_kml = geoXml.docs[0];}
    if (added_kml)
    {
        if (added_kml.placemarks)
        {
            for (i in added_kml.placemarks)
            {
                var item = added_kml.placemarks[i];
                if (item.Point)
                {
                    digimapOverlays.push(item.marker);
                    polyPoints.push(item.marker.getPosition());
                    increaseMarkers();
                    //item.marker.draggable = true;
                    drawMode = 3;
                }
                if (item.Polygon || item.LineString)
                {
                    
                   
                    if (item.Polygon){
                        polyShape = item.polygon;
                        increasePolygons();
                        polyPoints = item.polygon.getPath().getArray();
                        drawMode = 2;
                    }
                    if (item.LineString){
                        polyShape = item.polyline;
                        increasePolylines();
                        polyPoints = item.polyline.getPath().getArray();
                        drawMode=1;
                    }
                    digimapOverlays.push(polyShape);
                    google.maps.event.addListener(polyShape,"mouseover",function(gevent){ 
                                                                    
                                                                    if (real_editMode){
                                                                        polyShape.runEdit(true);
                                                                        google.maps.event.clearListeners(polyShape,"mouseover"); 
                                                                        
                                                                    }
                                                                    });
                    poliEditListener = google.maps.event.addListener(polyShape,"mouseout",function(gevent){
                                                                    if (real_editMode){
                                                                        google.maps.event.clearListeners(polyShape,"mousemove");                                                      
                                                                        checkPolyBuffer(gevent,polyShape);
                                                                        return false;
                                                                    }  
                                                                    });
                }
            }
        }
    }
}

function showAddress(address){
  if(geocoder){
   geocoder.geocode( {"address": address},
     function(results){
       if(!results){
         alert(address + msg_errAddressNotFound);
       }else{
         var mapZoom = digimap.getZoom();
         var point = results[0].geometry.location;
         digimap.setCenter(point, mapZoom);
         createmarker(point);
         var previousmode = drawMode;
         drawMode = 3;
	     logCoordinates();
	     drawMode = previousmode;
         //var centerpoint = new google.maps.Marker({"position": point});
         //centerpoint.setMap(digimap);
         //digimapOverlays.push(centerpoint);
       }
     }
    );
  }
}

function checkKeypress(e)
{
    var keynum;
    if(window.event) // IE
    {
    keynum = e.keyCode
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
    keynum = e.which
    }
    if (keynum==13){
        showAddress(document.getElementById("searchBtn").value);
        return false;
    }
    
}

function pushpoint(point){
    var normalMode = true;  //pk edit
    var holemode = false; //pk edit
    if(normalMode === true){
        if(holemode){
            // Push onto polypoints of existing poly, building inner boundary
            holePoints.push(point);
        }else{
            polyPoints.push(point);
        }
        drawCoordinates();
    }else{
        if(circlemode) clickforCircle(point);
        if(rectanglemode) collectrectanglepoints(point);
        if(option1mode) option1(point);
        if(option2mode) option2(point);
    }
}

// ----------------------------------------------------------------------------
// HasClassName
//
// Description : returns boolean indicating whether the object has the class name
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to add
//
Element.prototype.ex_HasClassName= function(strClass)
   {

   // if there is a class
   if ( this.className )
      {

      // the classes are just a space separated list, so first get the list
      var arrList = this.className.split(' ');

      // get uppercase class for comparison purposes
      var strClassUpper = strClass.toUpperCase();

      // find all instances and remove them
      for ( var i = 0; i < arrList.length; i++ )
         {

         // if class found
         if ( arrList[i].toUpperCase() == strClassUpper )
            {

            // we found it
            return true;

            }

         }

      }

   // if we got here then the class name is not there
   return false;

   }
// 
// HasClassName
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// AddClassName
//
// Description : adds a class to the class attribute of a DOM element
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to add
//
Element.prototype.ex_AddClassName= function(strClass, blnMayAlreadyExist)
   {

   // if there is a class
   if ( this.className )
      {

      // the classes are just a space separated list, so first get the list
      var arrList = this.className.split(' ');

      // if the new class name may already exist in list
      if ( blnMayAlreadyExist )
         {

         // get uppercase class for comparison purposes
         var strClassUpper = strClass.toUpperCase();

         // find all instances and remove them
         for ( var i = 0; i < arrList.length; i++ )
            {

            // if class found
            if ( arrList[i].toUpperCase() == strClassUpper )
               {

               // remove array item
               arrList.splice(i, 1);

               // decrement loop counter as we have adjusted the array's contents
               i--;

               }

            }

         }

      // add the new class to end of list
      arrList[arrList.length] = strClass;

      // add the new class to beginning of list
      //arrList.splice(0, 0, strClass);
      
      // assign modified class name attribute
      this.className = arrList.join(' ');

      }
   // if there was no class
   else
      {

      // assign modified class name attribute      
      this.className = strClass;
   
      }

   }
// 
// AddClassName
// ----------------------------------------------------------------------------


// ----------------------------------------------------------------------------
// RemoveClassName
//
// Description : removes a class from the class attribute of a DOM element
//    built with the understanding that there may be multiple classes
//
// Arguments:
//    objElement              - element to manipulate
//    strClass                - class name to remove
//
Element.prototype.ex_RemoveClassName = function(strClass)
   {

   // if there is a class
   if ( this.className )
      {

      // the classes are just a space separated list, so first get the list
      var arrList = this.className.split(' ');

      // get uppercase class for comparison purposes
      var strClassUpper = strClass.toUpperCase();

      // find all instances and remove them
      for ( var i = 0; i < arrList.length; i++ )
         {

         // if class found
         if ( arrList[i].toUpperCase() == strClassUpper )
            {

            // remove array item
            arrList.splice(i, 1);

            // decrement loop counter as we have adjusted the array's contents
            i--;

            }

         }

      // assign modified class name attribute
      this.className = arrList.join(' ');

      }
   // if there was no class
   // there is nothing to remove

   }
// 
// RemoveClassName
// ----------------------------------------------------------------------------

// this function determines whether the event is the equivalent of the microsoft 
// mouseleave or mouseenter events. 
function isMouseLeaveOrEnter(e, handler) 
{
 if (e.type != 'mouseout' && e.type != 'mouseover') return false; 
 var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement; 
 while (reltg && reltg != handler) reltg = reltg.parentNode; 
 return (reltg != handler); 
}

$(document).ready(function() {
    
    leftButtonDown = false;
    $(document).mousedown(function(e){
        // Left mouse button was pressed, set flag
        if(e.which === 1) leftButtonDown = true;
    });
    $(document).mouseup(function(e){
        // Left mouse button was released, clear flag
        if(e.which === 1) leftButtonDown = false;
    });

    function tweakMouseMoveEvent(e){
        // Check from jQuery UI for IE versions < 9
        if ($.browser.msie && !(document.documentMode >= 9) && !event.button) {
            leftButtonDown = false;
        }

        // If left button is not set, set which to 0
        // This indicates no buttons pressed
        if(e.which === 1 && !leftButtonDown) e.which = 0;
    }

    $(document).mousemove(function(e) {
        // Call the tweak function to check for LMB and set correct e.which
        tweakMouseMoveEvent(e);
        
    });
    
    
});

$(window).resize(function() {
    setTimeout("google.maps.event.trigger(digimap, 'resize')",500);
    
    
    });

function loadKML(kmlstring)
{
    jQuery(document).ready(function($) {
       google.maps.event.addListenerOnce(digimap,"idle",function(){
        geoXml = new geoXML3.parser({

                    map: digimap,
                    zoom: false,
                    suppressInfoWindows: true

                });
        try{
        
        geoXml.parseKmlString(kmlstring);
        copyKmlRef();
        if (geoXml.docs[0]){
        digimap.fitBounds(geoXml.docs[0].bounds);
        digimap.panTo(geoXml.docs[0].bounds.getCenter());
        google.maps.event.addListenerOnce(digimap, "idle", function() { 
          if (digimap.getZoom() > 10) digimap.setZoom(10); 
        });

        }
        }catch(Error){
            alert(msg_errWrongKML);
        }
       });
       
    });
    
}

