    var map;
    var gdir;
    var geocoder = null;
    var addressMarker;
    var idArr = new Array(); 
    var point= null;
    var setLat = 23.120153621695614;
    var setLon = 78.837890625;
    var coorArr = new Array();
    var coorAddressArr = new Array();
    var zoom=12;
    var routeBoxer = null;
    var distance = 20; // km

function toogleSearch(val)
{
	switch(val)
	{
		case 1:
		  document.getElementById("mainsearch").style.display="";

		break;
		case 2:
		  document.getElementById("mainsearch").style.display="none";
		break;
	}

}

function searchRoute(val)
{
	switch(val)
	{
		case 1:
			var frm = document.searchTxt;
			if(frm.startPlace.value == "" || frm.destinationPlace.value =="")
			{
				alert("Either the Starting Place or the destination place is Empty");
				frm.startPlace.focus();
				return false;
			}
		break;
		case 2:
			onGDirectionsLoadSearch();
			if(document.getElementById("routDescCoord").value == "" || document.getElementById("routDescCoord").value == "{\"coord\":[]}")
			{
				alert("Please mark your route first");
				return false;
			}
		break;
	}

}
function searchOption(val)
{
	var frmtxt = document.searchTxt;
	var frmmap = document.searchMap;
	switch(val)
	{
		case 1:
			
			frmtxt.searchtxt.disabled = false;
			frmtxt.txtsearch.checked=true;
			frmmap.searchtxt.disabled= true;
			frmmap.txtsearch.checked=false;

		break;
		case 2:
			frmmap.searchtxt.disabled= false;
			frmmap.txtsearch.checked = true;
			frmtxt.searchtxt.disabled = true;
			frmtxt.txtsearch.checked=false;
		break;

	}

}
function checkroutesInfo()
{
	var frm = document.route;
	//if(frm.routDescCoord.value == "" || frm.routDescDist.value == "" || frm.routDescText.value =="" )
	if(frm.routDescCoord.value == "")
	{
		alert("Please find your route first");
		return false;
	}
	if(frm.startPlace.value == "" || frm.destinationPlace.value =="")
	{
		alert("Please search your route first");
		return false;
	}

}

//new start
function initializemap(lat,lon,zoom)
{
	zoom = zoom-1;
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
 	map.centerAndZoom(new GPoint(lon, lat), 2);
	point = new GPoint(lon, lat);
	//marker = new GMarker(point);
	//map.addOverlay(marker);


};
function eventListnerClick(overlay, point) 
{
	if (overlay) 
	{
		var coord = overlay.getLatLng();
		removeLatLon(coord.y,coord.x);
		map.removeOverlay(overlay);
	} else if (point) 
	{
		map.recenterOrPanToLatLng(point);
		marker = new GMarker(point);
		map.addOverlay(marker);
		var matchll = /\(([-.\d]*), ([-.\d]*)/.exec( point );
		if ( matchll ) 
		{ 
			var lat = parseFloat( matchll[1] );
			var lon = parseFloat( matchll[2] );
			var myHtml=""
		if (point) {
			geocoder.getLocations(point, function(addresses) 
			{
					if(addresses.Status.code != 200) 
					{
						alert("failed to find an address for " + point.toUrlValue());
					}
					else 
					{
						address = addresses.Placemark[0];
						myHtml = address.address;
						map.openInfoWindow(point, myHtml);
						coorAddressArr[coorAddressArr.length] = [lat,lon,myHtml];
						if(myHtml !="")
						{
							var ele = document.createElement("DIV");
							ele.lat = lat;
							ele.lon = lon;
							ele.className = "routeDetails";
							ele.innerHTML = myHtml;
							document.getElementById("routeDetails").appendChild(ele);
						}
					}
					});
		}
			coorArr[coorArr.length]=[lat,lon];
		}
		else
		{

			var message = "<b>Error extracting info from</b>:" + point + ""; 
		}
		

		//marker.openInfoWindowHtml(message);
		
	}
};
function showPath()
{

	    gdir.loadFromWaypoints(coorArr,{ getSteps:true});
};

function removeLatLon(lat,lon)
{
	for(var i=0;i<coorArr.length;i++)
		if(coorArr[i][0] == lat && coorArr[i][1]==lon)
			coorArr.splice(i,1);
	for(var i=0;i<coorAddressArr.length;i++)
		if(coorAddressArr[i][0] == lat && coorAddressArr[i][1] == lon)
			coorAddressArr.splice(i,1);
	var ele = document.getElementById("routeDetails");
	for(var i=0;i<ele.childNodes.length;i++)
	{
		if(ele.childNodes[i]);
		if(ele.childNodes[i].lat == lat && ele.childNodes[i].lon == lon)
			ele.removeChild(ele.childNodes[i]);
	}
		


};



function showAddress(address,callbackfunc)
{
	this.getLatLon = showAddress.getLatLon;
	this.callbackfunc = callbackfunc
	if (geocoder) {
	geocoder.getLatLng(address,
			function(point) 
			{
				if (!point) 
				{
					alert(address + " not found");
				} 
				else 
				{
					var latA = point.y ;
					var lonA = point.x ;
					initializemap(latA,lonA,10)

				}
			}
		);
	}

};

//end new start

    function setDirections(fromAddress, toAddress,viaPlace, locale) {
	    if(fromAddress == "")
	    {
		    alert("Please fill in the start place");
		    document.route.fromAddress.focus();
		    return false;
	    }
	    if(toAddress =="")
	    {
		    alert("Please fill in the end place");
		    document.route.toAddress.focus();
		    return false;
	    }
	    //checkroutesInfo();
	    showPath();

    }

    function handleErrors(){
	   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	     alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
	   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
	   
	   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);

	//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
	//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
	     
	   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

	   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	     alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
	    
	   else alert("An unknown error occurred.");
	   
	}

	function onGDirectionsLoad()
	{
		    var objJsonCoord = '{\"coord\":[';
		    var objJsonText = '{\"txt\":[';
		    var objJsonDist = '{\"dis\":[';

		for(var i=0;i< coorArr.length;i++)
		{
		       	    var step = i;
			    var coord = coorArr[i];
			    var steptext = coorAddressArr[i][2];
			    steptext = steptext.replace(new RegExp( "\\n", "g" ), " " );			    
			    if(objJsonCoord != "{\"coord\":[")
				    objJsonCoord+=",";
			    if(objJsonText != "{\"txt\":[")
				    objJsonText+=",";
			    if(i>=1)
				    if(coorAddressArr[i][2] == coorAddressArr[i-1][2])
					    steptext="Continue on "+steptext;
		    objJsonCoord+="{\"s\":\""+i+"\",\"la\":\""+coord[0]+"\",\"lo\":\""+coord[1]+"\",\"t\":\""+addslashes(steptext)+"\"}";
		}
		objJsonCoord+=']}';
		objJsonText+=']}';
		objJsonDist+=']}';
		document.getElementById("routDescCoord").value = objJsonCoord;
	}
	function onGDirectionsLoadSearch()
	{
	var polyline = gdir.getPolyline();          
        var boxes = routeBoxer.box(polyline, distance);
	if(boxes.length > 0)
	{
		var objJsonCoord = '{\"coordBox\":[';
		for(var i=0;i<boxes.length;i++)
		{

		    if(objJsonCoord != "{\"coordBox\":[")
			objJsonCoord+=",";
		     objJsonCoord+="{\"s\":\""+i+"\",\"swla\":\""+boxes[i].getSouthWest().lat()+"\",\"swlo\":\""+boxes[i].getSouthWest().lng()+"\",\"nela\":\""+boxes[i].getNorthEast().lat()+"\",\"nelo\":"+"\""+boxes[i].getNorthEast().lng()+"\"}";
		}
		    


	}
	else
	{
		    var objJsonCoord = '{\"coord\":[';
		    for(var i=0;i< coorArr.length;i++)
	            {
			    var coord = coorArr[i];
			    if(objJsonCoord != "{\"coord\":[")
				    objJsonCoord+=",";
			     objJsonCoord+="{\"s\":\""+i+"\",\"la\":\""+coord[0]+"\",\"lo\":\""+coord[1]+"\"}";
		    }

	}
		objJsonCoord+=']}';
		document.getElementById("routDescCoord").value = objJsonCoord;
	}

function toggleRoutes()
{
	var routes = document.getElementById("routes");
	if(routes.style.display =="none")
		routes.style.display = "";
	else if(routes.style.display == "")
		routes.style.display ="none";
}
function enableVehicalDesc()
{
	var obj = document.forms[0];
	var flag = true;
	if(obj.uTransport.value == "uvhclInUse") flag=false;
	else	flag=true;

	for(var eleCnt=0;eleCnt < obj.elements.length;eleCnt++)
		if(obj.elements[eleCnt].getAttribute('type'))
			if(obj.elements[eleCnt].getAttribute('type')=="v")
				obj.elements[eleCnt].disabled = flag;
		
}

function showRoutes()
{

	for(var routes in  routesDesc['routes'])
		for(var route in  routesDesc['routes'][routes])
			for(var routeNo in  routesDesc['routes'][routes][route])
			{
				var id = routesDesc['routes'][routes][route][routeNo].id;
				idArr[idArr.length]=id;
				var start = routesDesc['routes'][routes][route][routeNo].s;
				var end = routesDesc['routes'][routes][route][routeNo].e;
				var coords = routesDesc['routes'][routes][route][routeNo].coords;
				var steptext = routesDesc['routes'][routes][route][routeNo].txt;
				var stepdistance = routesDesc['routes'][routes][route][routeNo].dist;
				if(steptext)
					setStepText(id,steptext,stepdistance,start,end);

			}
	
};

function setStepText(id,steptext,stepdist,start,end)
{

	var routeId = document.getElementById(id)	
	routeId.s = start;
	routeId.e = end;
	for(var a in steptext)
		for(var b in steptext[a])
		{
			var text = steptext[a][b].t;
			var stepno = parseInt(steptext[a][b].s)+1;
			var stepDiv = document.createElement("DIV");
			stepDiv.setAttribute("class","routeDesc");
			stepDiv.innerHTML = text;
			routeId.childNodes[0].style.display="";
			routeId.childNodes[0].appendChild(stepDiv);
	
		}
	
}
function showMessage(id)
{
	var id = document.getElementById(id);
	if(id)
	{
		if(id.style.display == "none")
			id.style.display ="";
		else if(id.style.display =="")
			id.style.display = "none";
	}

}
function showRouteDetails(id)
{
	var routeId = document.getElementById(id);
	while(routeId.childNodes[0].childNodes.length >0)
		routeId.childNodes[0].removeChild(routeId.childNodes[0].childNodes[0]);

	for(var i=0;i<idArr.length;i++)
		if(document.getElementById(idArr[i]))
			document.getElementById(idArr[i]).childNodes[0].style.display = "none";
	for(var i in routesDesc["routes"])
		for(var routeid in routesDesc["routes"][i])
		{
			idArr[idArr.length] = id;
			if(routesDesc["routes"][i][routeid][0]["id"] == id)
			{
				var start = routesDesc["routes"][i][routeid][0]["s"];
				var end = routesDesc["routes"][i][routeid][0]["e"];
				var steps = routesDesc["routes"][i][routeid][0]["coords"]["coord"];
				for(var step in steps)
				{
					var stepno = steps[step]["s"];
					var stepText = steps[step]["t"];
					var lat = steps[step]["la"];
					var lon = steps[step]["lo"];
					var no = document.createElement("DIV");
					no.setAttribute("class","routes");
					no.innerHTML = stepno;
					var tex = document.createElement("DIV");
					tex.setAttribute("class","routes");
					tex.innerHTML = stepText;
					var clea = document.createElement("DIV");
					clea.setAttribute("class","clear");
					document.getElementById(id).childNodes[0].appendChild(no);
					document.getElementById(id).childNodes[0].appendChild(tex);
					document.getElementById(id).childNodes[0].appendChild(clea);
				}
				document.getElementById(id).childNodes[0].style.display = "";

			}
		}


}

function placeError(frmName,pdL)
{
	for(var i=0;i<frmName.elements.length;i++)
	{
		if(objJSon[frmName.elements[i].name])
		{
			var obj= objJSon[frmName.elements[i].name];
			if(obj[0]["type"] == "1")
			{
				var errEle = document.createElement("DIV");
				errEle.setAttribute("class","error");
				errEle.setAttribute("style","padding-left:"+pdL);
				errEle.innerHTML = obj[0]["value"];
				frmName.elements[i].parentNode.appendChild(errEle);
			}
			else if(obj[0]["type"] == "0")
			{
				if(frmName.elements[i].disabled )
					frmName.elements[i].disabled = false;
				if(frmName.elements[i].type =="textarea")
					frmName.elements[i].innerHTML =  obj[0]["value"];
				else
					frmName.elements[i].value = obj[0]["value"];

			}

		}
	}
}

function stationSelect(id,val,csscla,fl)
{
	var eleSel = document.createElement("SELECT");
	eleSel.className = csscla;
	for(var key in statnsJson)
	{
		var eleOption = document.createElement("OPTION");
		eleOption.value = parseInt(key);
		eleOption.innerHTML = statnsJson[key];
		eleSel.appendChild(eleOption)
	}
	var arrow = document.createElement("DIV");
	if(fl) arrow.className="fl";
	else arrow.className = "fr";
	arrow.id = id;
	arrow.value = val;
	arrow.cla = csscla;
	arrow.fl = fl;
	arrow.onclick = function()
	{
		stationSelect(this.id,this.value,this.cla,this.fl);
	};
	arrow.appendChild(document.createElement("DIV"))
	arrow.appendChild(document.createElement("DIV"))
	arrow.childNodes[0].innerHTML = "(+)";
	if(csscla == "startstationsSel")
	arrow.childNodes[1].innerHTML = "----->";	
	else 
	arrow.childNodes[1].innerHTML = "<-----";	
	document.getElementById(id).appendChild(eleSel);
	document.getElementById(id).appendChild(arrow);
}

function collectRoute()
{
	var returnstations = document.getElementById("uReturnStations");
	var startstations = document.getElementById("uStartStations");
	var startstationstext ="";
	var returnstationstext ="";
	for(var i=0;i<startstations.childNodes.length;i++)           
	{            
		if(startstations.childNodes[i].type)
		{
			if(startstationstext != "")
				startstationstext +=":"+startstations.childNodes[i].value;
			else
				startstationstext +=startstations.childNodes[i].value

		}
	}	
	for(var i=0;i<returnstations.childNodes.length;i++)           
	{            
		if(returnstations.childNodes[i].type)
		{
			if(returnstationstext != "")
				returnstationstext +=":"+returnstations.childNodes[i].value;
			else
				returnstationstext+=returnstations.childNodes[i].value

		}
	}
	document.route.uStartStations.value = startstationstext;
	document.route.uReturnStations.value = returnstationstext;
	return true;

}

function callAJAX(req ,method ,params , resfunc)
{

	var xmlHttpReq = false;
	var self = this;
	// Mozilla/Safari
	if (window.XMLHttpRequest) {
		self.xmlHttpReq = new XMLHttpRequest();
	}
	// IE
	else if (window.ActiveXObject) {
		self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	self.xmlHttpReq.open(method, req+params, true);
	self.xmlHttpReq.onreadystatechange = function() {
		if (self.xmlHttpReq.readyState == 4) {
			ddupdatepage(self.xmlHttpReq.responseText);
                        eval("resfunc("+self.xmlHttpReq.responseText+")")
				
		}
	}
	self.xmlHttpReq.send();


}
function addslashes(str) {
	//str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	//str=str.replace(/\0/g,'\\0');
	return str;
}
function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\0/g,'\0');
	str=str.replace(/\\\\/g,'\\');
	return str;
}


function removeHTMLTags(str){
	if(str !="")
	{
		var strInputCode = str;
		strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
				return (p1 == "lt")? "<" : ">";
				});
		var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
		return  strTagStrippedText;
	}
} 

function __createElement(tag, cls, id, name)
{
	var ele;
	ele = document.createElement(tag);
	if(cls != "")
		ele.className = cls;
	if(id != "")
		ele.id = id;
	if(name != "")
		ele.name = name;
	return ele;
};


