//Created by Renaud Diez - 20070604


function checkInput(theform,thefield,fieldtype, notempty,errmsg)
{
	var strng = thefield.value;
	
	var errfield = "err" + thefield.id;
	var element = $(errfield);
	
	var errorfield = "error_" + thefield.id;
	var errElement = $(errorfield);
	
	
	if(fieldtype == "date")
	{
		if((notempty == "1" && strng == "") || strng != "")
		{
			var error = checkDate (strng, errmsg);
		}	
		else
			var error = "";
			
		 if(error == "" && thefield.id == "to_date" && typeof(window.document.forms[theform].elements["from_date"]) != "undefined")
		 {
		 	var fromDate = window.document.forms[theform].elements["from_date"].value;
			var toDate = strng;
			
			error = compareDate(fromDate, toDate);
		 }
		 else if(error == "" && thefield.id == "from_date" && typeof(window.document.forms[theform].elements["to_date"]) != "undefined"  && window.document.forms[theform].elements["to_date"].value != "")
		 {
		 	var fromDate = strng;
			var toDate = window.document.forms[theform].elements["to_date"].value;
			
			error = compareDate(fromDate, toDate);
		 }
			
		if(error != "")
		{
			element.update(error);
			errElement.value = "error";
			window.document.forms[theform].elements["action"].value = "error";
			
			thefield.style.backgroundColor = "#FFE5E5";
		}
		else
		{
			element.update("");
			errElement.value = "";
			window.document.forms[theform].elements["action"].value = "submit";
			// supprimer le 2° msg s'il existe
			if ( thefield.id == "to_date" || thefield.id == "from_date" ) {
				otherId = ( thefield.id == "to_date" )? "from_date" : "to_date";
				$("err" + otherId).update("");
				$("error_" + otherId).value = "";
			}
		}
	}
	
	
	if(fieldtype == "datetime")
	{
		if((notempty == "1" && strng == "") || strng != "")
			var error = checkDateTime (strng, errmsg);
		else
			var error = "";
			
		if(error == "" && thefield.id == "to_date" && typeof(window.document.forms[theform].elements["from_date"]) != "undefined")
		 {
		 	var fromDate = window.document.forms[theform].elements["from_date"].value;
			var toDate = strng;
			
			error = compareDate(fromDate, toDate);
		 }
		 else if(error == "" && thefield.id == "from_date" && typeof(window.document.forms[theform].elements["to_date"]) != "undefined" && window.document.forms[theform].elements["to_date"].value != "")
		 {
		 	var fromDate = strng;
			var toDate = window.document.forms[theform].elements["to_date"].value;
			error = compareDate(fromDate, toDate);
		 }
		 
			
		if(error != "")
		{
			//strng = "";
			element.update(error);
			errElement.value = "error";
			window.document.forms[theform].elements["action"].value = "error";
			
			thefield.style.backgroundColor = "#FFE5E5";
		}
		else
		{
			element.update("");
			errElement.value = "";
			window.document.forms[theform].elements["action"].value = "submit";
			// supprimer le 2° msg s'il existe
			if ( thefield.id == "to_date" || thefield.id == "from_date" ) {
				otherId = ( thefield.id == "to_date" )? "from_date" : "to_date";
				$("err" + otherId).update("");
				$("error_" + otherId).value = "";
			}
		}
	}
	
	
	if(fieldtype == "email")
	{
		// 25/9/2008 Luc Dubay : change to take care of 'notempty' parameter
		if((notempty == "1" && strng == "") || strng != "")
		{
			var error = checkEmail (strng, errmsg);
		}	
		else
			var error = "";

		formFireError(element, errElement, error, theform);
	}
	
	
	if(fieldtype == "phone")
	{
		var error = checkPhone (strng, errmsg);
		
		formFireError(element, errElement, error, theform);

	}
	
	
	if(fieldtype == "password")
	{
		var error = checkPassword (strng, errmsg);
		
		formFireError(element, errElement, error, theform);
	}
	
	
	if(fieldtype == "text")
	{
		var error = isEmpty (strng, errmsg);		
		formFireError(element, errElement, error, theform);
	}
	
	
	
	
	if(fieldtype == "number")
	{
		if((notempty != "1" && strng == "") || notempty == "1" || strng != "")
			var error = checkDigit (strng, errmsg);
		else
			var error = "";
		
		formFireError(element, errElement, error, theform);
	}
	
	
	
	
	if(fieldtype == "radio")
	{
		var error = checkRadio (strng, errmsg);
		formFireError(element, errElement, error, theform);
	}
	
	
	
	if(fieldtype == "dropdown")
	{
		var selindex = thefield.selectedIndex;
		
		var error = checkDropdown (selindex, errmsg);
		
		formFireError(element, errElement, error, theform);

	}
	
	
	// disable the submit button if error exists in form
	for (i=0;i < window.document.forms[theform].length;i++)
	{
		var tempobj= window.document.forms[theform].elements[i];

		// if we found string "error_" into the id then evaluate it
		//if(tempobj.value.substring( tempobj.value.indexOf("error_") ))
		
		var tmpvalue = tempobj.id;
		var iserrorfield = tmpvalue.indexOf("error_");
		
		if(iserrorfield != -1)
		{
			if(tempobj.value != "")
				window.document.forms[theform].elements["action"].value = "error";
		}
		
	}
	
	
	
	if(window.document.forms[theform].elements["action"].value != "submit")
	{
		for (i=0;i < window.document.forms[theform].length;i++)
		{
			var tempobj= window.document.forms[theform].elements[i];
			if(tempobj.type == "submit")
				tempobj.disabled = true;
		}
		
		if($('stepper') != 'null' && $('stepper') != undefined)
			$('stepper').hide();
	}	
	else
	{
		for (i=0;i < window.document.forms[theform].length;i++)
		{
			var tempobj= window.document.forms[theform].elements[i];
			if(tempobj.type == "submit")
				tempobj.disabled = false;
		}
		
		if($('stepper') != 'null' && $('stepper') != undefined)
			$('stepper').show();
	}

	
}



function compareDate(fromDate, toDate)
{
	var error="";

	
	fromDate = fromDate.replace(/-/, "");
	toDate = toDate.replace(/-/, "");
	fromDate = fromDate.replace(/-/, "");
	toDate = toDate.replace(/-/, "");

	
	fromDate = fromDate.substring(0,8);
	toDate = toDate.substring(0,8);
	

	if (fromDate > toDate) 
	{
		error = "Invalid Date Range! Start Date cannot be after End Date!";
	}
	
	return error;
}



function checkDate(strng, errmsg)
{
	var error="";
	var reA = /^\d{4}-\d{1,2}-\d{1,2}$/;
	var reB = /^\d{1,2}-\d{1,2}-\d{4}$/;

	if (strng != "")
	{
		if(regs = strng.match(reA))
		{ 	
			if(regs[3] < 1 || regs[3] > 31 || regs[2] < 1 || regs[2] > 12) 
			{ 
				if(errmsg != "")
		   			error = errmsg;
				else
					error = "Please enter a valid date YYYY-mm-dd."; 
			}
		} 
		else if(regs = strng.match(reB))
		{ 	
			if(regs[1] < 1 || regs[1] > 31 || regs[2] < 1 || regs[2] > 12) 
			{ 
				if(errmsg != "")
		   			error = errmsg;
				else
					error = "Please enter a valid date dd-mm-YYYY."; 
			}
		} 
		else 
		{ 
			if(errmsg != "")
		   			error = errmsg;
			else
				error = "Please enter a valid date YYYY-mm-dd."; 
		}
	}
	return error;	
}



function checkDateTime(strng, errmsg)
{
	var error="";
	//var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
	var re = /^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{2}$/;
	

	
	if(regs = strng.match(re)) 
	{ 

		if(regs[3] < 1 || regs[3] > 31 || regs[2] < 1 || regs[2] > 12) 
		{ 
			if(errmsg != "")
	   			error = errmsg;
			else
				error = "Please enter a valid date YYYY-mm-dd."; 
		}
	} 
	else 
	{ 
		if(errmsg != "")
	   			error = errmsg;
		else
			error = "Please enter a valid date YYYY-mm-dd.";
	}

	return error;
}



// email
function checkEmail (strng, errmsg) {
var error="";
if (strng.empty()) {
   	if(errmsg != "")
	   	error = errmsg;
	else
   		error = "You didn't enter an email address.";
}

    var emailFilter=/^.+@.+\..{2,3}$/;
    if (!(emailFilter.test(strng))) { 
       	if(errmsg != "")
	   		error = errmsg;
		else
			error = "Please enter a valid email address.";
    }
    else {
//test email for illegal characters
       var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/;
         if (strng.match(illegalChars)) {
          	if(errmsg != "")
	   			error = errmsg;
			else
		  		error = "The email address contains illegal characters.";
       }
    }
return error;    
}


// phone number - strip out delimiters and check for 10 digits

function checkPhone (strng, errmsg) {
var error = "";
if (strng.empty()) {
   	if(errmsg != "")
	   	error = errmsg;
	else
   		error = "You didn't enter a phone number.";
}

var stripped = strng.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters
    if (isNaN(parseInt(stripped))) {
       	if(errmsg != "")
	   		error = errmsg;
		else
	   		error = "The phone number contains illegal characters.";
  
    }
    if (!(stripped.length == 10)) {
		if(errmsg != "")
	   		error = errmsg;
		else
			error = "The phone number is the wrong length. Make sure you included an area code.";
    } 
return error;
}


// password - between 6-8 chars, uppercase, lowercase, and numeral

function checkPassword (strng, errmsg) {
var error = "";
if (strng.empty()) {
   	if(errmsg != "")
	   	error = errmsg;
	else
   		error = "You didn't enter a password.";
}

    var illegalChars = /[\W_]/; // allow only letters and numbers
    
    if ((strng.length < 2)) {
       	if(errmsg != "")
	   		error = errmsg;
		else
	   		error = "The password is the wrong length.";
    }
    else if (illegalChars.test(strng)) {
      	if(errmsg != "")
	   		error = errmsg;
		else
	  		error = "The password contains illegal characters.";
    } 
    else if (!((strng.search(/(a-z)+/)) && (strng.search(/(A-Z)+/)) && (strng.search(/(0-9)+/)))) {
       	if(errmsg != "")
	   		error = errmsg;
		else
	   		error = "The password must contain at least one uppercase letter, one lowercase letter, and one numeral.";
    }  
return error;
}





// username - > 1 char ... uc, lc, and underscore only.

function checkUsername (strng, errmsg) {
var error = "";
if (strng.empty()) {
   	if(errmsg != "")
	   	error = errmsg;
	else
   		error = "You didn't enter a username.";
}


    var illegalChars = /\W/; // allow letters, numbers, and underscores
    if ((strng.length < 2)) {
       	if(errmsg != "")
	   		error = errmsg;
		else
	   		error = "The username is the wrong length.";
    }
    else if (illegalChars.test(strng)) {
    	if(errmsg != "")
	   		error = errmsg;
		else
			error = "The username contains illegal characters.";
    } 
return error;
}




function checkDigit (strng, errmsg) {
var error = "";
if (strng.empty()) {
   	if(errmsg != "")
	   	error = errmsg;
	else
   		error = "You didn't enter a number.";
}

	
	if(strng.substring(0,1) == "-")
		strng = strng.substring(1);
	
	var anum = /(^\d+$)|(^\d+\.\d+$)/;

    if (anum.test(strng)== false) {
    	if(errmsg != "")
	   		error = errmsg;
		else
			error = "The number contains illegal characters.";
    } 
return error;
}

    


// non-empty textbox

function isEmpty(strng, errmsg) {
var error = "";
  if (strng.empty()) {
     	if(errmsg != "")
	   		error = errmsg;
		else
	 		error = "The mandatory text area has not been filled in."
  }
return error;	  
}

// was textbox altered

function isDifferent(strng, errmsg) {
var error = ""; 
  if (strng != "Can\'t touch this!") {
     	if(errmsg != "")
	   		error = errmsg;
		else
	 		error = "You altered the inviolate text area.";
  }
return error;
}

// exactly one radio button is chosen

function checkRadio(checkvalue, errmsg) {
var error = "";
   if (!(checkvalue)) {
       	if(errmsg != "")
	   		error = errmsg;
		else
	   		error = "Please check a radio button.";
    }
return error;
}

// valid selector from dropdown list

function checkDropdown(choice, errmsg) {
var error = "";
    if (choice == 0) {
    	if(errmsg != "")
	   		error = errmsg;
		else
			error = "You didn't choose an option from the drop-down list.";
    }    
return error;
}    

// Fire error on a form
function formFireError(element, errElement, error, theform) {
	if(error != "")
	{
		element.update(error);
		errElement.value = "error";
		window.document.forms[theform].elements["action"].value = "error";
		
		//thefield.style.backgroundColor = "#FFE5E5";
	}
	else
	{
		element.update("");
		errElement.value = "";
		window.document.forms[theform].elements["action"].value = "submit";
	}
}

function compare2input(elem1, elem2, submit, error, msg)
{
	if( elem1 != elem2)
	{
		error.show();
		error.innerHTML = msg;
		submit.disabled = true;
	}
	else
	{
		error.hide();
		submit.disabled = false;
	}
}
