var errorCount = 0 ;
var firstErrorComponent = "" ;
function checkEmail (component)
{
	var error="";
	var strng = $(component).value ;
	var emailFilter=/^.+@.+\..{2,3}$/;
	
	if (strng.length == 0)
    {
		error = "<li>Email id cannot be empty.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
		return error ;
	}   
	
	$("err_" + component).className="" ;
	if (!(emailFilter.test(strng)))
	{ 
		error = "<li>Email id is not valid.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	else
	{
		var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
		if (strng.match(illegalChars))
		{
			error = "<li>Email id contains illegal characters.</li>";
			$("err_" + component).className="fieldWithErrors" ;
			firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
			errorCount++;
		}
	}
	return error;    
}

function checkPhone (component)
{
	var error = "";
	var strng = $(component).value ;
	var stripped = strng.replace(/[\(\)\.\-\ ]/g, '');
	$("err_" + component).className="" ;
	if (isNaN(parseInt(stripped)))
	{
		error = "<li>Phone number contains illegal characters.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	if (!(stripped.length < 8))
	{
		error = "<li>Phone number is the wrong length. Make sure you included an area code.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	} 
	return error;
}

function checkPassword (component, name)
{
	var error = "";
	var strng = $(component).value ;
	var illegalChars = /[\W]/;
	$("err_" + component).className="" ;
    if ($(component).value.length == 0)
	{
		error = "<li>" + name + " cannot be empty.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	else if ((strng.length < 8) || (strng.length > 16))
	{
		error = "<li>" + name + " is too " + ((strng.length < 8 ) ? "Small" : "Big") + ".</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	else if (illegalChars.test(strng))
	{
		error = "<li>" + name + " contains illegal characters.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	} 
	else if (strng.search(/[0-9]+/) < 0)
	{
		error = "<li>" + name + " must contain at least one numeral.</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	return error;    
}    
function checkUsername (component)
{
	var error = "";
	var legalChars = /^[A-Za-z][A-Za-z0-9]*[_.]?[A-Za-z0-9]+$/;
	var strng = $(component).value ;
	$("err_" + component).className="" ;
	if ($(component).value.length == 0)
	{
		error = "<li>Username cannot be empty.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	else if ((strng.length < 6) || (strng.length > 16))
	{
		error = "<li>Username is too " + ((strng.length < 6 ) ? "Small" : "Big") + ".</li>";
		$("err_" + component).className="fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	else if (!legalChars.test(strng))
    {
		error = "<li>Username is not valid.</li>";
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	} 
	return error;
}       

trim = function(s) {
    return s.replace(/^\s+|\s+$/g,"");
}    

function isEmpty(component, name)
{
	var error = "" ;
	$("err_" + component).className="" ;
	if (trim($(component).value).length == 0)
	{
		if(trim(name).length > 0)
			error = "<li>" + name + " cannot be empty.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	return error ;
}

function isDifferent(component, confirmPasswd)
{
	var error = "";
   	$("err_" + confirmPasswd).className = "" ;
	if ($(confirmPasswd).value != $(component).value)
	{
		error = "<li>Passwords don't match.</li>";
		$("err_" + component).className = "fieldWithErrors" ;
		$("err_" + confirmPasswd).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	return error;
}

function isSame(oldPasswd, newPasswd)
{
	var error = "";
	if ($(newPasswd).value == $(oldPasswd).value)
	{
		error = "<li>Old & new passwords cannot be same.</li>";
		$("err_" + oldPasswd).className = "fieldWithErrors" ;
		$("err_" + newPasswd).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent == "") ? oldPasswd : firstErrorComponent ;
		errorCount++ ;
	}
	return error;
}

function isNumber(component, name)
{
	var error = "" ;
	$("err_" + component).className="" ;
	if (isNaN(parseInt($(component).value)))
	{
		error = "<li>" + name + " should be a number.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	return error ;
}

function isNumberKey(evt)
{
	var charCode = (window.event) ? window.event.keyCode : evt.which ;
	if (charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 13) 
    	return false;
	return true;
}

function isNaturalNumberEvent(value, evt)
{
    var charCode = (window.event) ? window.event.keyCode : evt.which ;
    var navigationKeyIDUpperLimit = 31;
    var asciiZero = 48;
    var asciiOne = 49;
    var asciiNine = 57;
    if(charCode <= navigationKeyIDUpperLimit) 
      return true ;
     
    if(value > 0 ) {
      if ((charCode < asciiZero || charCode > asciiNine)) 
          return false;
    } else {
      if ((charCode < asciiOne || charCode > asciiNine)) 
          return false;
    }
}

function checkLength(component, name, maxLength)
{
	var error = "" ;
	$("err_" + component).className="" ;
	if ($(component).value.length > maxLength)
	{
		error = "<li>" + name + " Cannot exceed " + maxLength + " characters.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	return error ;
}

function validateAndSubmit()
{
	var errors = "" ;
	firstErrorComponent = "" ;
	errors += isEmpty ('record_name','Name') ;
	
	errors += checkLength ('record_description','Description', 255) ;
	if (errors.length == 0)
  	{
  		document.forms[0].submit() ;
  	}
  	else
  	{       
		$(firstErrorComponent).focus() ;
  		$('errors').innerHTML = '<div class="errorExplanation" id="errorExplanation"><h2>' + controllerName +'::' + actionName + '</h2><p>There were problems with the following fields:</p><ul>' + errors + '</ul></div>' ;
  	}
	errorCount = 0 ;
	return false ;
}
	
function validateLength(component, event, maxLength)
{		
	var charCode = (event.which) ? event.which : event.keyCode ;
	switch(charCode)
	{
		case 8:
		case 127:
		case 37:
		case 38:
		case 39:
		case 40:
		case 46:		
			return true ;
    }

	if($(component).value.length < maxLength) 
		return true ;
	else
	    return false ;	
		
}

function validateMultiSelection (element)
{
    if(element.options[0].selected)
    {
	    for(var i=1; i < element.options.length; ++i) 
		{
	        element.options[i].selected = false ;
	    }
    }
}

function isContactNumberKey(evt)
{
    var charCode = (window.event) ? window.event.keyCode : evt.which ;
    var target = (window.event) ? window.event.srcElement  : evt.target ;
		switch (charCode)
		{
			case 8: 
			case 9:	
			case 13:				
					return true ;
		}
		var currentCharacter = String.fromCharCode(charCode) ;
		var value = '' + $(target).value + currentCharacter ;
		realPattern = /^\+?[0-9]*$/ ;

		if (!realPattern.test(value))
			return false ;
		return true ;
}

function isFloat(evt)
{
    var charCode = (window.event) ? window.event.keyCode : evt.which ;
    var target = (window.event) ? window.event.srcElement  : evt.target ;
		switch (charCode)
		{
			case 8: 
			case 9:	
			case 13:				
					return true ;
		}
		var currentCharacter = String.fromCharCode(charCode) ;
		var value = '' + $(target).value + currentCharacter ;
		var realPattern = /^[0-9]*\.?[0-9]*$/ ;

		if (value == '.')
		{
    		$(target).value = '0' ;
			return true ;
		}
		if (!realPattern.test(value))
			return false ;
		return true ;
}

function isNegativeNumberOrDouble(evt, isDouble)
{
    var charCode = (window.event) ? window.event.keyCode : evt.which ;
    var target = (window.event) ? window.event.srcElement  : evt.target ;
    switch (charCode)
	{
	       	case 8: 
		case 9:	
		case 13:				
			return true ;
    	}
	var currentCharacter = String.fromCharCode(charCode) ;
	var value = '' + $(target).value + currentCharacter ;
	var realPattern;
	if(isDouble)
	   realPattern = /^-?[0-9]*\.?[0-9]*$/ ;   
	else
	   realPattern = /^-?[0-9]*$/ ;
	if(($(target).value == '' || $(target).value == '-') &&  currentCharacter == 0)	
	{
	   return false ;
	}
	if (!realPattern.test(value))
		return false ;
	return true ;
}

function isPositiveNumber(component, name)
{
	var error = "" ;
	$("err_" + component).className="" ;
	var realPattern = /^[0-9]*\.?[0-9]*$/ ;
	if ((isNaN(parseInt($(component).value))) || (!realPattern.test($(component).value)))
	{
		error = "<li>" + name + " should be a positive number.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++;
	}
	return error ;
}

function checkDaysToExpire(component, name){
    var error = "" ;
	$("err_" + component).className="" ;
	error += isEmpty (component, name) ;
	if(error.length > 0)
	   return error;
    if($(component).value < 1) 
	{
		error = "<li>" + name + " Should be greater than Zero.</li>" ;
		$("err_" + component).className = "fieldWithErrors" ;
		firstErrorComponent = (firstErrorComponent=="")?component:firstErrorComponent;
		errorCount++ ;
	}
	return error ;
}
