// PathProfile.js v1.0
// Author Nigel King
// (c) Motorola 2007
// This checks the input form for errors in email addresses and 
// Latitude and Longitude formats. It also stores constant information
// in cookies for use another time.
function init()
{
	//for (var i=1;i<2;i++)
	{
		var x = readCookie('ppHeightUnits');
		if (x) document.thisform.HeightUnits.value = x;
		var x = readCookie('ppLengthUnits');
		if (x) document.thisform.LengthUnits.value = x;
		var x = readCookie('ppContactName');
		if (x) document.thisform.ContactName.value = x;
		var x = readCookie('ppCompanyName');
		if (x) document.thisform.CompanyName.value = x;
		var x = readCookie('ppPhone');
		if (x) document.thisform.Phone.value = x;
		var x = readCookie('ppEmailAddress');
		if (x) document.thisform.EmailAddress.value = x;
	}
}


	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 = "";
		var ck = name+"="+value+expires+"; path=/";
		//if (days != -1) alert('Cookie\n' + ck + '\ncreated');
		document.cookie = ck;
	}

	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 email_validation(value, attr_str)
	{
	   str = value.value;
	   alertstring = "'"+ str + "' is not a valid Email address"
	   var ems = /^[a-zA-Z0-9_\.\-]+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/;
	   if (!(ems.test(str)))
	   {alert(alertstring);
	    value.focus();
	    return false;}
	   return true;				
	}

	function answer_validation(value)
	{
	   str = value.value;
	   alertstring = "Please answer the question at the top of the form"
	   if (str=="web/No_answer")
	   {alert(alertstring);
	    value.focus();
	    return false;}
	   return true;				
	}

	function float_validation(value, max, min, prompt, lat)
	{
		str=value.value;
		if(str.length < 1)
		  {alert(prompt + " has no value.");
		  value.focus();
		  return false;}
		
		var fr = new RegExp("(^[+\-]?[0-9]+[.][0-9]*$)|(^[+\-]?[0-9]*[.][0-9]+$)");
		var ir = new RegExp("^[+\-]?[0-9]+$");
		var P  = "[E,W,e,w]";
		if (lat) {var P ="[N,S,n,s]"}
		var dP = new RegExp("^[0,1]?[0-9]{1,2}[.]{0,1}[0-9]*"+P+"$");
		var mP = new RegExp("^[0-9]{1,3}[:][0-5]?[0-9]([.][0-9]+)?"+P+"$");
		var sP = new RegExp("^[0-9]{1,3}[:][0-5]?[0-9][:][0-5]?[0-9]([.][0-9]+)?"+P+"$");
		if (!(ir.test(str) || fr.test(str) || dP.test(str) || mP.test(str) || sP.test(str)))
		{
		alert(prompt + ". The entered value '" + str + "' is not in a recognised format.");
		value.focus();
		return false;}

		floatValue=parseFloat(str);
		if (floatValue < min || floatValue > max)
		{alert(prompt + " '" + str + "' is out of range. " + 
					 "\nMaximum " + max + ", minimum " + min + ".");
			value.focus();
			return false;}
		return true;
	}		

	function integer_validation(value, max, min, prompt)
	{
		str=value.value;
		if (str=="Auto"){return true;}
		floatValue=parseInt(str); 
		if(str.length == 0)
		  {alert(prompt + " has no value.");
		  value.focus();
		  return false;}

		var ok_chars = "1234567890.";
		for(ii=0; ii<str.length; ii++)
		{
		   if(ok_chars.indexOf(str.charAt(ii)) == -1)
		   {
		      alert(prompt + ". The entered value '" + str +
		             "' contains an invalid character '"+str.charAt(ii)+"'.");
		      value.focus();
		      return false;
	           }
                }
		
		if (isNaN(floatValue))
		{
			alert(prompt + " '" + str + "' is not numeric.");
			value.focus();
			return false;
		}
	
		if (floatValue < min || floatValue > max)
		{
			alert(prompt + " '" + str + "' is out of range. " + 
					 "\nMaximum " + max + " minimum " + min);
			value.focus();
			return false;
		}
		return true;
	}	

	function string_validation(value, prompt, extra)
	{
		str=value.value;
		if(str.length == 0)
		  {alert(prompt + " has no value.");value.focus();return false;}

		var ok_chars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"+extra;

		for(ii=0; ii<str.length; ii++)
		{
		   if(ok_chars.indexOf(str.charAt(ii)) == -1)
			{
		      alert(prompt + ". The entered string '" + str +
		             "' contains an invalid character '"+str.charAt(ii)+"'.");
			value.focus();
		      return false;
			}
		}
		return true;
	}

	function phone_validation(value, prompt, extra)
	{
		str=value.value;
		if(str.length == 0)
		  {alert(prompt + " has no value.");value.focus();return false;}

		var ok_chars = "1234567890-.()+ "+extra;

		for(ii=0; ii<str.length; ii++)
		{
		   if(ok_chars.indexOf(str.charAt(ii)) == -1)
		   {
		      alert(prompt + ". The entered string '" + str +
		             "' contains an invalid character '"+str.charAt(ii)+"'.");
			value.focus();
		      return false;
			}
    	}
		return true;
	}

	function text_validation(value, prompt, extra)
	{
		str=value.value;
		if(str.length == 0)
		  {alert(prompt + " has no value.");value.focus();return false;}

		var ok_chars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "+extra;

		for(ii=0; ii<str.length; ii++)
		{
		   if(ok_chars.indexOf(str.charAt(ii)) == -1)
		   {
		      alert(prompt + ". The entered string '" + str +
		             "' contains an invalid character '"+str.charAt(ii)+"'.");
			value.focus();
		      return false;
			}
		}
		return true;
	}

	function diff_val(first, second, diff, prompt)
	{
	   f = parseFloat(first.value)
	   s = parseFloat(second.value)
	   if((f-s)>diff || (s-f)>diff)
	   {alert(prompt + " range must be less than " + diff + " degrees");
				    second.focus();return false;}

	   return true;
	}

	function form_validation(thisform)
	{
		with(thisform)
		{
			createCookie('ppHeightUnits', 	HeightUnits.value, 365) ;
			createCookie('ppLengthUnits', 	LengthUnits.value, 365) ;
			createCookie('ppContactName', 	ContactName.value, 365) ;
			createCookie('ppCompanyName', 	CompanyName.value, 365) ;
			createCookie('ppPhone', 		Phone.value, 365) ;
			createCookie('ppEmailAddress', 	EmailAddress.value, 365) ;
			createCookie('ppAnswer',		link_planner_version.value, 365) ;
	if(! answer_validation(link_planner_version))							return false;
	if(! float_validation(startlat, 90, -90, "Local Latitude",true))		return false;
	if(! float_validation(startlong, 180, -180, "Local Longitude",false))	return false;
	if(! float_validation(localheight, 2000, 0, "Local Height",true))		return false;
	if(! float_validation(endlat, 90, -90, "Remote Latitude",true)  )		return false;
	if(! diff_val(startlat,endlat,3,"Latitude"))							return false;
	if(! float_validation(endlong, 180, -180, "Remote Longitude",false))	return false;
	if(! diff_val(startlong,endlong,4,"Longitude"))							return false;
	if(! float_validation(remoteheight, 2000, 0, "Remote Height",false))	return false;
	if(! integer_validation(numpoints, 5000, 0.001, "Number of Points"))	return false;
	if(! string_validation(PathName, "Link Name"," .,_-+%!*?~|/"))			return false;
	if(! string_validation(FileName, "Filename",""))						return false;
	if(! text_validation(ContactName, "Contact Name",""))					return false;
	if(! text_validation(CompanyName, "Company Name",""))					return false;
	if(! phone_validation(Phone, "Phone",""))								return false;
	if(! email_validation(EmailAddress, "Email Address",""))				return false;

	return true;
		}
	}
