var latStart = 56.421;
var lngStart = -3.695;

function sel_func(selObj, selVal){ // Positions the select object at given index
	selL = selObj.length;
	for(p=0;p<selL;p++){
		if (String(selObj.options[p].value)==String(selVal)){
			selObj.selectedIndex=p;
			break;
		}
	}
}

function txtboxInit(txtboxObj, initVal){
	if (txtboxObj.value == initVal){
		txtboxObj.value = '';		
	}
	if (txtboxObj.className.substr(txtboxObj.className.length-4,4) == "init"){
		//txtboxObj.className = txtboxObj.className.substr(0,txtboxObj.className.length-4);// Bug in IE
		txtboxObj.style.color='#003366';
	} else if (txtboxObj.className.substr(txtboxObj.className.length-4,4) == "warn"){
		txtboxObj.style.color='#003366';
	}
}

function addZero(str){
	var res = str;	
	if (str.toString().length <= 1){
		res = "0"+str;
	}
	return res;
}
function inputIsPostcode(postcodetxt){
	var isFullPostcode = true;
	if (postcodetxt.length >=5 && postcodetxt.length <= 9){
		if (!isNaN(postcodetxt.substr(0,1))){
			isFullPostcode = false;
		}
		if (postcodetxt.indexOf(" ") == -1){
			postcodetxt = postcodetxt.substr(0,postcodetxt.length-3)+" "+postcodetxt.substr(postcodetxt.length-3,3);
		}
		postcode2ndPart = postcodetxt.substr(postcodetxt.length-3,3);
		if (isNaN(postcode2ndPart.substr(0,1))){ // first number of second part of postcode has to be a number
			isFullPostcode = false;
		}
		if (!isNaN(postcode2ndPart.substr(1,1)) || !isNaN(postcode2ndPart.substr(2,1))){  // second and third numbers of second part of postcode has to be a letters
			isFullPostcode = false;
		}
	} else {
		isFullPostcode = false;
	}
	return isFullPostcode;
}

function addPostcodeSpace(postcodetxt){	
	if (postcodetxt.indexOf(" ") == -1){		
		postcodetxt = postcodetxt.substr(0,postcodetxt.length-3)+" "+postcodetxt.substr(postcodetxt.length-3,3);
	}
	return postcodetxt;
}

function showloader_func(){
	var windowHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
	scroll(0, 0);
	loaderObj = document.getElementById('loader');
	loaderObj.style.visibility='visible';
	loaderObj.style.position='fixed';
	loaderObj.style.width=document.body.clientWidth+'px';
	loaderObj.style.height=windowHeight+'px';

	loaderObj = document.getElementById('loaderbg');
	loaderObj.style.width=document.body.clientWidth+'px';
	loaderObj.style.height=windowHeight+'px';
	loaderObj.style.visibility='visible';
	loaderObj.style.position='fixed';
	//writehtml_func();
}

// *** MAP FUNCTIONS START ***
function showMap(xy, mapScale){
	var windowHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
	mapBg = document.getElementById('mapbg');
	mapBg.style.visibility='visible';
	mapBg.style.display='block';
	mapBg.style.position='fixed';
	mapBg.style.width=document.body.clientWidth+'px';
	mapBg.style.height=windowHeight+'px';	

	var mapcontainer = document.getElementById("mapcontainer");
	mapcontainer.style.display="block";
	var mapObj = new GMap2(document.getElementById("map"));
	mapObj.setCenter(new GLatLng(latStart,lngStart), 9);
	mapObj.addControl(new GMapTypeControl());
	mapObj.addControl(new GSmallMapControl());
	mapObj.addControl(new GScaleControl());
	return mapObj;
}

function showJourneyMap(pts,xy){	
	var mapObj = showMap(xy, 9);
	var mapcontainer = document.getElementById("mapcontainer");
	
	var ptsLen = pts.length;
	var ptLatLng;
	var ptLatLngArr = [];
	var marker;		
	for(i=0;i<ptsLen;i++){
		pt = new GLatLng(pts[i][1],pts[i][2]) 
		//alert(LatLonWGS842OS_func(pt.lat(),pt.lng()).easting);
		//ptLat = OS2LatLonWGS84_func(formatOScoords(pts[i][1]),formatOScoords(pts[i][2])).lat;		
		ptLatLng = new GLatLng((OS2LatLonWGS84_func(formatOScoords(pts[i][1]),formatOScoords(pts[i][2]))).lat, (OS2LatLonWGS84_func(formatOScoords(pts[i][1]),formatOScoords(pts[i][2]))).lng); 
		ptLatLngArr.push(ptLatLng);
		marker = new GMarker(ptLatLng,{icon:getGIcon_func("images/mapicons/no"+(i+1)+".png"), title:(i+1)+") "+pts[i][0]});		
		marker.i = i;
		mapObj.addOverlay(marker);
		//mapObj.addOverlay(new GMarker(ptLatLng));
		GEvent.addListener(marker, 'mouseup', function(point) {
			this.openInfoWindow("<div style='width:200px;text-align:left;'><img src='images/mapicons/no"+(this.i+1)+".png' align='absmiddle' />  "+pts[this.i][0]+"</div>");
		});
	}
	
	
	var polyline = new GPolyline(ptLatLngArr, "#0090ae", 6);
	mapObj.addOverlay(polyline);
		
	ptLatLng = new GLatLng((OS2LatLonWGS84_func(formatOScoords(xy[0]),formatOScoords(xy[1]))).lat, (OS2LatLonWGS84_func(formatOScoords(xy[0]),formatOScoords(xy[1]))).lng); 
	mapObj.setCenter(ptLatLng, 14);
	
}

function closeMap(){
	GUnload();
	var mapObj = document.getElementById("mapcontainer");	
	mapObj.style.display="none";
	var mapBg = document.getElementById("mapbg");	
	mapBg.style.display="none";
}

function getGIcon_func(iconurl) {
	var icon = new GIcon();
	icon.image = iconurl;
	icon.shadowSize = new GSize(40, 32);
	icon.iconSize = new GSize(24, 32);
	icon.iconAnchor = new GPoint(12, 32);
	icon.infoWindowAnchor = new GPoint(12, 0);
	return icon;
}

function formatOScoords(coord){
	return coord.toString().substr(0,6);
	
}

// *** MAP FUNCTIONS END ***



function radioListCheckedVal_func(frm,radGroupName){ // Gets radiobox selected value
	res = "";
	var radObj = frm[radGroupName];
	l = radObj.length;
	for(i=0;i<l;i++){
		if (radObj[i].checked){
			res = radObj[i].value;
		}
	}
	return res;
}

function sendXmlHttpRequestPost(url,callback,postdata) {	
	var xmlhttp=false;
	try  {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); /* for IE < 5 */
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}

	/* mozilla & opera */
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest();
	}

	xmlhttp.open("POST",url,true);
	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
	xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			callback(xmlhttp.responseText);
			//alert(xmlhttp.responseText);
		} else if(xmlhttp.readyState == 4 && xmlhttp.status != 200) {
			alert("Error:\n"+xmlhttp.error);
		}
	}
	xmlhttp.send(postdata); /* are sending null because we dont have any data to post */
}

function sendXmlHttpRequestGet(url,callback,callbackParam,getdata) {	// callbackParam is an array
	var xmlhttp=false;
	try  {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); /* for IE < 5 */
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}

	/* mozilla & opera */
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
		xmlhttp = new XMLHttpRequest();
	}
	xmlhttp.open("GET",url,true);
	xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
			callback(xmlhttp.responseText, callbackParam);
			//alert(xmlhttp.responseText);
		} else if(xmlhttp.readyState == 4 && xmlhttp.status != 200) {
			//alert("Error:\n"+xmlhttp.error);
			window.status = 'http request aborted.';
		}
	}
	xmlhttp.send(getdata); /* are sending null because we dont have any data to post */
}

// ***** JOURNEY PLANNER FUNCTIONS ******

function gotoRAC(from,to){
	window.open("http://www.rac.co.uk/route-planner/results/?qs_1="+from+"&qs_3=&qs_2=&qs_4="+to+"&countryCode_4=UK&countryCode_1=UK&countryCode_3=UK&countryCode_2=UK&rpref=true&optimizeIntermediates=true&mapType=interactive&rtype=true&jsOption=1", "winRAC")
}

function jpStartAgain(){	
	location.href="jplanner1.asp";
}

function gotoJPlanner(fromtxt,totxt){
	frm = document.getElementById('minijplanner');
	frm.addrfrom.value = fromtxt;
	frm.addrto.value = totxt;
	frm.submit();
}

function jpTimesEarlier(){
	showloader_func();
	location.href="jplanner3.asp?planjourney=1&earlier=1"
}

function jpTimesLater(){
	showloader_func();
	location.href="jplanner3.asp?planjourney=1&later=1"
}

function showOnMap(mode,markerID,fromOSX,fromOSY,toOSX,toOSY,txt){
	var ptFrom = OS2LatLonWGS84_func(fromOSX,fromOSY);
	ptFrom = new GLatLng(ptFrom.lat, ptFrom.lng);
	var ptTo = OS2LatLonWGS84_func(toOSX,toOSY);
	ptTo = new GLatLng(ptTo.lat, ptTo.lng);
	if (mode == "walk"){
		imageUrl = "images/mapicon_walk.png";
		lineColor = "#817bb9";
	} else if (mode == "rail"){
		imageUrl = "images/mapicon_rail.png";
		lineColor = "#67bc77";
	} else if (mode == "bus" || mode == "coach"){
		imageUrl = "images/mapicon_bus.png";
		lineColor = "#f17278";
	}
	
	map.addOverlay(new GPolyline([ptFrom, ptTo], lineColor, 6, 0.6, {geodesic:true}));
	
	// Create our marker icon
	var icon = new GIcon();
	icon.image = imageUrl
	icon.shadow = "images/mapicon_sqshad.png";
	icon.iconSize = new GSize(45, 47);
	icon.shadowSize = new GSize(60, 41);
	icon.iconAnchor = new GPoint(0, 47);
	//icon.infoWindowAnchor = new GPoint(5, 1);	
	
	
	addJMarker2Map(ptFrom,16,icon,markerID,imageUrl,txt);
}

function gotoMarker_func(pt){
	map.setCenter(pt, 16);
}


function refreshNextBuses(num2show,naptanCode){
	getNextBuses(naptanCode, currServiceNo, currResObj, currLoaderObj);
}


var currNaptanCode
var currServiceNo
var currResObj
var currLoaderObj
function getNextBuses(naptanCode, serviceNo, resObj, loaderObj){
	//alert(naptanCode+" ,"+resObj+", "+loaderObj)
	if (naptanCode != undefined && naptanCode != ""){
		currNaptanCode = naptanCode
		currServiceNo = serviceNo
		currResObj = resObj
		currLoaderObj = loaderObj
	} else {
		naptanCode = currNaptanCode
		serviceNo = currServiceNo
		resObj = currResObj
		loaderObj = currLoaderObj	
	}
	realTimeResultsObj = resObj;
	realTimeLoaderObj = loaderObj;
	if (loaderObj != undefined){
		loaderObj.style.display="inline";
	}
	if (naptanCode != ""){
		sendXmlHttpRequestGet("data/nextbuses/?naptan="+naptanCode+"&serviceno="+serviceNo,getNextBusesResult,{results:resObj,loaderObj:loaderObj},"");
	}
}

function getNextBusesResult(res,objs){
	if (objs.results == undefined){
		alert("error loading...\nResults object is undefined")
	}
	objs.loaderObj.style.display="none";
	objs.results.innerHTML = res;
}


function appendToSelectObj(selectObj, optTxt, optVal) {
	var elOptNew = document.createElement('option');
	elOptNew.text = optTxt;
	elOptNew.value = optVal;
	try {
		selectObj.add(elOptNew, null); // standards compliant; doesn't work in IE
	} catch(ex) {
		selectObj.add(elOptNew); // IE only
	}
}

function appendToSelectObj2(selectObj, optTxt, optVal) {
	var elOptNew = document.createElement('option');
	elOptNew.text = optTxt;
	elOptNew.value = optVal;
	if (navigator.userAgent.toLowerCase().indexOf("msie") > -1) {
		selectObj.add(elOptNew); // IE only		
	} else {
		selectObj.add(elOptNew, null); // standards compliant; doesn't work in IE		
	}
}


function getXmlNodeVal(xmlObj){
	if (xmlObj.firstChild == null){
		return "";
	} else {
		return xmlObj.firstChild.nodeValue
	}
}

var streetviewObj;
function selectStreetView(streetviewID, lat, lng){
	var pt = new GLatLng(lat,lng);
	document.getElementById(streetviewID).style.display="block"
	streetviewObj = new GStreetviewPanorama(document.getElementById(streetviewID), {latlng:pt});

	//setTimeout(function(){alert("O");streetviewObj.remove()},100000);
	GEvent.addListener(streetviewObj, "error", handleNoFlash);
}

function handleNoFlash(errorCode) {
	if (errorCode == 603) {
	alert("Error: Flash doesn't appear to be supported by your browser");
	return;
	}
}  

function closeStreetView(streetviewID){
	streetviewObj.remove();
	document.getElementById(streetviewID).style.display="none";
}

