/*
******************************************************************
*  Form Check, JavaScript Form Validation Library
******************************************************************
*
*  FormCheck currently supports the following contols:
*	- Null values
*	- Minimum and maximum lengths
*	- Minimum and maximum values (for numbers)
*	- Type controls
*
*  FormCheck currently supports the following input types:
*	- date (mm/dd/yyyyy)
*	- datemysql (yyyy-mm-dd)
*	- email
*	- ipaddress
*	- number
*	- text
*
*/

//alert('Vid Working - Nomination Form');

function securityCheck(input) {
	/*
	  SecurityCheck Function
	*/
	var badchars	= Array('\'','\"','%','\\');
	for(var i=0; i<badchars.length;i++) {
		if(input.indexOf(badchars[i]) != -1)
		  return false;
	}
}

/*function strip_spaces(mystr) {
  var newstring = "";
  if (mystr.indexOf(' ') != -1) 
  {
    string = mystr.split(' ');
    for (var i=0;i<string.length;i++)
	{
      newstring += string[i];
    }
	alert('newstring: ')
    return newstring;
  }
   else {
   alert('newstring: ')
    return mystr; 
  }
}*/

function inputCheck(input,type) {
	/*
	  InputCheck Function
	*/
	var errors = 0;
	var expression;
	//alert(input);
	//return false;
	//alert(type)
	if (type == 'number' || type == 'integer' || type == 'date' || type == 'positivenumber' )
	{
		x = input;
		while (x.substring(0,1) == ' ') x = x.substring(1);
		while (x.substring(x.length-1,x.length) == ' ') x = x.substring(0,x.length-1);
		input = x
		//alert(input)
	}

	switch(type) {
		case 'email':
			expression	= /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		break;
		case 'text':
			expression	= "";
		break;
		case 'integer':
			//input = strip_spaces(input);
			expression	= /^\d+$/; //all digits
		break;
		case 'number':
			expression	= /^[+-]?\d+(\.\d+)?(e[-+]?\d+)?$/; //Allows +3 -3.7 -3.4e+56 etc.
		break;
		case 'positivenumber':
			expression	= /^\d+(\.\d+)?(e[-+]?\d+)?$/; //Allows 3.7 3.4e+56 etc.
		break;
		case 'date':
			expression	= /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		break;
		case 'datedb':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'datemysql':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'ipaddress':
			expression	= /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
		break;
		case '':
		break;
	}

	if((errors == 0) && (expression != '')) {
		if(!expression.exec(input))
		  errors++;
	}

	if(errors==0)
		return true;
	else
		return false;
}

function formCheck(cform) {
	/*
	  FormCheck Function
	*/
	if(!cform) {
		alert("Empty form object detected!");
		return false;
	}

	var errors		= 0;
	var message		= "Please check the following input(s): \n";
	var controlmessages	= Array();
	
	var rv = null;
	
	if (document.getElementById('treeframe')){
	  rv = document.getElementById('treeframe').contentDocument;
	}
	 
	if(document.frames){
	  // IE
	  if(document.frames['treeframe'])
	  {
	  	rv = document.frames['treeframe'].document;
	  }
	}
	
	if(!rv)
	{
		alert('Select Tree Category')
		return false;	
	}
	

	if(cform.formmessage)
	{
		message = cform.formmessage + "\n";
	}
	
	for(i=0;i<cform.elements.length;i++) {
		// Get manual message for this input
		if(cform.elements[i].getAttribute('checkmessage'))
		  controlmessages[i] = cform.elements[i].getAttribute('checkmessage');
		else
		  controlmessages[i] = "";
		// Get message
		
		// 1. NULL CONTROL
		if(cform.elements[i].getAttribute('checkallownull') && cform.elements[i].getAttribute('checkallownull')=='false') {
			
			if(cform.elements[i].value) {
				if((cform.elements[i].value == '') || (cform.elements[i].value == ' ') 
					|| (cform.elements[i].value == '20/Undefined')) {
					errors++;
					if(controlmessages[i] != "")
				  	  message +="* "+controlmessages[i]+"\n";
					else
				 	  message +="* Field "+cform.elements[i].name+" cannot be blank.\n";
				}
			} else {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Field "+cform.elements[i].name+" cannot be undefined.\n";
			}
		}
		// END OF NULL CONTROL
		
		// 2. TYPE CONTROL
		if((cform.elements[i].getAttribute('checktype')) && (cform.elements[i].value)) {
			if(!inputCheck(cform.elements[i].value,cform.elements[i].getAttribute('checktype'))) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Invalid "+cform.elements[i].getAttribute('checktype')+" format in "+cform.elements[i].name+".\n";
			}
		}
		// END OF TYPE CONTROL

		// 3. LENGTH CONTROL
		if((cform.elements[i].getAttribute('checkminlen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length < cform.elements[i].getAttribute('checkminlen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('checkminlen')+" characters.\n";
			}
		}
		if((cform.elements[i].getAttribute('checkmaxlen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length > cform.elements[i].getAttribute('checkmaxlen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be more than "+cform.elements[i].getAttribute('checkmaxlen')+" characters.\n";
			}
		}
		// END OF LENGTH CONTROL

		// 3. MIN/MAX VALUE CONTROL FOR NUMBERS
		if((cform.elements[i].getAttribute('checkminvalue')) && (cform.elements[i].value)) {
			if(cform.elements[i].value/1 < cform.elements[i].getAttribute('checkminvalue')/1) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('checkminvalue')+".\n";
			}
		}
		if((cform.elements[i].getAttribute('checkmaxvalue')) && (cform.elements[i].value)) {
			if(cform.elements[i].value/1 > cform.elements[i].getAttribute('checkmaxvalue')/1) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be more than "+cform.elements[i].getAttribute('checkmaxvalue')+".\n";
			}
		}
		// END OF MIN/MAX VALUE CONTROL
	} // END OF THE FOR LOOP
	
	
	if(document.sform.treeCategory.value.indexOf("Undefined") > -1)
	{
		//document.frames['treeframe'].document.getElementById('largestComName').value)
		//do nothing already checked
	}
	else if(document.sform.treeCategory.value.indexOf("Individual%20Tree") > -1)
	{
		if(rv.getElementById('largestComName').value == "Undefined"
			&& rv.getElementById('largestOtherComName').value == ""
			&& rv.getElementById('largestOtherSciName').value == "")
		{
			errors++;
			message +="* "+"Select or Enter Tree Name"+"\n";
		}
		
		if(rv.getElementById('largestAge').value != ""
			&& (!inputCheck(rv.getElementById('largestAge').value,"positivenumber")))
		{
			errors++;
			message +="* "+"Tree Age Must Be Numeric"+"\n";
		}
		
		if(rv.getElementById('largestHeight').value != ""
			&& (!inputCheck(rv.getElementById('largestHeight').value,"positivenumber")))
		{
			errors++;
			message +="* "+"Tree Height Must Be Numeric"+"\n";
		}
		
		if(rv.getElementById('largestCircumference').value != ""
			&& (!inputCheck(rv.getElementById('largestCircumference').value,"positivenumber")))
		{
			errors++;
			message +="* "+"Tree Circumference Must Be Numeric"+"\n";
		}
		
		if(rv.getElementById('largestDiameter').value != ""
			&& (!inputCheck(rv.getElementById('largestDiameter').value,"positivenumber")))
		{
			errors++;
			message +="* "+"Tree Diameter Must Be Numeric"+"\n";
		}
		
		if(rv.getElementById('largestCanopy').value != ""
			&& (!inputCheck(rv.getElementById('largestCanopy').value,"positivenumber")))
		{
			errors++;
			message +="* "+"Tree Canopy Spread Must Be Numeric"+"\n";
		}
		
		if(rv.getElementById('largestPlantedDate').value != ""
			&& (!inputCheck(rv.getElementById('largestPlantedDate').value,"date")))
		{
			errors++;
			message +="* "+"Tree Planted Date Must Be In This Format: dd/mm/yyyy"+"\n";
		}
		
	}
	else if(document.sform.treeCategory.value.indexOf("Arboretum") > -1
			|| document.sform.treeCategory.value.indexOf("Grove") > -1
			|| document.sform.treeCategory.value.indexOf("Avenue%20of%20Trees") > -1
			|| document.sform.treeCategory.value.indexOf("Shelterbelt") > -1
			|| document.sform.treeCategory.value.indexOf("Hedgerow") > -1
			|| document.sform.treeCategory.value.indexOf("Garden") > -1)
	{
		if(rv.getElementById('treeSelected').length == "0")
		{
			errors++;
			message +="* "+"Select or Enter Tree(s)"+"\n";
		}
	}
	
	//document.sform.treeCategory.value.indexOf("Undefined") > -1
	if (cform.nomPhoneHome.value == "" && cform.nomPhoneWork.value == "")
	{
		errors++;
		message +="* "+"Home Phone OR Work Phone"+"\n";
	}
	
	if (cform.locAddress1.value == "" && cform.locDirection.value == "")
	{
		errors++;
		message +="* "+"Tree Address OR Direction"+"\n";
	}
	
	
	if(cform.locProvince.value.indexOf("-1") > -1)
	{
		errors++;
		message +="* "+"Tree Province"+"\n";
	}

	/*if (!cform.publishPermit.checked)
	{
		errors++;
		message +="* "+cform.publishPermit.getAttribute('checkmessage')+"\n";
	}*/
	
	if (!cform.foipPermit.checked)
	{
		errors++;
		message +="* "+cform.foipPermit.getAttribute('checkmessage')+"\n";
	}

	if(errors == 0) {
	
	  //update hidden values
	  if(document.sform.treeCategory.value.indexOf("Individual%20Tree") > -1)
	  {
	  	//alert('Individual Tree');
	  	transferDataIndividual(rv,cform);
	  }
	  else if(document.sform.treeCategory.value.indexOf("Arboretum") > -1
			|| document.sform.treeCategory.value.indexOf("Grove") > -1
			|| document.sform.treeCategory.value.indexOf("Avenue%20of%20Trees") > -1
			|| document.sform.treeCategory.value.indexOf("Shelterbelt") > -1
			|| document.sform.treeCategory.value.indexOf("Hedgerow") > -1
			|| document.sform.treeCategory.value.indexOf("Garden") > -1)
		{
			//alert('Others');
	  		transferDataArboretum(rv,cform);
		}
		
	  //update more hidden values
	  cform.nomSourceName.value = cform.nomSource.options[cform.nomSource.selectedIndex].text;
	  cform.locTypeName.value = cform.locType.options[cform.locType.selectedIndex].text;
	  cform.locCountyName.value = cform.locCounty.options[cform.locCounty.selectedIndex].text;
	  cform.locCooSourceName.value = cform.locCooSource.options[cform.locCooSource.selectedIndex].text;
	  
	  //update lat/long
	  if(cform.locLatitude.value != "" && cform.locLatitudeNS.value == "S")
	  	cform.locLatitude.value = cform.locLatitude.value*(-1);
		
	  if(cform.locLongitude.value != "" && cform.locLongitudeEW.value == "W")
	  	cform.locLongitude.value = cform.locLongitude.value*(-1);
	
	  //if(cform.locLongitude.value != "" && cform.locLongitudeEW.value.indexOf("E"))
	  //	cform.locLongitude.value = cform.locLongitude.value*(-1)	
	  
	  
	  //send form
	  cform.submit();
	  return true;
	} else {
	  alert(message);
	  return false;
	}
}


//Transfer Arboretum Date
function transferDataArboretum(rv,cform)
{
	treeSelected = ""
	for(var i = 0;i < rv.treeSelectionForm.treeSelected.length;i++){
		if (i == 0)
			treeSelected =  rv.treeSelectionForm.treeSelected.options[i].value;
		else
			treeSelected =  treeSelected + '^' + rv.treeSelectionForm.treeSelected.options[i].value;
	}
	cform.treeSelected.value = treeSelected;
}

function transferDataIndividual(rv,cform)
{
	//if(!parent.formCheck(document.treeSelectionForm,"child"))
	//	return false;
	
	
	cform.largestComName.value = rv.getElementById('largestComName').value;
	cform.largestComNameName.value = rv.getElementById('largestComName').options[rv.getElementById('largestComName').selectedIndex].text;
	cform.largestSciNameName.value = rv.getElementById('largestSciName').options[rv.getElementById('largestSciName').selectedIndex].text;
	cform.largestOtherComName.value = rv.getElementById('largestOtherComName').value;
	cform.largestOtherSciName.value = rv.getElementById('largestOtherSciName').value;
	cform.largestPlantedBy.value = rv.getElementById('largestPlantedBy').value;
	cform.largestAge.value = rv.getElementById('largestAge').value;
	cform.largestPlantedDate.value = rv.getElementById('largestPlantedDate').value;
	cform.largestDate.value = getCheckedValue(rv.treeSelectionForm.largestDate);
	
	
	//if(rv.getElementById('largestHeightSelect').options[rv.getElementById('largestHeightSelect').selectedIndex].value == 'F')
	//	cform.largestHeight.value = (rv.getElementById('largestHeight').value*0.3048).toFixed(4);
	cform.largestHeight.value = rv.getElementById('largestHeight').value;
	
	//if(rv.getElementById('largestCircumferenceSelect').options[rv.getElementById('largestCircumferenceSelect').selectedIndex].value == 'F')
	//	cform.largestCircumference.value = (rv.getElementById('largestCircumference').value*0.3048).toFixed(4);
	cform.largestCircumference.value = rv.getElementById('largestCircumference').value;
	
	//if(rv.getElementById('largestDiameterSelect').options[rv.getElementById('largestDiameterSelect').selectedIndex].value == 'F')
	//	cform.largestDiameter.value = (rv.getElementById('largestDiameter').value*0.3048).toFixed(4);
	cform.largestDiameter.value = rv.getElementById('largestDiameter').value;
	
	//if(rv.getElementById('largestCanopySelect').options[rv.getElementById('largestCanopySelect').selectedIndex].value == 'F')
	//	cform.largestCanopy.value = (rv.getElementById('largestCanopy').value*0.3048).toFixed(4);
	cform.largestCanopy.value = rv.getElementById('largestCanopy').value;
}
	
// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}
