var map;
var stateCenter;
var nowZoom;
var oldZoom=0;
var isZooming=false;
var isAutoPaning=false;
var isZoomOut=true;
var isFirstLoad = true;
var isCulster=true;
var arrRoutes=new Array();
var arrLatLngs=new Array();
var arrFrames=new Array();
var arrTimerLatLngs=new Array();
var arrMarkers=new Array();
var arrPolylines=new Array();
var tmrTimerLoading;

var arrCustomRoutes=new Array();
var arrCustomLatLngs=new Array();
var arrCustomFrames=new Array();
var arrTimerCustomLatLngs=new Array();
var arrCustomMarkers=new Array();
var arrCustomPolylines=new Array();
var customMarkerImg=new Array();
var customPolyColor=new Array();
var customPolySize=new Array();
var customHtml=new Array();

var splitResult;
var moveEndEventHandle;
var colorToUse = "#ff0000";
var marker;
var autoPan = true;
var markerPosition;
var movestart_position = '';
var moveend_position = '';
var debugPanel = '0';
var totalPathLoaded;
var totalFrameLoaded;
var nearestOverlay;
var stopLoad = false;

var arrLocation=new Array();
var goToLocation=false;
var linkFromZoom2ND=false;
var linkFromCustomZoom2ND=false;
var isAutoplay=false;
var iicosmoWindow='';
var latlngTarget=new Array();

function loadGmap(){    
    //====================   
    var divGMapSpace=document.getElementById('divGMapSpace');

    map=new GMap2(divGMapSpace);

	map.enableScrollWheelZoom();

    //var posLargeMapControl=new GControlPosition(G_ANCHOR_TOP_RIGHT,new GSize(4,62));
    //var posScaleControl=new GControlPosition(G_ANCHOR_BOTTOM_LEFT,new GSize(526,4));
    //map.addControl(new GLargeMapControl,posLargeMapControl);   
    //map.addControl(new GScaleControl,posScaleControl);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	map.addControl(new GOverviewMapControl());
	
    
	GEvent.addListener(map,"load", function(){
		try
		{
		setTimeout("getMovie(\'video_player\').gmapLoaded()",(3000 * Math.random()));
		}
		catch (err)
		{
		}
	});
	
	if(typeof(requestLat)!='undefined' && typeof(requestLng)!='undefined'&& typeof(requestZoomRate)!='undefined') {
		//window.document.title = requestLat+'/'+requestLng+'/'+requestZoomRate;
		map.setCenter(new GLatLng(requestLat, requestLng), requestZoomRate);//Set init
	} else {
		map.setCenter(new GLatLng(14.434680, 125), 2);//Set init
	}
    stateCenter=map.getCenter();
    nowZoom=map.getZoom();
    loadLatLngs();
    
    //Handler map
    //==================== 
	GEvent.addListener(map, "movestart", function() {
		//movestart_position = map.getCenter();
		if(debugPanel==1) {
		document.getElementById("message").innerHTML = movestart_position + " : "+ moveend_position;
		}
	});

    GEvent.addListener(map,"zoomstart",function(){
        //loadLatLngs();	    
	});	
	GEvent.addListener(map,"zoomend",function(){   
	    isZooming=true;//Prevent zoom then move double event
	    //====================
	    var nowZoomState;
	    var oldZoomState=0;

		nowZoom=map.getZoom(); 
		if(oldZoom>nowZoom) {
			isZoomOut = true;
		} else {
			isZoomOut = false;
		}	    
	    //Custom loadLatLng on only defined zoom level
	    //====================        
        if(nowZoom==20){
            nowZoomState=11;
        }
		else if(nowZoom==19){
            nowZoomState=10;
        }
		else if(nowZoom==18){
            nowZoomState=9;
        }
		else if(nowZoom==17){
            nowZoomState=8;
        }
		else if(nowZoom==16){
            nowZoomState=7;
        }
		else if(nowZoom==15){
            nowZoomState=6;
        }
		else if(nowZoom==14){
            nowZoomState=5;
        }
		else if(nowZoom==13){
            nowZoomState=4;
        }
        else if(nowZoom<=12&&nowZoom>=7){
            nowZoomState=3;
        }
		else if(nowZoom<=6&&nowZoom>=5&&isZoomOut==true){
            nowZoomState=2;
        }
		else if(nowZoom<=4&&nowZoom>=3&&isZoomOut==true){
            nowZoomState=1;
        }
        else if(nowZoom<=2){
            nowZoomState=0;      
        } else {
			nowZoomState=oldZoomState;  
		}
        
        if(oldZoom==20){
            oldZoomState=11;
        }
        else if(oldZoom==19){
            oldZoomState=10;
        }
        else if(oldZoom==18){
            oldZoomState=9;
        }
        else if(oldZoom==17){
            oldZoomState=8;
        }
        else if(oldZoom==16){
            oldZoomState=7;
        }
        else if(oldZoom==15){
            oldZoomState=6;
        }
        else if(oldZoom==14){
            oldZoomState=5;
        }
        else if(oldZoom==13){
            oldZoomState=4;
        }
        else if(oldZoom<=12&&oldZoom>=7){
            oldZoomState=3;
        }
		else if(oldZoom<=6&&oldZoom>=5&&isZoomOut==true){
            oldZoomState=2;
        }
		else if(oldZoom<=4&&oldZoom>=3&&isZoomOut==true){
            oldZoomState=1;
        }
        else if(oldZoom<=2){
            oldZoomState=0;      
        }
		//window.document.title = 'oldZoom:'+oldZoom+'/nowZoom:'+nowZoom+'/oldZoomState:'+oldZoomState+'/nowZoomState:'+nowZoomState+'/isZoomOut:'+isZoomOut;
        if(nowZoomState!=oldZoomState || goToLocation  ==true|| linkFromZoom2ND ==true|| linkFromCustomZoom2ND ==true){    
			loadLatLngs();
        }
        
        oldZoom=nowZoom; 
	});	
	enableMoveEndHandler();
}

function loadCustomLatLngs(){ 
	//Get current info
    //====================
    var bounds=map.getBounds();
    var latlngNE=bounds.getNorthEast();
    var latlngSW=bounds.getSouthWest();   
    var lat_ne=latlngNE.lat();
    var lng_ne=latlngNE.lng();
    var lat_sw=latlngSW.lat();
    var lng_sw=latlngSW.lng();
/*
    if(isCulster!=true){
        urlCluster='../GetCustomVertexs.xml';
    }
    else {
		urlCluster='../GetCustomZones.xml';
    }
*/
	urlCluster='../GetCustomZones.xml';

	var lat_dif = lat_ne-lat_sw;
	if(lng_ne>lng_sw) {
	var lng_dif = lng_ne-lng_sw;
	}
	else{
	var lng_dif = lng_ne+360-lng_sw;
	}
	if(isCulster==true) {
	var latSW = lat_sw;
	var lngSW = lng_sw;
	var latNE = lat_ne;
	var lngNE = lng_ne;
	}
	else{
	var latSW = lat_sw-lat_dif;
	var lngSW = lng_sw-lng_dif;
	var latNE = lat_ne+lat_dif;
	var lngNE = lng_ne+lng_dif;
	}

    //Connecting
    //====================
    var xmlHttp;   			
    xmlHttp=getXMLHttp();	
	//xmlHttp.open("GET", urlCluster+'?route_id='+route_id+'&path_id='+path_id+'&lat_ne='+latNE+'&lng_ne='+lngNE+'&lat_sw='+latSW+'&lng_sw='+lngSW+'&zoom='+zoom+"&sid="+Math.random());
	xmlHttp.open("GET", urlCluster);
    xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4&&xmlHttp.status==200){
            //Clear uncompleted drawing cycle
            //====================
            for(var i=0;i<arrTimerCustomLatLngs.length;i++){
                clearTimeout(arrTimerCustomLatLngs[i]);
            }
            //Clear all overlay was drawed
            //====================
            //map.clearOverlays();   
			if(arrCustomMarkers) {
				for(var i=0; i<arrCustomMarkers.length; i++) {
					try
					{
						map.removeOverlay(arrCustomMarkers[i]);
					}
					catch (err)
					{
					}
					
				}
			}
			if(arrCustomPolylines) {
				for(var i=0; i<arrCustomPolylines.length; i++) {
					try
					{
						map.removeOverlay(arrCustomPolylines[i]);	
					}
					catch (err)
					{
					}
				}
			}
        
            //Result management
            //====================
            var xml=xmlHttp.responseXML;			    
            arrCustomLatLngs=new Array();
			arrCustomFrames=new Array();
			arrCustomMarkers=new Array();
			arrCustomPolylines=new Array();
			arrCustomRoutes=new Array();
			var arrCustomTemp=new Array();
			var arrCustomFrameTemp=new Array();
	        var domRoutes=xml.documentElement.getElementsByTagName("route"); 
			/*
			if(document.all){
				 lblLoading.innerText='Drawing '+domRoutes.length+' Elements';//IE
			} else{
				lblLoading.textContent='Drawing '+domRoutes.length+' Elements';//Firefox
			}
			*/

			totalPathLoaded = 0;
			totalFrameLoaded = 0;
	        for(var i=0;i<domRoutes.length;i++){
	            var domRoute=domRoutes[i];
	            var route_id=domRoute.getAttribute("id");
	            var route_name=domRoute.getAttribute("name");
				//alert(route_id);
				arrCustomRoutes.push(route_id);
				arrCustomTemp=new Array();
				arrCustomFrameTemp=new Array();
	            var domPaths=domRoute.getElementsByTagName("paths");    
	            for(var j=0;j<domPaths.length;j++){
	                var domPath=domPaths[j];
	                var path_id=domPath.getAttribute("id");
	                var path_flv=domPath.getAttribute("flv");
	                var path_order=domPath.getAttribute("order");
					var path_img=domPath.getAttribute("img");
					var path_color=domPath.getAttribute("color");
					var path_size=domPath.getAttribute("size");
					var path_html=domPath.getAttribute("html");

					customMarkerImg[i] = path_img;
					customPolyColor[i] = path_color;
					customPolySize[i] = path_size;
					customHtml[i] = path_html;

	                var domLatLngs=domPath.getElementsByTagName("path");
					totalPathLoaded = totalPathLoaded+domPaths.length;
	                for(var k=0;k<domLatLngs.length;k++){
	                    var domLatLng=domLatLngs[k];
	                    var latlng_frame=domLatLng.getAttribute("frame");
	                    var latlng_lat=domLatLng.getAttribute("lat");
	                    var latlng_lng=domLatLng.getAttribute("lng");
	                    var latlng=new GLatLng(parseFloat(latlng_lat),parseFloat(latlng_lng));
						if(isCulster==true){
						arrCustomTemp.push(latlng);     
						}
						else{
						arrCustomTemp.push(latlng); 
						arrCustomFrameTemp.push(path_id+'|'+latlng_frame);   
						}
					totalFrameLoaded = totalFrameLoaded+domLatLngs.length;
	                }
	            }
				arrCustomFrames[i]=arrCustomFrameTemp;
	            arrCustomLatLngs[i]=arrCustomTemp;

				if(isCulster==true){
				try
				{
					arrTimerCustomLatLngs[i]=setTimeout("drawCustomMarkers("+i+")",(3000 * Math.random()));
				}
				catch (err)
				{
				}

				
				} 
				else {
				try
				{
					arrTimerCustomLatLngs[i]=setTimeout("drawCustomPolylines("+i+")",(3000 * Math.random()));
				}
				catch (err)
				{
				}
				
				}
				
	        }
			if(debugPanel==1) {
				try
					{
						document.getElementById("data").innerHTML = '<b>route:</b> '+domRoutes.length+'/<b>path:</b> '+totalPathLoaded+'/<b>frame</b>:'+totalFrameLoaded;
					}
					catch (err)
					{
					}
				
			}
            tmrTimerLoading=setTimeout("stopLoading()",2000);	 
        }

    }
    xmlHttp.send(null);
}
function loadLatLngs(){ 
	if(stopLoad==true) {
	 cancelLoading();
	}
	stopLoad=true;
	//Prepare
    //====================
    var divLoading=document.getElementById('divLoading');
    var lblLoading=document.getElementById('lblLoading');
    divLoading.style.display="block";
    
    //Get current info
    //====================
    var bounds=map.getBounds();
    var latlngNE=bounds.getNorthEast();
    var latlngSW=bounds.getSouthWest();   
    var lat_ne=latlngNE.lat();
    var lng_ne=latlngNE.lng();
    var lat_sw=latlngSW.lat();
    var lng_sw=latlngSW.lng();
	
    var zoom=map.getZoom();
    var path_id='%';
    var route_id='%';
    var urlCluster;

    
	//window.document.title = 'lat_ne:'+lat_ne+'/lng_ne:'+lng_ne+'/lat_sw:'+lat_sw+'/lng_sw:'+lng_sw;
	if(debugPanel==1) {
	document.getElementById("boundary").innerHTML = '<b>lat_ne:</b> '+lat_ne+'/<b>lng_ne:</b> '+lng_ne+'/<b>lat_sw:</b> '+lat_sw+'/<b>lng_sw:</b> '+lng_sw+'/<b>zoomrate:</b> '+map.getZoom();
	}
    //Clustering
    //====================
    if(map.getZoom()>=13){
        urlCluster='../GetVertexs.php';
        isCulster=false;
    }
    else if(map.getZoom()<=12&&map.getZoom()>=7){
        urlCluster='../GetSectors.php';
        isCulster=true;
    }
    else if(map.getZoom()<=6){
		urlCluster='../GetZones.php';
        isCulster=true;

    }
    
	var lat_dif = lat_ne-lat_sw;
	if(lng_ne>lng_sw) {
	var lng_dif = lng_ne-lng_sw;
	}
	else{
	var lng_dif = lng_ne+360-lng_sw;
	}
	if(isCulster==true) {
	var latSW = lat_sw;
	var lngSW = lng_sw;
	var latNE = lat_ne;
	var lngNE = lng_ne;
	}
	else{
	var latSW = lat_sw-lat_dif;
	var lngSW = lng_sw-lng_dif;
	var latNE = lat_ne+lat_dif;
	var lngNE = lng_ne+lng_dif;
	}
    //Connecting
    //====================
    var xmlHttp;   			
    xmlHttp=getXMLHttp();	
	xmlHttp.open("GET", urlCluster+'?route_id='+route_id+'&path_id='+path_id+'&lat_ne='+latNE+'&lng_ne='+lngNE+'&lat_sw='+latSW+'&lng_sw='+lngSW+'&zoom='+zoom+"&sid="+Math.random());
    xmlHttp.onreadystatechange=function(){
        if(xmlHttp.readyState==4&&xmlHttp.status==200){
            //Clear uncompleted drawing cycle
            //====================
            for(var i=0;i<arrTimerLatLngs.length;i++){
                clearTimeout(arrTimerLatLngs[i]);
            }
            //Clear all overlay was drawed
            //====================
            //map.clearOverlays();   
			if(arrMarkers) {
				for(var i=0; i<arrMarkers.length; i++) {
					try
					{
						map.removeOverlay(arrMarkers[i]);
					}
					catch (err)
					{
					}
					
				}
			}
			if(arrPolylines) {
				for(var i=0; i<arrPolylines.length; i++) {
					try
					{
						map.removeOverlay(arrPolylines[i]);	
					}
					catch (err)
					{
					}
				}
			}
        
            //Result management
            //====================
            var xml=xmlHttp.responseXML;			    
            arrLatLngs=new Array();
			arrFrames=new Array();
			arrMarkers=new Array();
			arrPolylines=new Array();
			arrRoutes=new Array();
			var arrTemp=new Array();
			var arrFrameTemp=new Array();
	        var domRoutes=xml.documentElement.getElementsByTagName("route"); 
			/*
			if(document.all){
				 lblLoading.innerText='Drawing '+domRoutes.length+' Elements';//IE
			} else{
				lblLoading.textContent='Drawing '+domRoutes.length+' Elements';//Firefox
			}
			*/

			totalPathLoaded = 0;
			totalFrameLoaded = 0;
	        for(var i=0;i<domRoutes.length;i++){
	            var domRoute=domRoutes[i];
	            var route_id=domRoute.getAttribute("id");
	            var route_name=domRoute.getAttribute("name");
				//alert(route_id);
				arrRoutes.push(route_id);
				arrTemp=new Array();
				arrFrameTemp=new Array();
	            var domPaths=domRoute.getElementsByTagName("paths");    
	            for(var j=0;j<domPaths.length;j++){
	                var domPath=domPaths[j];
	                var path_id=domPath.getAttribute("id");
	                var path_flv=domPath.getAttribute("flv");
	                var path_order=domPath.getAttribute("order");
	                var domLatLngs=domPath.getElementsByTagName("path");
					totalPathLoaded = totalPathLoaded+domPaths.length;
	                for(var k=0;k<domLatLngs.length;k++){
	                    var domLatLng=domLatLngs[k];
	                    var latlng_frame=domLatLng.getAttribute("frame");
	                    var latlng_lat=domLatLng.getAttribute("lat");
	                    var latlng_lng=domLatLng.getAttribute("lng");
	                    var latlng=new GLatLng(parseFloat(latlng_lat),parseFloat(latlng_lng));
						if(isCulster==true){
						arrTemp.push(latlng);     
						}
						else{
						arrTemp.push(latlng); 
						arrFrameTemp.push(path_id+'|'+latlng_frame);   
						}
					totalFrameLoaded = totalFrameLoaded+domLatLngs.length;
	                }
	            }
				arrFrames[i]=arrFrameTemp;
	            arrLatLngs[i]=arrTemp;

				if(isCulster==true){
				try
				{
					arrTimerLatLngs[i]=setTimeout("drawMarkers("+i+")",(3000 * Math.random()));
				}
				catch (err)
				{
				}

				
				} 
				else {
				try
				{
					arrTimerLatLngs[i]=setTimeout("drawPolylines("+i+")",(3000 * Math.random()));
				}
				catch (err)
				{
				}
				
				}
				
	        }
			if(debugPanel==1) {
				try
					{
						document.getElementById("data").innerHTML = '<b>route:</b> '+domRoutes.length+'/<b>path:</b> '+totalPathLoaded+'/<b>frame</b>:'+totalFrameLoaded;
					}
					catch (err)
					{
					}
				
			}
			//loadCustomLatLngs();
            tmrTimerLoading=setTimeout("stopLoading()",2000);	 
        }

    }
    xmlHttp.send(null);
}


function drawMarkers(iArray){
        var urlIcon='imgs/32x32pin_bluehere.png';
        var icon=new GIcon(icon,urlIcon,null,null);
        icon.iconSize=new GSize(32,32);
        icon.iconAnchor=new GPoint(16,28);
        icon.infoWindowAnchor=new GPoint(12,16);
                
        for(var i=0;i<arrLatLngs[iArray].length;i++){
            var marker=new GMarker(arrLatLngs[iArray][i],{icon:icon});
			GEvent.addListener(marker,"click",function(overlay){ 
				getMovie('video_player').onStopVideo();
                if(map.getZoom()<=12&&map.getZoom()>=7){
                    goto_lacation_from_zoom2ND(marker.getLatLng(),13);
					linkFromZoom2ND = true;
					isAutoplay = true;
                }
                else if(map.getZoom()<=6){
                    map.setCenter(marker.getLatLng(),7);
                }
            });
            arrMarkers.push(marker);
            map.addOverlay(marker);
        }

    clearTimeout(arrTimerLatLngs[iArray]);
}

function drawPolylines(iArray){
		var polySize = 3
		var arrLatLngTemp =  arrLatLngs[iArray];
		if(map.getZoom()>15) {
			var polySize = 5
		}
		poly=new GPolyline(arrLatLngs[iArray],colorToUse, polySize, 0.8)  

		GEvent.addListener(poly , "click", function(latlng ){nearest(latlng ); });
		
		 if(isFirstLoad == true) {
									   
			nearestOverlay = GEvent.addListener(map , "click", function(overlay,latlng ){
				if(overlay == null) nearest(latlng ); 
			});
		 
			isFirstLoad = false;
		}

		arrPolylines[iArray] = new Array();
		arrPolylines[iArray]=poly;
        map.addOverlay(poly);
		clearTimeout(arrTimerLatLngs[iArray]);
}

function drawCustomMarkers(iArray){
        var urlIcon=unescape(customMarkerImg[iArray]);
		var html=unescape(customHtml[iArray]);
        var icon=new GIcon(icon,urlIcon,null,null);
        icon.iconSize=new GSize(32,32);
        icon.iconAnchor=new GPoint(16,28);
        icon.infoWindowAnchor=new GPoint(12,16);
                
        for(var i=0;i<arrCustomLatLngs[iArray].length;i++){
            var marker=new GMarker(arrCustomLatLngs[iArray][i],{icon:icon});
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});
			/*
			GEvent.addListener(marker,"click",function(overlay){ 
				getMovie('video_player').onStopVideo();
                if(map.getZoom()<=12&&map.getZoom()>=7){
                    goto_lacation_from_zoom2ND(marker.getLatLng(),13);
					linkFromCustomZoom2ND = true;
					isAutoplay = false;
                }
                else if(map.getZoom()<=6){
                    map.setCenter(marker.getLatLng(),7);
                }
            });
			*/
            arrCustomMarkers.push(marker);
            map.addOverlay(marker);
        }

    clearTimeout(arrTimerCustomLatLngs[iArray]);
}

function drawCustomPolylines(iArray){
		var polySize = customPolySize[iArray];
		var polyColor = customPolyColor[iArray];
			var arrCustomLatLngTemp =  arrCustomLatLngs[iArray];
		if(map.getZoom()>15) {
			var polySize = polySize+2;
		}
		poly=new GPolyline(arrCustomLatLngs[iArray],'#'+polyColor, polySize, 0.8)  

		GEvent.addListener(poly , "click", function(latlng ){nearest(latlng ); });
		
		 if(isFirstLoad == true) {
									   
			nearestOverlay = GEvent.addListener(map , "click", function(overlay,latlng ){
				if(overlay == null) nearest(latlng ); 
			});
		 
			isFirstLoad = false;
		}

		arrCustomPolylines[iArray] = new Array();
		arrCustomPolylines[iArray]=poly;
        map.addOverlay(poly);
		clearTimeout(arrTimerCustomLatLngs[iArray]);
}

function stopLoading(){
	//alert(goToLocation);
	stopLoad = false;
	var divLoading=document.getElementById('divLoading');
    divLoading.style.display="none";
	//window.document.title = goToLocation;
	if(isAutoPaning == true) {
		enableMoveEndHandler();
		//getMovie('video_player').onStartVideo();
		isAutoPaning = false;
	}
	if(goToLocation==true) {
		//window.document.title = arrLocation[0]+'/'+arrLocation[1];
		
		randompoint();
		if(isAutoplay==true) {
			setTimeout("getMovie(\'video_player\').onStartVideo()",(1000 * Math.random()));
			isAutoplay=false;
		}
		goToLocation = false;
	}

	if(linkFromZoom2ND==true) {
		//window.document.title = latlngTarget[0]+''+latlngTarget[1];
		randompoint();
		if(isAutoplay==true) {
			setTimeout("getMovie(\'video_player\').onStartVideo()",(1000 * Math.random()));
			isAutoplay=false;
		}
		linkFromZoom2ND=false;
	}
	if(linkFromCustomZoom2ND==true) {
		linkFromCustomZoom2ND=false;
	}
	movestart_position=map.getCenter();
    clearTimeout(tmrTimerLoading);
}

function cancelLoading(){
	//alert(goToLocation);
	stopLoad = false;
	var divLoading=document.getElementById('divLoading');
    divLoading.style.display="none";
	//isAutoPaning = false;
	//isAutoplay=false;
	//goToLocation = false;
	//linkFromZoom2ND=false;
    clearTimeout(tmrTimerLoading);
}

function fitMap(arr){
    if(arr.length>0){
        var bounds=new GLatLngBounds();
        for(var i=0;i<arr.length;i++){ 
		    var stateCenter=arr[i];
		    bounds.extend(stateCenter);
        }
        map.setZoom(map.getBoundsZoomLevel(bounds));
        map.setCenter(bounds.getCenter());
    }
} 

function getMovie(movieName) {
	if(isIE) {
		return document.getElementsByName(movieName)[0];
	} else {
		return document.getElementsByName(movieName+"_nonie")[0];
	}
}

function nearest(latlng) {
	//window.document.title = "marking"+latlng;
	var dest=10000000;
	var nearestPoint;
	var nearestPath;
	for(var i=0;i<arrPolylines.length;i++){
		if(typeof(arrPolylines[i])!="undefined") {
			for(j=0;j<arrPolylines[i].getVertexCount();j++) {
				var _dest = Math.sqrt(Math.pow(arrPolylines[i].getVertex(j).lat()-latlng.lat(),2)+Math.pow(arrPolylines[i].getVertex(j).lng()-latlng.lng(),2));
				if(_dest<dest) {
				dest = _dest ;
				nearestPoint =j;// index of the nearest point on the path
				nearestPath = i; // path number
				}
			}
		}
	}

	try
	{
		mark( arrPolylines[nearestPath].getVertex(nearestPoint) );
	}
	catch (err)
	{
	}
	
	try
	{
		splitResult = arrFrames[nearestPath][nearestPoint].split('|');
	}
	catch (err)
	{
	}
	try
	{
		var path_id = splitResult[0];
		var frame_number =splitResult[1];
		if(debugPanel==1) {
				try
					{
						document.getElementById("current").innerHTML += '<b>path_id:</b> '+splitResult[0]+'/<b>frame_number:</b> '+splitResult[1]+'/<b>latlng:</b> '+latlng+'<br>';
					}
					catch (err)
					{
					}
				
			}
		
	 getMovie('video_player').selectFrameNr( frame_number , path_id);
	}
	catch (err)
	{
	}
 
}

function randompoint() {
    var bounds=map.getBounds();
    var latlngNE=bounds.getNorthEast();
    var latlngSW=bounds.getSouthWest();   
    var lat_ne=latlngNE.lat();
    var lng_ne=latlngNE.lng();
    var lat_sw=latlngSW.lat();
    var lng_sw=latlngSW.lng();
//window.document.title = lat_sw+'/'+lat_ne+'/'+lng_sw+'/'+lng_ne;
	var randomRoute;
	var randomRouteKey;
	var arrRouteFilter =new Array();
	var lastI;

	//window.document.title = arrPolylines.length;
	for(var i=0;i<arrPolylines.length;i++){
		if(typeof(arrPolylines[i])!="undefined") {
				if(arrPolylines[i].getVertex(0).lat()> lat_sw && arrPolylines[i].getVertex(0).lat()< lat_ne&& arrPolylines[i].getVertex(0).lng()> lng_sw&& arrPolylines[i].getVertex(0).lng()<lng_ne) {
				if(lastI!=i) {
					arrRouteFilter.push(i);
				}
				lastI = i;
			}
			
		}
	}
	
	randomRouteKey = Math.floor(Math.random()*arrRouteFilter.length);
	randomRoute = arrRouteFilter[randomRouteKey];
		
	try
	{
		mark( arrPolylines[randomRoute].getVertex(0) );
	}
	catch (err)
	{
	}
	try
	{
		splitResult = arrFrames[randomRoute][0].split('|');
	}
	catch (err)
	{
	}

		try
		{
		var path_id = splitResult[0];
		var frame_number =splitResult[1];	
		//window.document.title = path_id+'/'+frame_number;
		}
		catch (err)
		{
		}

		if(debugPanel==1) {
				try
					{
						document.getElementById("current").innerHTML += '<b>path_id:</b> '+splitResult[0]+'/<b>frame_number:</b> '+splitResult[1]+'/<b>latlng:</b> '+latlng+'<br>';
					}
					catch (err)
					{
					}
				
			}
		
	 getMovie('video_player').selectFrameNr( frame_number , path_id);

 
}

function randomroute(route_end_id) {
    var bounds=map.getBounds();
    var latlngNE=bounds.getNorthEast();
    var latlngSW=bounds.getSouthWest();   
    var lat_ne=latlngNE.lat();
    var lng_ne=latlngNE.lng();
    var lat_sw=latlngSW.lat();
    var lng_sw=latlngSW.lng();
	var randomRoute;
	var randomRouteKey;
	var routeEndKey;
	for(var k=0;k<arrRoutes.length;k++){
		if(arrRoutes[k]==route_end_id) {
			routeEndKey = k;
			break;
		}
	}

	var arrRouteFilter =new Array();
	var lastI;
	for(var i=0;i<arrPolylines.length;i++){
		if(typeof(arrPolylines[i])!="undefined") {
				if(arrPolylines[i].getVertex(0).lat()> lat_sw && arrPolylines[i].getVertex(0).lat()< lat_ne&& arrPolylines[i].getVertex(0).lng()> lng_sw&& arrPolylines[i].getVertex(0).lng()<lng_ne && i!=routeEndKey) {
				if(lastI!=i) {
					arrRouteFilter.push(i);
				}
				lastI = i;
			}
			
		}
	}
	if(arrRouteFilter.length==0) {
		randomRoute = routeEndKey;
	}
	else{
		randomRouteKey = Math.floor(Math.random()*arrRouteFilter.length);
		randomRoute = arrRouteFilter[randomRouteKey];
	}

			
	try
	{
		mark( arrPolylines[randomRoute].getVertex(0) );
	}
	catch (err)
	{
		//alert(err)
	}
	try
	{
		splitResult = arrFrames[randomRoute][0].split('|');
		//window.document.title = arrFrames[randomRoute][0]
	}
	catch (err)
	{
		//alert(err)
	}

		try
		{
		var path_id = splitResult[0];
		var frame_number =splitResult[1];			
		}
		catch (err)
		{
		}

		if(debugPanel==1) {
				try
					{
						document.getElementById("current").innerHTML += '<b>path_id:</b> '+splitResult[0]+'/<b>frame_number:</b> '+splitResult[1]+'/<b>latlng:</b> '+latlng+'<br>';
					}
					catch (err)
					{
					}
				
			}
		
	 getMovie('video_player').selectFrameNr( frame_number , path_id);

 
}

 function mark(latlng) {
	//window.document.title = latlng;
	//alert(latlng);
 	markerPosition = latlng;
	if(marker==null) {
		marker = new GMarker(latlng);
		map.addOverlay(marker);
	}
	else {
		
		marker.setLatLng(latlng);
		//window.document.title = goToLocation+'/'+map.getBounds().containsLatLng(latlng)+'/'+autoPan+'/'+latlng;
		if(!map.getBounds().containsLatLng(latlng)) {
			if(autoPan == true) {
				disableMoveEndHandler();
//				map.panTo(latlng);
				//getMovie('video_player').onStopVideo();
				if(map.getZoom()>18) {
				map.panTo(latlng);
				}
				else{
				map.setCenter(latlng);
				}
				isAutoPaning = true;
				loadLatLngs();
			}

		}
	}
	
}

function setAutoPan(value) {
	autoPan = value;
}

function goto_lacation_from_zoom2ND(latlng,zoomrate){
	getMovie('video_player').onStopVideo();
	linkFromZoom2ND = true;
	latlngTarget = latlng;
	isAutoplay = true;
	arrLocation=new Array();
	arrLocation[0] = latlng.lat;
	arrLocation[1] = latlng.lng;
	arrLocation[2] = zoomrate;
	map.setCenter(latlng,zoomrate);
}


function goto_lacation(lat,lng,zoomrate,target,lang,maptype){
	//var objVideoPlayer = getFlashMovieObject('video_player');
	//objVideoPlayer.selectFrameNr( 1000 , 2);100 , 536  
	//alert(goToLocation);
	
	if(target=='swai' || target=='iicosmo') {
	try
	{
	map.removeOverlay(marker);
	marker = null;
	}
	catch (err)
	{
	}
	}
	
	getMovie('video_player').onStopVideo();
	goToLocation = true;
	if(target=='swai') {
		isAutoplay = true;
	}else if(target == 'iicosmo') {
		 isAutoplay = false;
		//iicosmoWindow = window.open('http://www.iicosmo.com/'+lang+'/index.php?lat='+lat+'&lng='+lng+'&zoomrate='+zoomrate,target,'iicosmo');
		var url = 'http://www.iicosmo.com/'+lang+'/index.html';

		if (!iicosmoWindow.closed && iicosmoWindow.location) {
			iicosmoWindow.location.href = url;
		}
		else {
			iicosmoWindow=window.open(url,target,'height=600,width=800,resizable=yes,scrollbars=yes,toolbar=yes,location=yes,menubar=yes');
			if (!iicosmoWindow.opener) iicosmoWindow.opener = self;
		}
		if (window.focus) {iicosmoWindow.focus()}
	}
	else {
		isAutoplay = false;
		//iicosmoWindow = window.open('http://www.iicosmo.com/'+lang+'/index.php?lat='+lat+'&lng='+lng+'&zoomrate='+zoomrate,target,'iicosmo');
		var url = unescape(target);
		//alert(url);
		parent.location.href = url;
		/*
		if (!iicosmoWindow.closed && iicosmoWindow.location) {
			try
			{
				iicosmoWindow.location.href = url;
			}
			catch (err)
			{
			}
			
		}
		else {
			try
			{
				iicosmoWindow=window.open(url,'iiCosmoWindow','height=600,width=800,resizable=yes,scrollbars=yes,toolbar=yes,location=yes,menubar=yes');
			}
			catch (err)
			{
			}
			
			if (!iicosmoWindow.opener) iicosmoWindow.opener = self;
		}
		if (window.focus) {iicosmoWindow.focus()}
		* */
	}
	//maptype = Map Type (normal/satellite/hybrid/physical)
	if(maptype=='satellite') {
		maptype = G_SATELLITE_MAP
	}
	else if(maptype=='hybrid') {
		maptype = G_HYBRID_MAP
	}
	else if(maptype=='physical') {
		maptype = G_PHYSICAL_MAP
	}
	else {
		maptype = G_NORMAL_MAP
	}

	arrLocation=new Array();
	arrLocation[0] = lat;
	arrLocation[1] = lng;
	arrLocation[2] = zoomrate;
	if(target=='swai' || target=='iicosmo')map.setCenter(new GLatLng(lat, lng),zoomrate,maptype);//Disable for 
}

function enableMoveEndHandler() {
	//window.document.title = 'Enable';
	moveEndEventHandle = GEvent.addListener(map,"moveend",function(){
		if(isZooming==true || isAutoPaning== true){
	        isZooming=false;
	   } else if(goToLocation==true){
			//loadLatLngs();
            //stateCenter=map.getCenter();
            //moveend_position = map.getCenter();
		}
	    else{
				
			if(isCulster==true) {
				loadLatLngs();  
				stateCenter=map.getCenter();
				moveend_position = map.getCenter();
			}
			else{
				
				moveend_position = map.getCenter();
				compare_distance = moveend_position.distanceFrom(movestart_position);
				if(debugPanel==1) {
				document.getElementById("message").innerHTML = movestart_position + " : "+ moveend_position + " distance:"+ compare_distance;
				}
				
				switch(map.getZoom())
				{
					case 0: check_distance =10000000; break;
					case 1: check_distance = 3000000; break;
					case 2: check_distance = 2000000; break;
					case 3: check_distance = 1000000; break;
					case 4: check_distance =  500000; break;
					case 5: check_distance =  450000; break;
					case 6: check_distance =  250000; break;
					case 7: check_distance =  100000; break;
					case 8: check_distance =   50000; break;
					case 9: check_distance =   30000; break;
					case 10: check_distance =  20000; break;
					case 11: check_distance =   8000; break;
					case 12: check_distance =   7000; break;
					case 13: check_distance =   5000; break;
					case 14: check_distance =   3000; break;
					case 15: check_distance =   1000; break;
					case 16: check_distance =    500; break;
					case 17: check_distance =    200; break;
					case 18: check_distance =    125; break;
					case 19: check_distance =     45; break;
					case 20: check_distance =     20; break;
					default: check_distance =     10; break;
				}

				if ( compare_distance >= check_distance){
					// Need to Load Data;
					if(debugPanel==1) {
					document.getElementById("message2").innerHTML = check_distance + " RELOAD DATA";
					}
					loadLatLngs();  
					stateCenter=map.getCenter();
				} else {
					// Just little drag, by pass!
					if(debugPanel==1) {
					document.getElementById("message2").innerHTML = check_distance;
					}
				}   
				
			}
        }
	});
}

function disableMoveEndHandler() {		
	//window.document.title = 'Disable';
	GEvent.removeListener(moveEndEventHandle);
}