function changeFrame(frameurl) {
	if (!frameurl.match("http://")) frameurl = "http://" + frameurl;
	if (!frameurl.match("visitcount")) {
		frameurl = frameurl + "&visitcount=1";
	} else {
		visitpos=frameurl.indexOf('visitcount');
		if(frameurl.substring(visitpos,visitpos+13).trim!="visitcount=1") {
			frameurl=frameurl.substring(0,visitpos) + "visitcount=1";
		}
	}
	frames['geocheckerFrame'].location.href=frameurl;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function switchCoordInput() {
	if (readCookie('geo_oneField')===null) 
		createCookie('geo_oneField',1,365);
	else 
		eraseCookie('geo_oneField');
	window.location.reload(true);
}

function confirmReset(name,gid) {
	var answer = confirm(getterm("confirmResetStats") + " " + name + "?");
	if (answer) {
		window.location="geo_resetstats.php?gid=" + gid;
	}
}

function confirmWpDeletion(id,msg) {
	var answer = confirm(getterm("confirmDeletion") + " " + msg + "?");
	if (answer) {
		window.location = "geo_delwp.php?i="+id; 
	}
}

function confirmCacheDeletion(gid,name) {
	var answer = confirm(getterm("confirmDeletion") + " " + name + "?");
	if (answer) {
		window.location = "geo_delcache.php?i="+gid; 
	}
}

function confirmTermDeletion(term,id) {
	var answer = confirm("Are you sure you want to delete the term '" + term + "'?");
	if (answer) {
		window.location = "geo_transadm.php?action=delterm&id="+id; 
	}
}

function confirmPicDeletion() {
	var answer = confirm(getterm("confirmPictureDeletion") + "?");
	if (answer) {
		window.location = "geo_delpic.php"; 
	}
}
	
function emptyField(field,msg) {
	with (field) {
		if (value==null||value=='') {
			alert(msg);
			focus();
			return false;
		} else {
			return true;
		}
	}
}

function isNumeric(field) {
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   
   with (field) {	
	   for (i = 0; i < value.length && IsNumber == true; i++) { 
		  Char = value.charAt(i); 
		  if (ValidChars.indexOf(Char) == -1) {
			 IsNumber = false;
		  }
	   }
	   return IsNumber;
	}
}

function isnum(chkvar) {
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   
   for (j = 0; j < chkvar.length && IsNumber == true; j++) { 
	  Char = chkvar.charAt(j); 
	  if (ValidChars.indexOf(Char) == -1) {
		 IsNumber = false;
	  }
   }
   return IsNumber;
}

function zeropad(number, digits)
{
	zpnum="";
	number=number*1;
	for (d=digits-1; d>0; d--) {
		if (number < Math.pow(10,d)) {
			zpnum="0" + zpnum;
		}
	}
	zpnum = zpnum + number;
	return zpnum;
}

function justcardinals(str) {
	str=str.toUpperCase();
	var card = /[NSEW]/i;
	output="";
	for (s=0; s<str.length; s++) {
		teststr=str.charAt(s);
		if(teststr.match(card)) output = output + teststr;
	}
	if (output.length!=2) {
		return false;
	} else {
		return true;
	}
}

function parseOneCoordField(coordfield) {
	coord=coordfield.value.toUpperCase();
	if (!justcardinals(coord)) {
		alert(getterm("twoCardinals") + " (N/S/W/E)");
		coordfield.focus();
		coordfield.select();
		return false;
	}
	if (coord.length<15) {
		alert(getterm("couldNotUnderstand") + "Nxx xx.xxx Exxx xx.xxx");
		return false;
	}
	lonpos=coord.indexOf('E');
	if (lonpos<0) lonpos=coord.indexOf('W');
	if (coord.substring(lonpos-1,lonpos)!=" ") coord=coord.substring(0,lonpos) + " " + coord.substring(lonpos);
	var counter=0;
	var coordlen = new Array(1,2,2,3,1,3,2,3);
	var chunks = new Array();

	for(i = 0 ; i < coord.length ; i++) {
		if (isnum(coord.substring(i,i+1))) {
			chunks[counter]=chunks[counter] + coord.substring(i,i+1);
		} else {
			if (coord.substring(i,i+1)=='N' || coord.substring(i,i+1)=='S' || coord.substring(i,i+1)=='E' || coord.substring(i,i+1)=='W') {
				chunks[counter]=coord.substring(i,i+1);
			}
			counter++;
			chunks[counter]='';
		}
	}
	
	var c=0;
	var goodchunks = new Array();
	for(i=0;i<=counter;i++) {
		if(chunks[i].length>0) goodchunks[c++]=chunks[i];
	}

	var outcoord='';
	for(i=0;i<8;i++) {
		if (isnum(goodchunks[i]))
			outcoord=outcoord + zeropad(goodchunks[i],coordlen[i]);
		else
			outcoord=outcoord + goodchunks[i];
	}
	if (outcoord.length!=17) {
		alert(getterm("couldNotUnderstand") + "Nxx xx.xxx Exxx xx.xxx");
		return false;
	}
	coordfield.value=outcoord;
	return true;
}

function chkCoord(field,name,maxval) {
	if (!emptyField(field,getterm("isEmpty").replace("***","'" + name + "'"))) return false;
	if (!isNumeric(field)) {
		alert(getterm("notANumber").replace("***","'" + name + "'"));
		field.focus();
		field.select();
		return false;
	}
	if (field.value>maxval ) {
		msg = getterm("tooLarge").replace("***","'" + name + "'");
		msg = msg.replace("xxx",maxval);
		alert(msg);
		field.focus();
		field.select();
		return false;
	}
	return true;
}

function chkCoords(thisform,captcha) {
	with (thisform) {
		if (readCookie('geo_oneField')===null) {
			if (!chkCoord(latdeg,getterm("fieldLatitude") + " " + getterm("fieldDegrees"),90)) return false;
			if (!chkCoord(latmin,getterm("fieldLatitude") + " " + getterm("fieldMinutes"),60)) return false;
			if (!chkCoord(latdec,getterm("fieldLatitude") + " " + getterm("fieldDecimal"),999)) return false;
			if (latdec.value.length<3) {
				alert(getterm("decWith3Digits").replace("***","'" + getterm("fieldLatitude") + " " + getterm("fieldDecimal") + "'"));
				latdec.focus();
				latdec.select();
				return false;
			}
			if (!chkCoord(londeg,getterm("fieldLongitude") + " " + getterm("fieldDegrees"),180)) return false;
			if (!chkCoord(lonmin,getterm("fieldLongitude") + " " + getterm("fieldMinutes"),60)) return false;
			if (!chkCoord(londec,getterm("fieldLongitude") + " " + getterm("fieldDecimal"),999)) return false;
			if (londec.value.length<3) {
				alert(getterm("decWith3Digits").replace("***","'" + getterm("fieldLongitude") + " " + getterm("fieldDecimal") + "'"));
				londec.focus();
				londec.select();
				return false;
			}
		} else {
			if (!parseOneCoordField(coordOneField)) return false;
		}
	}
	return true;
}

function chkCaptcha(thisform,servercaptcha) {
	with (thisform) {
		if (hex_md5(usercaptcha.value.toUpperCase())!=servercaptcha) {
			alert(getterm("incorrectCode"));
			usercaptcha.focus();
			usercaptcha.select();
			return false;
		}
	}
	return true;
}

function chkImgExtension(thisform) {
	with (thisform) {
		var ext = img.value;
		ext = ext.substring(ext.length-3,ext.length);
		ext = ext.toLowerCase();
		if(ext != 'jpg' && ext != 'gif' && ext!='png' && ext != null && ext != '') {
			alert(getterm("onlyJpg").replace("***","'" + ext + "'"));
			img.focus();
			img.select();
			return false; 
		}
	}
	return true;
}

function chkEmail(field) {
	with (field) {
		if (!emptyField(field,getterm("isEmpty").replace("***","'" + getterm("fieldEmailAddress") + "'"))) return false;
		var adr = value;
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (!filter.test(adr)) {
			field.focus();
			field.select();
			alert(getterm("invalidEmailAddress"));
			return false;
		}
	}
	return true;
}

function validateNewCacheForm(thisform,captcha) {
	with (thisform) {
		if (!emptyField(cachename,getterm("isEmpty").replace("***","'" + getterm("fieldCacheName") + "'"))) return false;
		if (!emptyField(gccode,getterm("isEmpty").replace("***","'" + getterm("fieldGCcode") + "'"))) return false;
		if ((gccode.value.substring(0,2)!='GC' && gccode.value.substring(0,2)!='OC') || gccode.value.length<3) {
			alert(getterm("incorrectGC"));
			gccode.focus();
			return false;
		}
		if (!chkCoords(thisform)) return false;
		if (accuracy.value == '999' && !isNumeric(txtAccuracy)) {
			alert(getterm("accuracy") + " " + getterm("notANumber") + "!");
			txtAccuracy.focus();
			txtAccuracy.select();
			return false;
		}
		if (!chkImgExtension(thisform)) return false;
		if (!chkCaptcha(thisform,captcha)) return false;
	}
}

function validateNewAltCacheForm(thisform,captcha) {
	with (thisform) {
		if (!chkCoords(thisform)) return false;
		if (accuracy.value == '999' && !isNumeric(txtAccuracy)) {
			alert(getterm("notANumber").replace("***","'" + getterm("fieldAccuracy") + "'"));
			txtAccuracy.focus();
			txtAccuracy.select();
			return false;
		}
		if (!chkImgExtension(thisform)) return false;
		if (!chkCaptcha(thisform,captcha)) return false;
	}
}

function validateEditCacheForm(thisform,captcha) {
	with (thisform) {
		if (!emptyField(cachename,getterm("isEmpty").replace("***","'" + getterm("fieldCacheName") + "'"))) return false;
		if (!emptyField(gccode,getterm("isEmpty").replace("***","'" + getterm("fieldGCcode") + "'"))) return false;
		if ((gccode.value.substring(0,2)!='GC' && gccode.value.substring(0,2)!='OC') || gccode.value.length<3) {
			alert(getterm("incorrectGC") + ".");
			gccode.focus();
			return false;
		}
		if (!chkCoords(thisform)) return false;
		if (accuracy.value == '999' && !isNumeric(txtAccuracy)) {
			alert(getterm("notANumber").replace("***","'" + getterm("fieldAccuracy") + "'"));
			txtAccuracy.focus();
			txtAccuracy.select();
			return false;
		}
	}
}

function validateChangePicForm(thisform,captcha) {
	with (thisform) {
		if (!chkImgExtension(thisform)) return false;
	}
}

function validateNewChildForm(thisform,captcha) {
	with (thisform) {
		if (!emptyField(description, getterm("isEmpty").replace("***","'" + getterm("fieldWPdesc") + "'"))) return false;
		if (!chkCoords(thisform)) return false;
	}
}

function validateInputLogonForm(thisform,captcha) {
	with (thisform) {		
		if (!emptyField(username, getterm("isEmpty").replace("***","'" + getterm("fieldUsername") + "'"))) return false;
		if (!emptyField(userpw, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
	}
}

function validateChkCoordsForm(thisform,captcha) {
	with (thisform) {
		if (!chkCoords(thisform)) return false;
		if (!chkCaptcha(thisform,captcha)) return false;
	}
}

function validateNewUserForm(thisform,captcha) {
	with (thisform) {
		if (!emptyField(username, getterm("isEmpty").replace("***","'" + getterm("fieldUsername") + "'"))) return false;
		if (!emptyField(password1, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
		if (!emptyField(password2, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
		if (password1.value != password2.value) {
			alert(getterm("passwordsDontMatch"));
			password1.focus();
			password1.select();
			return false;
		}
		if (!emptyField(email1, getterm("isEmpty").replace("***","'" + getterm("fieldEmailAddress") + "'"))) return false;
		if (!chkEmail(email1)) return false;
		if (!emptyField(email2, getterm("isEmpty").replace("***","'" + getterm("fieldEmailAddress") + "'"))) return false;
		if (!chkEmail(email2)) return false;
		if (email1.value != email2.value) {
			alert(getterm("emailAddressesDontMatch"));
			email1.focus();
			email1.select();
			return false;
		}
		var d = new Date();
		tz = d.getTimezoneOffset();
		timezone.value=tz/60*-1;
	}
}

function validateForgottenPasswordForm(thisform,captcha) {
	with (thisform) {
		if (!emptyField(email, getterm("isEmpty").replace("***","'" + getterm("fieldEmailAddress") + "'"))) return false;
		if (!chkEmail(email)) return false;
	}
}

function validateChangePW(thisform,captcha) {
	with (thisform) {
		if (!emptyField(password, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
		if (!emptyField(password1, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
		if (!emptyField(password2, getterm("isEmpty").replace("***","'" + getterm("fieldPassword") + "'"))) return false;
		if (password1.value != password2.value) {
			alert(getterm("passwordsDontMatch"));
			password1.focus();
			password1.select();
			return false;
		}
	}
}

function validateEditStats(thisform) {
	with (thisform) {
		if (oldvis.value.length>0) {
			var answer = confirm(getterm("confirmResetStats").replace("***",cachename.value) + "?\n(Visits: " + oldvis.value + "->" + visits.value + ", Correct: " + oldcor.value + "->" + correct.value + ", Wrong: " + oldwro.value + "->" + wrong.value + ")");
			if (!answer) {
				return false;
			}
		}
	}
}

function showhideTxtAccuracy(field) {
	txtbox = document.getElementById('spanAcc');
	altTxt = document.getElementById('spanAltTxt');
	altSel = document.getElementById('spanAltSel');
	if (field.value == "999") {
		txtbox.style.display = "";
		txtbox.focus();
		txtbox.select();
	} else {
		txtbox.style.display = "none";
	}
	if (field.value > 0) {
		altTxt.style.display = "";
		altSel.style.display = "";
	} else {
		altTxt.style.display = "none";
		altSel.style.display = "none";
	}
}
