/***************************************************************************************
* File Name	:  validations.js
* Author : Vaneet Kaura
* Last Mofidy Date : 16 July, 2005
***************************************************************************************
* This script is used to perform validations
* Available validators are
*********************************************************************
* 1.  required		--->		Required Field Validation
* 2.  email			--->		Email Validation
* 3.  date			--->		Date Validation
* 4.  numeric		--->		Numeric Field Validation
* 5.  phone			--->		Phone Number Validation
* 6.  time			--->		Time Validation
* 7.  length		--->		Field Length Validation
* 8.  file			--->		File Extension Validation
* 9.  equality		--->		Two Fields value equality Validation
* 10. range			--->		Field value range Validation
* 10. ExactLength	--->		Exact Field Length Validation
* 11. MaxLength		--->		Maximum Field Length Validation
*********************************************************************
***************************************************************************************
*/


function validateControl(CtrlObject,validator,error_msg,parm1,parm2)
{
	if(CtrlObject == undefined)
	{
		alert("Invalid object");
		return false;
	}
	
	if(validator == "required")
	{
		if(Validate_Required(CtrlObject,error_msg)==false)
			return false;
	}

	if(validator == "email")
	{
		if(Validate_Email(CtrlObject,error_msg)==false)
			return false;
	}

	
	if(validator == "date")
	{
		if(Validate_Email(CtrlObject,error_msg)==false)
			return false;
	}
		
	if(validator == "numeric")
	{
		if(Validate_Numeric(CtrlObject,"0123456789",error_msg)==false)
			return false;
	}

	if(validator == "decimal")
	{
		if(Validate_Numeric(CtrlObject,"0123456789.",error_msg)==false)
			return false;
	}

	if(validator == "phone")
	{
		if(Validate_Numeric(CtrlObject,"0123456789+-",error_msg)==false)
			return false;
	}

	if(validator == "time")
	{
		if(Validate_Numeric(CtrlObject,"0123456789:",error_msg)==false)
			return false;
	}

	if(validator == "length")
	{
		if(parm1 == "" || parm1 == undefined)
		{
			alert("Please specify length value as parm1 parameter");
			return false;
		}

		if(Validate_Length(CtrlObject,parm1,error_msg)==false)
			return false;
	}

	if(validator == "file")
	{
		if(parm1 == "" || parm1 == undefined)
		{
			alert("Please specify extensions as parm1 parameter");
			return false;
		}

		if(Validate_File(CtrlObject,parm1,error_msg)==false)
			return false;
	}

	
	if(validator == "equality")
	{
		if(parm1 == "" || parm1 == undefined)
		{
			alert("Please specify control element name to which equality is check as parm1 parameter");
			return false;
		}

		if(Validate_Equality(CtrlObject,parm1,error_msg)==false)
			return false;
	}

	if(validator == "range")
	{
		if(parm1 == "" || parm2 == "" || parm1 == undefined || parm2 == undefined)
		{
			alert("Please specify both minimum range as parm1 parameter and maximum range as parm2 parameter");
			return false;
		}
			
		if(Validate_Numeric(CtrlObject,"1234567890",error_msg)==false)
			return false;

		if(Validate_Range(CtrlObject,parm1,parm2,error_msg)==false)
			return false;
	}
	
	if(validator == "ExactLength")
	{
		if(parm1 == "" || parm1 == undefined)
		{
			alert("Please specify length value as parm1 parameter");
			return false;
		}

		if(Validate_ExactLength(CtrlObject,parm1,error_msg)==false)
			return false;
	}

	if(validator == "MaxLength")
	{
		if(parm1 == "" || parm1 == undefined)
		{
			alert("Please specify length value as parm1 parameter");
			return false;
		}

		if(Validate_MaxLength(CtrlObject,parm1,error_msg)==false)
			return false;
	}

}



function Validate_Equality(Ctrl,Ctrl2,error_msg)
{
	if(Ctrl.value != Ctrl2.value)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Values are not same");
		Ctrl2.focus();
		return false;
	}
	return true;
}

function Validate_Length(Ctrl,val,error_msg)
{
	if(Ctrl.value.length < val)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Value must be " + val + " characters long");
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_MaxLength(Ctrl,val,error_msg)
{
	if(Ctrl.value.length > val)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Value cannot be more than " + val + " characters");
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_ExactLength(Ctrl,val,error_msg)
{
	if(Ctrl.value.length < val || Ctrl.value.length > val )
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Value must be " + val + " characters long");
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_File(Ctrl,val,error_msg)
{
	cur_ext = Ctrl.value.substr(Ctrl.value.length-3,3);
	valid_ext = val.split(",");
	var result = false;
	
	for(i=0; i<valid_ext.length; i++)
	{
		if(cur_ext == valid_ext[i])
		{
			result = true;
			break;
		}
		else
			result = false;
	}
	
	if(result == false)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("The allowed file types are : " + val);
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_Range(Ctrl,min,max,error_msg)
{
	if((parseInt(Ctrl.value) > max) || (parseInt(Ctrl.value) < min ))
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Number must be in range of " + min + " and " + max);
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_Required(Ctrl,error_msg)
{
	if(trim(Ctrl.value) == "")
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Value cannot be left empty");
		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_Email(Ctrl,error_msg)
{
	if(Ctrl.value == "")
		return true;
	if(chkEmail(Ctrl.value) == false)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Invalid E-Mail. Please Re-enter");

		Ctrl.focus();
		return false;
	}
	return true;
}

function Validate_Date(Ctrl,error_msg)
{
	if(Ctrl.value == "")
		return true;

	if(chkDate(Ctrl.value) == false)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Invalid Date. Try using format mm-dd-yyyy or mm/dd/yyyy");

		Ctrl.focus();
		return false;
	}
	return true;
}


function Validate_Numeric(Ctrl,valid_chars,error_msg)
{
	if(chkNumeric(Ctrl.value,valid_chars) == false)
	{
		if(error_msg != "")
			alert(error_msg);
		else
			alert("Value should be numeric");
		Ctrl.focus();
		return false;
	}
	return true;
}

function chkNumeric(strString,strValidChars,error_msg)
{
   var strChar;
   var blnResult = true;
 
   for (i = 0; i < strString.length && blnResult == true; i++)
   {
	  strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
      {
    	   blnResult = false;
      }
   }
   return blnResult;
}

function chkEmail(str)
{
	return(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str));
}

function chkDate(str)
{
	return (/^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/.test(str));
}

function trim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function DateCompare(date1Str, date2Str) 
{
	var date1  = new Date(date1Str);
	var date2  = new Date(date2Str);

	return date1 >= date2;
}
