// JavaScript Document

function initNav(){
	var imgObj;	
	for(i=0;i<navImgHoverArr.length;i++){
		imgObj = new Image();
		imgObj.src = navImgHoverArr[i];
	}
}

function navOver(navImgID, srcOver){
	document.getElementById(navImgID).src=srcOver;
}
function navOut(navImgID, srcOut){
	document.getElementById(navImgID).src=srcOut;	
}

function delConfirm_func(url){	
	if (confirm("Are you sure you want to delete this?")){
		location.href=url
	}
}

// captcha function
function refreshCaptchaImage(valImageId) {
	var objImage = document.images[valImageId];
	if (objImage == undefined) {
		return;
	}
	var now = new Date();
	objImage.src = objImage.src.split('?')[0] + '?x=' + now.toUTCString();
}

function addZero_func(no,noZeros){
	var res = ""
	if (no.toString().length < noZeros){
		for(i=no.toString().length;i<=noZeros;i++){
			res += "0";
		}
	}
	res += no;
	return res;
}

// **** Open Browser Window ****
function openWindow_func(url, wname, topleft, fullscreen, appw, apph, scroll) {
	fscreen = (fullscreen == 1)?"fullscreen":"";	
	if (topleft == 1){
		screenx = 0
		screeny = 0
	} else {
		screenx = (screen.width - appw)/2
		screeny = (screen.height - apph)/2
	}
	newWin = window.open(url, wname, "toolbar=no,status=yes,"+fscreen+",scrollbars="+scroll+",resizable=yes,menubar=no,width="+appw+",height="+apph+",left="+screenx+",top="+screeny+", maximize=yes");
	//return newWin;
}

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 setStyle_func(obj, stylevar, styleval){
	if (navigator.userAgent.toLowerCase().indexOf("msie") > -1){
		obj.style[stylevar]=styleval;
	} else {
		obj.style[stylevar]=styleval;
	}
}

function search_func(crit){
	location.href="search.asp?s="+crit;
}

function enterKeySearch_func(e, urlORfrm){	
	var characterCode
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e
		characterCode = e.which //character code is contained in NN4's which property
	} else{
		e = event
		characterCode = e.keyCode //character code is contained in IE's keyCode property
	}
	if (characterCode == 13){
		if (urlORfrm.name){
			urlORfrm.submit();
		} else {
			location.href=urlORfrm;
		}
	}
}

function replaceTxt_func(txtStr,replaceSelStr,replaceWithTxt){
	return txtStr.split(replaceSelStr).join(replaceWithTxt);
}

function decPlaces(no,noDecPlaces){
	return Math.round(no*Math.pow(10,noDecPlaces))/Math.pow(10,noDecPlaces);
}


function db2frm(dbValArr,frmObjArr,frm){ // Loads database values into a specified form
	var dbArrLen = dbValArr.length;
	for(i=0;i<dbArrLen;i++){
		if (frm[frmObjArr[i]]){
			if (frm[frmObjArr[i]].type == undefined){ // radio
				radSet_func(frm[frmObjArr[i]], dbValArr[i]);
			} else if (frm[frmObjArr[i]].type == "text" || frm[frmObjArr[i]].type == "textarea" || frm[frmObjArr[i]].type == "hidden"){
				frm[frmObjArr[i]].value = dbValArr[i];
			} else if (frm[frmObjArr[i]].type.indexOf("check") != -1){
				frm[frmObjArr[i]].checked=(dbValArr[i] != 0)?true:false;
				//alert(frmObjArr[i]+" "+frm[frmObjArr[i]].checked)
			} else if (frm[frmObjArr[i]].type == "select"){
				sel_func(frm[frmObjArr[i]], dbValArr[i]);
			}
		}
	}
}

// ******* FORM FUNCTIONS *******
function radValidate_func(radGroup){// Checks to see if a radio group has been checked
	rL = radGroup.length;
	radChked=0;
	for(a=0;a<rL;a++){
		if (radGroup[a].checked){
			radChked=1;
		}
	}
	if (radChked==1){
		return true;
	} else {
		return false;
	}
}

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 radSet_func(radObj, radVal){ // Sets the radiobox group based on a radiobox value
	radL = radObj.length;
	for(p=0;p<radL;p++){
		if (String(radObj[p].value)==String(radVal)){
			radObj[p].checked=true;
			break;
		}
	}
}

function radHasVal_func(radObj, radVal){ // Checks whether the radiobox group has is checked on the given value
	var res=false;
	radL = radObj.length;
	for(p=0;p<radL;p++){
		if (String(radObj[p].value)==String(radVal) && radObj[p].checked){
			res=true;
		}
	}
	return res;
}

function radioListChecked_func(radGroupName){ // Checks if a radiobox group is checked
	radChecked=false;
	radObj = document.forms[0][radGroupName];
	l = radObj.length;
	for(i=0;i<l;i++){
		if (radObj[i].checked){
			radChecked=true;
		}
	}
	return radChecked;
}

function radSelIndex_func(radObj){ // Checks whether the radiobox group has is checked on the given value
	var radIndex=-1;
	radL = radObj.length;
	for(p=0;p<radL;p++){
		if (radObj[p].checked){
			radIndex=p;
		}
	}
	return radIndex;
}

// *************************** //




// ***** JOURNEY PLANNER FUNCTIONS ******

function gotoCyclePlanner_func(to, from){
	window.open("http://www.dundeetravelinfo.com/dcccyclepl/bin/query.exe/en?S="+from+"&Z="+to)
}

function gotoWalkPlanner_func(to, from){
	window.open("http://www.dundeetravelinfo.com/dccwalkpl/bin/query.exe/en?S="+from+"&Z="+to)
}

function gotoWalkOrCyclePlanner_func(frm, to, from){
	if (frm.walkcycle[1].checked) {
		gotoCyclePlanner_func(to, from);
	} else {
		gotoWalkPlanner_func(to, from);
	}	
}


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 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.innerHTML = "<img src='images/aniloader.gif' alt='Loading...' /> Loading..."
	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();
}

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 gotoMarker_func(pt){
	map.setCenter(pt, 16);
}

function sendmlHttpRequest(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 */
}

var XMLHttpFactories = [
	function () {return new XMLHttpRequest()},
	function () {return new ActiveXObject("Msxml2.XMLHTTP")},
	function () {return new ActiveXObject("Msxml3.XMLHTTP")},
	function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
	var xmlhttp = false;
	for (var i=0;i<XMLHttpFactories.length;i++) {
		try {
			xmlhttp = XMLHttpFactories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

// *** UPLOAD FUNCTIONS START ***
function selectImg(obj,imgsrc){
	if (obj.parentNode){
		if (imgsrc == ''){
			document.getElementById('selectedphoto').innerHTML = "No image selected.";
			document.getElementById('uploadimgname').value="";
		} else {
			document.getElementById('selectedphoto').innerHTML = "<img src='images/"+imgsrc+"' />"
			document.getElementById('uploadimgname').value=imgsrc;
		}
		obj.parentNode.style.visibility='hidden';
		obj.parentNode.style.position='absolute';
	}
}

function startUpload(){
	document.getElementById('upload_process').style.visibility='visible';
	document.getElementById('upload_process').style.position='relative';
	document.getElementById('upload_result').innerHTML = '';
	return true;
}

function listImagesResult(req){
	var listObj = document.getElementById('frmphotos');
	listObj.innerHTML = req;
	document.getElementById('aniloader').style.visibility='hidden';
	document.getElementById('aniloader').style.position='absolute';
}

function listImages(path){
	document.getElementById('aniloader').style.visibility='visible';
	document.getElementById('aniloader').style.position='relative';
	sendmlHttpRequest("ajaxlistimages.asp",listImagesResult, "start=1&path="+path);
	var listObj = document.getElementById('frmphotos');
	listObj.style.visibility='visible';
	listObj.style.position='relative';
}

function fileUploadedRes(res){
	document.getElementById('upload_process').style.visibility='hidden';
	document.getElementById('upload_process').style.position='absolute';
	if (Number(res) == 1){
		document.getElementById('upload_result').innerHTML = 'Uploaded file successfully!';
	} else {
		document.getElementById('upload_result').innerHTML = '<span class="reserror">There was an error uploading.</span>';
	}
}
// *** UPLOAD FUNCTIONS END ***



// **** CALORIE CALCULATIONS 

function weightCal(obj){
	var weightStone = document.getElementById('weightstone').value;
	var weightIbs = document.getElementById('weightibs').value;
	var weightKg = document.getElementById('weightkg').value;
	var objWeightKg = document.getElementById('weightkg');
	if (obj.name != "weightkg"){
		objWeightKg.value = Math.round((Number(weightStone*14)+Number(weightIbs))/2.2); // 2.2 Ibs per Kilo
	} else {
	}
}

function weightCal2(obj){
	var objWeightStone = document.getElementById('weightstone');
	var objWeightIbs = document.getElementById('weightibs');
	var objWeightKg = document.getElementById('weightkg');
	if (!isNaN(objWeightKg.value)){
		var stone = Math.floor((objWeightKg.value*2.2)/14);
		var Ibs = Math.round(((objWeightKg.value)*2.2)-(stone*14));
		sel_func(objWeightStone,stone);
		sel_func(objWeightIbs,Ibs);
		weightCal(obj);
	} else {
		weightCal(obj);
	}
}

function heightCal(obj){	
	var heightFeet = document.getElementById('heightfeet').value;
	var heightInch = document.getElementById('heightinch').value;
	var heightCm = document.getElementById('heightcm').value;
	var objHeightCm = document.getElementById('heightcm');
	if (obj.name != "heightcm"){
		objHeightCm.value = Math.round((Number(heightFeet*12)+Number(heightInch))*2.5); // 2.5 cm per inch
	}
}
function heightCal2(obj){
	var objHeightFeet = document.getElementById('heightfeet');
	var objHeightInch = document.getElementById('heightinch');
	var objHeightCm = document.getElementById('heightcm');	
	if (!isNaN(objHeightCm.value)){		
		var feet = Math.floor((objHeightCm.value*(1/2.5))/12);
		var inch = Math.round(((objHeightCm.value)*(1/2.5))-(feet*12));
		sel_func(objHeightFeet,feet);
		sel_func(objHeightInch,inch);
		heightCal(obj)
	} else {
		heightCal(obj);
	}
}

function calcCals(frm){
	//weightCal(frm.calcweight);
	// Calories burned by exercise = ((METs * 3.5 * weightKg) / 200) * timeMin.
	var miles2KmFactor = 1.60934
	var metFactor = 2
	var cals = 0;
	var dist;
	var pace = frm.calcspeed.value; // mph
	var mode = frm.calcmode.value; 
	var weight = (frm.calcweightunits == "kg")?frm.calcweight.value:frm.calcweight.value/2.2; // kg
	if (frm.calcdistunits.value == "miles"){
		dist = frm.calcdist.value*1000*miles2KmFactor;
	} else {
		dist = frm.calcdist.value*1000;
	}
	if (Number(pace) == 2) {
		metFactor = 2
	} else if (Number(pace) == 3.5) {
		metFactor = 4.2
	} else if (Number(pace) == 5) {
		metFactor = 8
	}
	if (mode == "cycle"){
		metFactor = metFactor * 1.2
		pace = Number(pace)*4;
	}
	cals = ((Number(metFactor) * 3.5 * Number(weight))/200)*(Number(dist)/(Number(pace)*Number(miles2KmFactor)*1000*(1/60)))	
	document.getElementById('calcres').innerHTML = Math.round(cals) +" calories";
}