/**
	This is the global file to form validation. 

	Form attributes using by the file is as follows
	1)	 valid
	2)	 errname
	3)	 filetype

	Syntax of the each attribute is as follows
	1)	 valid
	-----------
		This attribute is used to define that element is mandatory or not and also to define that element hold only
		integer or real or date or alphanumeric or file or any characters. General syntax of this attribute is
		{1}_{2}
		here 
		{1} -> m | n
		m -> Mandatory
		n ->	Non Mandatory

		{2} -> i | r | d | f | a | s
		i ->	Integer
		r ->	Real
		d ->	Date
		f ->	File
		a ->	Alpha Numeric
		s ->	Special Char

	2)	 errname
	---------------
		This attribute is used to display the element name to show in the alert box. It contain any string value.

	3)	 filetype
	--------------
		This attribute is used which type of file can be accepted in file element. Now they are three type of files 
		are declared here those values are

			(1)	image :	 For all the image file.
			(2	)	doc     :	 For all the documents.
			(3)	html    : For all the html files.
		
*/

/**
	Some of the constants and error message is prefixed here
*/

var MANDATORY_ERROR = "* Please [1] [2]";
var INTEGER_ERROR = "* Please Enter Only Integer Values in [1]";
var MULTIPLELISTBOX_ERROR="Please Select a value in [2]";
var ET_ERROR = "* Please Enter Only Integer Values in [1].The Range is [1-60].";
var NAME_ERROR = "* Please Enter Only Alphabets,Numbers and Special Characters \ - ( , ) . / ' in [1]";
var REAL_ERROR = "* Please Enter Only Real Values in [1]";
var DATE_ERROR = "* Please Enter Valid Calendar Date in [1]. Format is DD/MM/YYYY";
var ALPHA_ERROR = "* Please Enter Only Alpha Numeric Characters in [1]";
var EMAIL_ERROR = "* Please Enter Valid Email Id";
var TIME_ERROR = "* [1] Accepts Alpha Numeric,Colon and Hyphen";

var SPECIAL_ERROR = "* Some of the Special Characters are not Allowed in [1]";

var IMAGE_FILE_ERROR = "* [1] Accepts Only Jpeg/Jpg/Bmp/gif Files";
var DOC_FILE_ERROR = "* Please Choose Only Pdf or Word Document File in [1]";
var HTML_FILE_ERROR = "* Please Choose Only Html File in [1]";

var IMAGE_FILE = /\.(gif|jpeg|jpg|bmp)$/gi;
var DOC_FILE = /\.(doc|pdf)$/gi;
var HTML_FILE = /\.(htm|html)$/gi;

var MAX_LENGTH_ERROR = "* Maximum No of Character is Allowed in [1] is [2]";
var MONEYVALUE_ERROR = " * [1]  Accepts Only Numbers and Two Decimal Points. Ex[XXXXXXXX.XX]."; 
var NAMEALPHABET_ERROR = " * [1] Accepts Alphabets and Space.It should start with Alphabet.";
var MINIMUM_ERROR="* Minimum No of Character in [1] should be [2] Characters  ";
var MAXIMUM_ERROR="Maximum No of Character in [1] is [2] Characters ";
var MINIMUM_ONE_NUMERIC_ERROR="* [1] Accepts Alphabet with minimum one Numeric character";
var MINIMUM_ONE_SPECIAL_CHARACTER="* [1] Accepts Minimum One Special Character";
var MINIMUM_ONE_UPPERCASECHARACTER="* [1] Accepts Minimum One Uppercase Character";
var MINIMUM_ONE_ALPHABET="* [1] Accepts Minimum one Alphabet";
var MINIMUM_ONE_SPECIALCHARACTER="* [1] Accepts Minimum one Special Character";
var COMPARISION_ERROR="* [1] and [2] Must be same";
var CODE_ERROR="[1] Accepts only AlphaNumeric ,First Character must be  Alphabet";
var NAME_ERROR="[1] Accepts alphabets, Underscore, spaces and Hypen ,First Character must be  Alphabet";
var CODE_ERROR="[1] Accepts only AlphaNumeric ,First Character must be  Alphabet";
var NA_ERROR="[1] Accepts alphabets and spaces  ,First Character must be  Alphabet";
var CONA_ERROR="[1] Accepts alphabets and space.";
var CURR_ERROR="[1] Accepts alphabets Only.";
var COMM_ERROR="[1] Accepts AlphaNumeric and Special Characters.";



/**
	This function takes user form as an input parameter and it traverse one by one form element according 
	to attributes it will pass the control to other functions. If any function returns false then it will display
	alert message to the user and control will return to the caller.
	
	@input	form		user form
	@output	false if it user enters any wrong character or true

*/

function passwordvalidation(objElement)
{


		if(objElement.value.length<objElement.getAttribute("minlength"))
		{

		jsfDisplayErrorMessage(MINIMUM_ERROR,objElement.getAttribute("errname"),objElement.getAttribute("minlength"));
		return false;
		
		}
		if(objElement.getAttribute("comparefield")!=null)
		{
		
		var comparefield=objElement.getAttribute("comparefield");
		if(document.getElementById(comparefield).value!=objElement.value)
		{
		jsfDisplayErrorMessage(COMPARISION_ERROR,objElement.getAttribute("errname"),document.getElementById(comparefield).getAttribute("errname"));
		return false;
		}
		
		}
		
		var complexity=objElement.getAttribute("complexity");
		
	   switch (parseInt(complexity))
				{
				case 1 :
						//return jsfCheckAlphaNumeric(objElement);
						return jsfCheckMinimumOneAlphabet_OneNumeric(objElement);
						break;
				case 2 :
						return jsfCheckInteger(objElement);
						break;
				case 4:
						return jsfCheckNotSpecialChar_oneAlphabet(objElement);
						break;
				case 9 :
						return jsfCheckAlphaNumericwithOneNumeric(objElement);	
						break;
						
						
				case 12 :
						return jsfCheckAlphaNumeric_specialCharacter_OneNumeric(objElement);
						break;	
				case 17 :
						return jsfCheckMinimumOneUpperCaseCharacter(objElement);
						break;
				case 20 :
						return jsfCheckMinimumOneUpper_CaseCharacter_Special(objElement);
						break;
				case 25 :
						return jsfCheckMinimumOneUpper_OneNumeric(objElement);	
						break;
				case 28	:
						return jsfCheckMinimumOneUpper_OneNumeric_special(objElement);
						break;
				case 33 :
						return jsfCheckMinimumOneAlphabet(objElement);
						break;
				case 36 :
						return jsfCheckMinimumOneAlphabet_Special(objElement);
						break;
				
				case 41 :
						return jsfCheckMinimumOneAlphabet_OneNumeric(objElement);
						break;
				case 44:
						return jsfCheckMinimumOneAlphabet_OneNumeric_special(objElement);
						break;
						
				case 49 :
						return jsfCheckMinimumOneUpperCase_Alphabet(objElement);
						break;
						
				case 52 :
						return jsfCheckMinimumOneUpperCase_Alphabet_special(objElement);
						break;
				case 57 :
						return jsfCheckMinimumOneUpperCase_Alphabet_Numeric(objElement);
						break;
						
				case 60 :
						return jsfCheckMinimumOneUpperCase_Alphabet_Numeric_Special(objElement);
						break;
				default :
						return true;
				}
	
	return true;	
		
}
function jsfValidateForm(form) {
	var attValid;
	var objElement;
	var controls = jsfChildElements(form);
	for(var i = 0; i < controls.length; i++) {
		objElement = controls[i];
		
		attValid = objElement.getAttribute("valid");
		if (attValid)
		  {
			if (!jsfCheckFormElement(objElement, attValid) ) {
		
		

				return false;
			}
			else if(objElement.getAttribute("type")=="password")
			{
			
			 if( !(passwordvalidation(objElement)))
			 {
			 return false;
			 }
			else
			{
			}
			}
		
		}
	}
	return true;
}

function jsfChildElements(inputCtl) {
	if(inputCtl.tagName == "FORM" ) {
		return inputCtl.elements;
	}else {
		var isSortNedded = (arguments.length > 1) ? arguments[1] : true;
		arrObject = new Array();
		var re = /INPUT|SELECT|TEXTAREA|hidden/gi;
		arrObject = jsfAddObjectToArray(arrObject, inputCtl.getElementsByTagName("INPUT"));
		arrObject = jsfAddObjectToArray(arrObject, inputCtl.getElementsByTagName("SELECT"));
		arrObject = jsfAddObjectToArray(arrObject, inputCtl.getElementsByTagName("TEXTAREA"));
		arrObject = jsfAddObjectToArray(arrObject, inputCtl.getElementsByTagName("HIDDEN"));
		if(arrObject.length > 0 && isSortNedded) {
			arrObject = jsfSortArrayElements(arrObject, arrObject[0].form.elements);
		}
		return arrObject;
	}
}

//	Sort elements in the form order by given 

function jsfSortArrayElements(divArr, formArr) {
	var arrElements = new Array();
	for(var i = 0; i < formArr.length; i++) {
		if( jsfIsArrayValueExist(divArr, formArr[i]) ) {
			arrElements[arrElements.length] = formArr[i];
		}
	}
	return arrElements;
}

function jsfAddObjectToArray(array, object) {
	for(var i=0; i < object.length; i++) {
		array[array.length] = object[i];
	}
	return array;
}

function jsfClearValues(inputCtl) {
	var controls = jsfChildElements(inputCtl);
	for(var i = 0; i < controls.length; i++) {
		if(controls[i].type == "text" || controls[i].type.match("^select")) {
			controls[i].value = "";
		}
	}
}

/**
	This function check the giving form element according to their valid parameter

	@input objElement Form element
	@input	attValid	Attribute in each form element
	@output	false if it user enters any wrong character or true

*/

function jsfCheckFormElement(objElement, attValid) {
	if ( attValid.match( /^m/i ) )  {
		if ( !jsfCheckMandatory(objElement) ) {
			return false;
		}
	}
	
	if ( trim(objElement.value) != "" ) {
		var result = new String(attValid.match(/_\w+$/gi));
		result = result.substr(1, result.length - 1);
		switch (result) {
			case "i":
				if ( !jsfCheckInteger(objElement) ) {
					return false;
				}
				break;

			case "si":
				if ( !jsfCheckSignedInteger(objElement) ) {
					return false;
				}
				break;

		
			case "r":
				if ( !jsfCheckReal(objElement) ) {
					return false;
				}
				break;

			case "sr":
				if ( !jsfCheckSignedReal(objElement) ) {
					return false;
				}
				break;
			
			case "d":
				if ( !jsfCheckDate(objElement) ) {
					return false;
				}
				break;

			case "a":
				if ( !jsfCheckAlphaNumeric(objElement) ) {
					return false;
				}
				break;

			case "s":
				if ( !jsfCheckSpecialChar(objElement) ) {
					return false;
				}
				break;

			case "f":
				if ( !jsfCheckFile(objElement) ) {
					return false;
				}
				break;

			case "n":
				if ( !jsfCheckName(objElement) ) {
					return false;
				}
				break;

			case "e":
				if ( !jsfCheckEmail(objElement) ) {
					return false;
				}
				break;

			case "t":
				if ( !jsfCheckTime(objElement) ) {
					return false;
				}
				break;

			case "mo":
					if(!jsfCheckMoneyValue(objElement) ) {						
						return false;
					}
					break;
			case "et":
					if(!jsfCheckEstimatedTime(objElement) ) {						
						return false;
					}
					break;
			case "na":
					if(!jsfCheckAlphaName(objElement) ) {						
						return false;
					}
					break;
			case "ml":
				if(!jsfCheckmultiplelistbox(objElement))
				{
				return false;
				}
				break;

			case "code":
					if(!(jsfCheckCode(objElement)))
					return false;
					break;
			case "name":
					if(!(jsfCheckNaame(objElement)))
					return false;
					break;
			case "countryname":
					if(!(jsfCheckCountryName(objElement)))
					return false;
					break;
			case "currencyname":
					if(!(jsfCheckCurrencyName(objElement)))
					return false;
					break;
			case "comments":
					if(!(jsfCheckComments(objElement)))
					return false;
					break;
			case "phone":
				if ( !jsfCheckPhone(objElement) )
					return false;
					break;
        }
	
	}

	if ( !jsfCheckMaxLength(objElement) ) {
		return false;
	}
	return true;
}

/**
	This function checks whether the given form element contains any value or not

	@input objElement as Form Element
	@output value boolean true if it contains any value otherwise false
*/
//Checks for Code
function jsfCheckCode(objElement)
{
var re=/^[a-zA-Z][a-zA-Z0-9]*$/gi
if(objElement.value.match(re)!=objElement.value)
{
jsfDisplayErrorMessage(CODE_ERROR,objElement.getAttribute("errname"));
return false;
}
return true;
}
//Checks for Name
function jsfCheckNaame(objElement)
{
var re=/^[a-zA-Z][a-zA-Z\s]*$/gi
if(objElement.value.match(re)!=objElement.value)
{
jsfDisplayErrorMessage(NA_ERROR,objElement.getAttribute("errname"));
return false;
}
return true;
}
//Checks for Country Name
function jsfCheckCountryName(objElement)
{
var re=/^[a-zA-Z\s]*$/gi
if(objElement.value.match(re)!=objElement.value)
{
jsfDisplayErrorMessage(CONA_ERROR,objElement.getAttribute("errname"));
return false;
}
return true;
}
//Checks for Currency Name
function jsfCheckCurrencyName(objElement)
{
var re=/^[a-zA-Z\s]*$/gi
if(objElement.value.match(re)!=objElement.value)
{
jsfDisplayErrorMessage(CURR_ERROR,objElement.getAttribute("errname"));
return false;
}
return true;
}
//Checks for Comments
function jsfCheckComments(objElement)
{
var re=/^[a-zA-Z0-9\s,@#$%&()<>]*$/gi
if(objElement.value.match(re)!=objElement.value)
{
jsfDisplayErrorMessage(COMM_ERROR,objElement.getAttribute("errname"));
return false;
}
return true;
}
function jsfCheckMandatory(objElement) {
	var type = "Enter";
	//alert(objElement.getAttribute("type"));
	
	if((objElement.getAttribute("type")!="text")&&(objElement.getAttribute("type")!="password"))
	{
	if(objElement.options.selectedIndex==0)
	{
		objElement.focus();
		alert("Please Select "+objElement.getAttribute("errname"));
		return false;
	}
	

	
	}
	if ( trim(objElement.value) == "" ) {
		if(objElement.type.match("^select")) type = "Select";
		jsfDisplayErrorMessage(MANDATORY_ERROR, type, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}


/**
	This function checks the given value in the form is an integer

	@input objElement as Form Element
	@output value boolean true if it is an integer or false
*/

function jsfCheckInteger(objElement) {
	var re = /^[0-9]\d*|^0$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(INTEGER_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}
function jsfCheckPhone(objElement) {
   alert(5);
	var re = /^[0-9]\d*|^1$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(INTEGER_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}
function jsfCheckmultiplelistbox(objElement) {
var cnt=0;
for(var i=0;i<objElement.options.length;i++)
		{
		if ( objElement.options[i].selected ) {
		cnt=cnt+1;
		}
		}
		if (cnt<=0)
		{
		jsfDisplayErrorMessage(MULTIPLELISTBOX_ERROR, objElement.getAttribute("errname"));
		alert("error");
		return false;
		}
		alert("noerror");
	return true;
}

function jsfCheckSignedInteger(objElement) {
	var re = /^[+|\-]?[1-9]\d*|^0$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(INTEGER_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}
/**
	This function checks the given value in the form is an real

	@input objElement as Form Element
	@output value boolean true if it is an real or false
*/

function jsfCheckReal(objElement) {
	var re = /^[1-9]\d*\.?\d*|^0\.\d+|^0$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(REAL_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

function jsfCheckSignedReal(objElement) {
	var re = /^[+|\-]?[1-9]\d*\.?\d*|^0\.\d+|^0$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(REAL_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

/**
	This function checks the given value in the form is an valid calendar date

	@input objElement as Form Element
	@output value boolean true if it is an valid calendar date or false
*/

function jsfCheckDate(objElement) {
	if ( !jsfCheckDateByValue(objElement.value) ) {
		jsfDisplayErrorMessage(DATE_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	
	return true;
}

function jsfCheckDateByValue(strInput) {
	var re = /^((29-0?2-\d{2}([13579][26]|[02468][048]))|((0?[1-9]|[1-2]\d|3[0-1])-(0?[13578]|10|12)-\d{4})|((0?[1-9]|[1-2]\d|30)-(0?[469]|11)-\d{4})|((0?[1-9]|1\d|2[0-8])-0?2-\d{4}))/g;
	strInput = strInput.replace(/\-/g, ".");
	strInput = strInput.replace(/\//g,"-");
	if (strInput.match(re) == strInput) {
		return true;
	}
	return false;
}

/**
	This function checks the given value in the form is alpha numeric character

	@input objElement as Form Element
	@output value boolean true if it is alpha numeric characters or false
*/

function jsfCheckAlphaNumericwithOneNumeric(objElement)
{
	
	if(!(jsfCheckAlphaNumeric(objElement)))
	{
	//jsfDisplayErrorMessage(MINIMUM_ONE_NUMERIC_ERROR,objElement.getAttribute("errname"));
	return false;
	}
	var re=/[a-zA-Z]\d{1}|\d{1}[a-zA-Z]/gi
	if(!(re.test(objElement.value)))
	{
	jsfDisplayErrorMessage(MINIMUM_ONE_NUMERIC_ERROR,objElement.getAttribute("errname"));
	return false;
	}
	
	var re=/[a-zA-Z]/g
	if(!(re.test(objElement.value)))
	jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
	else
	return true;
	
}
function jsfCheckMinimumOneAlphabet_OneNumeric(objElement)
{

if((jsfCheckAlphaNumeric(objElement)))
{
	
if(jsfCheckMinimum_OneAlphabet(objElement))
	return (jsfCheckOneNumeric(objElement));
}
else
return false;	
}
function jsfCheckMinimumOneAlphabet_OneNumeric_special(objElement)
{
if(jsfCheckNotSpecialChar(objElement))
{
if(jsfCheckMinimum_OneAlphabet(objElement))
{
	return (jsfCheckOneNumeric(objElement));
	}
	else
	{
	
	return false;
	}
}
else
return false;
}
function jsfCheckMinimumOneUpperCase_Alphabet_Numeric_Special(objElement)
{
if(jsfCheckNotSpecialChar(objElement))
{


if(jsfCheckMinimum_OneAlphabet(objElement))
{

		if (jsfCheckMinimumOneUpper_CaseCharacter(objElement))
		{
		
		return jsfCheckOneNumeric(objElement);
		}
}
else
{
return false;
}

}

else 
return false;
}
function jsfCheckMinimumOneUpperCase_Alphabet_Numeric(objElement)
{

if((jsfCheckAlphaNumeric(objElement)))
{

if(jsfCheckMinimum_OneAlphabet(objElement))
{

		if (jsfCheckMinimumOneUpper_CaseCharacter(objElement))
		{
		
		return jsfCheckOneNumeric(objElement);
		}
}
else
{
return false;
}

}
else
return false;
}
function jsfCheckMinimumOneUpperCase_Alphabet(objElement)
{
if((jsfCheckAlphaNumeric(objElement)))
{
if(jsfCheckMinimum_OneAlphabet(objElement))
{
return jsfCheckMinimumOneUpper_CaseCharacter(objElement);
}
else
{
return false;
}
}
else
return false;
}
function jsfCheckMinimumOneUpperCase_Alphabet_special(objElement)
{

	if(jsfCheckMinimum_OneAlphabet(objElement))
	{
		if(jsfCheckMinimumOneUpper_CaseCharacter(objElement))
		{
			if(jsfCheckOneSpecialCharacter(objElement))
			return true
			else
			return false;
		}
		else
		return false;
	}
	else
	{
	return false;
	}
}
function jsfCheckMinimum_OneAlphabet(objElement)
{

	var re=/[a-zA-Z]/g
	if(!(re.test(objElement.value)))
	{
	jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
	return false;
	}
	return true;
}
function jsfCheckMinimumOneAlphabet(objElement)
{
	if((jsfCheckAlphaNumeric(objElement)))
	{
	var re=/[a-zA-Z]/g
	if(!(re.test(objElement.value)))
	jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
	else
	return true;
	}

	return false;
}
function jsfCheckMinimumOneAlphabet_Special(objElement)
{
	var re=/[a-zA-Z]/g
		if(!(re.test(objElement.value)))
		{
			jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
			return false;
		}
	if(jsfCheckOneSpecialCharacter(objElement))
	{
		return true;
	}
	else
	{
		return false;
	}

	return false;
}
function jsfCheckMinimumOneUpper_CaseCharacter(objElement)
{
	var re=/[A-Z]/g
	if(!(re.test(objElement.value)))
	{
	jsfDisplayErrorMessage(MINIMUM_ONE_UPPERCASECHARACTER,objElement.getAttribute("errname"));
	return false;
	}
	return true;
}
//New function
function jsfCheckMinimumOneUpper_CaseCharacter_Special(objElement)
{
	var re=/[A-Z]/g
	
		if(!(re.test(objElement.value)))
		{
		jsfDisplayErrorMessage(MINIMUM_ONE_UPPERCASECHARACTER,objElement.getAttribute("errname"));
		return false;
		}
		if(jsfCheckOneSpecialCharacter(objElement))
		{
			return true;
		}
		else
		{
			return false;
		}
	
	
	return true;
}
function jsfCheckMinimumOneUpperCaseCharacter(objElement)
{
	if(jsfCheckAlphaNumeric(objElement))
	{
	var re=/[A-Z]/g
	if(!(re.test(objElement.value)))
	{
	jsfDisplayErrorMessage(MINIMUM_ONE_UPPERCASECHARACTER,objElement.getAttribute("errname"));
	return false;
	}
	return true;
	}
	else
	{
	return false;
	}
}
function jsfCheckMinimumOneUpper_OneNumeric_special(objElement)
{
	if(jsfCheckNotSpecialChar(objElement))
	{
		if(jsfCheckMinimumOneUpper_CaseCharacter(objElement))
		{
			if(jsfCheckOneNumeric(objElement))
			return true
			else
			return false;
		}
		else
		return false;
	}
	else
	{
	return false;
	}
}

function jsfCheckMinimumOneUpper_OneNumeric(objElement)
{
	if((jsfCheckAlphaNumeric(objElement)))
	{
	if(jsfCheckMinimumOneUpper_CaseCharacter(objElement))
	{
	if(jsfCheckOneNumeric(objElement))
	return true
	else
	return false;
	}
	else
	return false;
	}
}
function jsfCheckOneNumeric(objElement)
{
	var re=/[0-9]/gi

	if(!(re.test(objElement.value)))
	{

	jsfDisplayErrorMessage(MINIMUM_ONE_NUMERIC_ERROR,objElement.getAttribute("errname"));
	return false;
	}
	return true;
}
function jsfCheckOneSpecialCharacter(objElement)
{
	var re= /[!@#$%^&*()]/gi
	var string =re.exec(objElement.value);

	if(string==null)
	jsfDisplayErrorMessage(MINIMUM_ONE_SPECIAL_CHARACTER,objElement.getAttribute("errname"))
	else
	return true;
}
function jsfCheckAlphaNumeric_specialCharacter_OneNumeric(objElement)
{
	if(jsfCheckOneSpecialCharacter(objElement))
	{
		if(jsfCheckOneNumeric(objElement))
		{
		var re=/[a-zA-Z]/g
		if(!(re.test(objElement.value)))
		jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
		else
		return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
	return false;
	}
}
function jsfCheckAlphaNumeric(objElement) 
{
	var re = /^[a-zA-Z0-9_\s]*/gi;
	//alert(objElement.value.match(re));
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(ALPHA_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

function jsfCheckName(objElement) {
	//var re = /^[a-z][a-z0-9\(\)\_\-\'\.\,\/\\\s]*$/gi
	
	var re = /^[a-z][a-zA-Z\(\)\_\-\'\.\,\/\\\s]*$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(NAME_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

function jsfCheckEmail(objElement) {
	//var re = /^[a-zA-Z][a-zA-Z0-9\-_.]+[@][a-zA-Z0-9]+[.][a-zA-Z.]+$/gi;
	var re = /^([a-zA-z])*([a-zA-z\.])\w+([\.\-]\w+)*\@\w+([\-\.]\w+)*\.[a-z]{2,4}$/gi	
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(EMAIL_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

function jsfCheckTime(objElement) {
//	var re = /^([01][0-9]|2[0-4]):[0-5][0-9]$/gi;
//	var re = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/gi;
	var re = /^[a-zA-Z0-9][a-zA-Z0-9\:\-\s]*/gi;

	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(TIME_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}
/**
	This function checks the given value in the form is special character

	@input objElement as Form Element
	@output value boolean true if it is special char or false
*/
function jsfCheckNotSpecialChar(objElement) {
	var re = /[!@#$%^&*()_+|?]/gi;
	if ( re.exec(objElement.value)) {
	return true;
	}
			jsfDisplayErrorMessage(MINIMUM_ONE_SPECIALCHARACTER, objElement.getAttribute("errname"));
	
	return false;
}
//Complexity 4
function jsfCheckNotSpecialChar_oneAlphabet(objElement) {
	var re = /[\!@#$%^&*()_+|?]/gi;
	if ( re.exec(objElement.value)) 
	{
		var re=/[a-zA-Z]/g
		if(!(re.test(objElement.value)))
		jsfDisplayErrorMessage(MINIMUM_ONE_ALPHABET,objElement.getAttribute("errname"));
		else
		return true;
	//return true;
	}
	else
	{
			jsfDisplayErrorMessage(MINIMUM_ONE_SPECIALCHARACTER, objElement.getAttribute("errname"));
	
	return false;
	}
}
function jsfCheckSpecialChar(objElement) {
	var re = /^[\w\W]*/gi;
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(SPECIAL_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}

/**
	This function checks the given file is in right format according to the file type attribute

	@input objElement as Form Element
	@output value boolean true if it is in correct format or false
*/

function jsfCheckFile(objElement) {
	var fileType = objElement.getAttribute("filetype");
	switch (fileType) {
		case "image":
			if ( !objElement.value.match(IMAGE_FILE) )  {
				jsfDisplayErrorMessage(IMAGE_FILE_ERROR, objElement.getAttribute("errname"));
				objElement.focus();
				return false;
			}
			break;
		case "doc":
			if ( !objElement.value.match(DOC_FILE) )  {
				jsfDisplayErrorMessage(DOC_FILE_ERROR, objElement.getAttribute("errname"));
				objElement.focus();
				return false;
			}
			break;
		
		case "html":
			if ( !objElement.value.match(HTML_FILE) )  {
				jsfDisplayErrorMessage(HTML_FILE_ERROR, objElement.getAttribute("errname"));
				objElement.focus();
				return false;
			}
			break;
	
	}
	return true;
}


/**
	This function check the maximum length of the particular element and it display error when maxlength is exceed.

	@input formElement 
	@output true if it does not exceed maxlength otherwise false
*/

function jsfCheckMaxLength(objElement) {
	var maxLength = objElement.getAttribute("maxlength");
	if ( !maxLength ) {
		maxLength = objElement.getAttribute("maxlen");
	}
	if (maxLength) {
		maxLength = parseInt(maxLength);
		var length = objElement.value.length;
		if (length > maxLength) {
			jsfDisplayErrorMessage(MAX_LENGTH_ERROR, objElement.getAttribute("errname"), maxLength);
			objElement.focus();
			return false;
		}
	}
	return true;
}


/**
	This function display error message in alert box to the user. This function takes n number of parameters.

	@input errorMsg string which error message has to be displayed
	@params n number of parameter will replace the place holder in the error message

*/

function jsfDisplayErrorMessage(errorMsg) {
	var argv = arguments;
	var argc = arguments.length;
	for ( var i = 0; i < argc ; i++ ) {
		var re = new RegExp("\\["+i+"\\]","g");
		errorMsg = errorMsg.replace(re, argv[i]);
	}
	alert(errorMsg);
	return true;
}

/**
	This function replaces the leading and trailing whitespaces
	@input strInput any string value
	@output value after removing leading & trailing whitespaces
*/

function trim(strInput) {
	return strInput.toString().replace(/(^\s*|\s*$)/gi,"");
}

/**
	This function reset whole form parsing one by one element
	@input form to be resetted

*/

function jsfClearForm(form) {
	var type, objElement;
	for(var i=0; i < form.elements.length; i++) {
		objElement = form.elements[i];
		type = objElement.type;
		if  (type.match(/text|textarea/) )	{
			objElement.value = "";
		}
		if (type == "select" ) {
			objElement.selectedIndex = 0;
		}
	}
}

/**
	This function check the URL is correctly given or not
	@input URl to be checked
	@return true it the url is correctly formatted, otherwise false
*/

function jsfCheckUrl(url) {
	var re = /[\.\/\\]|http/gi
	if ( url.match(re) ) {
		return true;
	}
	return false;
}


/**
	This function change date to long
*/
function jsfGetLongDate(dd,mm,yy){
	dd=dd.toString()
	mm=mm.toString()
	yy=yy.toString()
	return parseInt(yy+mm+dd)
}
/**
	Extract date from given form date 
*/
function jsfGetFormDate (date) {
	var re = /^(0?\d{1,2})[\/-]0?\d{1,2}[\/-]\d{4}/g
	var arr= re.exec(date);
	var ret = false;
	for (i in arr) {
		if ( i==1) ret = true;
	}
	if (ret) return jsfCheckDateLength( arr[1] );
	return 0;
}

/**	
	Extract month from given form date 
*/
function jsfGetFormMonth (date) {
	var re = /^0?\d{1,2}[\/-](0?\d{1,2})[\/-]\d{4}/g
	var arr= re.exec(date);
	var ret = false;
	for (i in arr) {
		if ( i==1) ret = true;
	}
	if (ret) return jsfCheckDateLength( arr[1] );
	return 0;
}

/**
	Extract year from given form date 
*/

function jsfGetFormYear (date) {
	var re = /^0?\d{1,2}[\/-]0?\d{1,2}[\/-](\d{4})/g
	var arr= re.exec(date);
	var ret = false;
	for (i in arr) {
		if ( i==1) ret = true;
	}
	if (ret) return arr[1];
	return 0;
}
 
 /**
	This function compare two dates
 */
function jsfCompareDate (date1,date2) {
	var date1 = jsfGetLongDate ( jsfGetFormDate(date1), jsfGetFormMonth(date1), jsfGetFormYear(date1));
	var date2 = jsfGetLongDate ( jsfGetFormDate(date2), jsfGetFormMonth(date2), jsfGetFormYear(date2));
	if (date1 == date2) return 0;
	if (date1 > date2) return 1;
	if (date1 < date2) return -1;
}

function jsfCheckDateLength (date) {
	var strDate = date.toString();
	if ( strDate.length == 1) strDate = "0"+strDate;
	return strDate;
}

function jsfIsArrayValueExist(arr, value) {
	for(var i = 0; i < arr.length; i++) {
		if(arr[i] == value)return true;
	}
	return false;
}

function jsfCancelClicked() {
	 location.href = location.href;
}

function getObject(id) {
	return document.getElementById(id);
}


function jsfReadOnly(inputCtl) {
	
	var controls = jsfChildElements(inputCtl);
	for(var i = 0; i < controls.length; i++) {
		if(controls[i].type == "text" || controls[i].type.match("^select") || controls[i].type.match("^checkbox") || controls[i].type.match("^textarea") ) {
			controls[i].disabled=true;
		}
	}
}

function jsfReleaseReadOnly(inputCtl) {
	var controls = jsfChildElements(inputCtl);
	for(var i = 0; i < controls.length; i++) {
		if(controls[i].type == "text" || controls[i].type.match("^select") || controls[i].type.match("^checkbox") || controls[i].type.match("^textarea") ) {
			controls[i].disabled=false;
		}
	}
}



/*  This Function Checks the Money Value . The Length is 11 for example (12345678.00) */
function jsfCheckMoneyValue(objElement){			
		var re = /^[1-9][0-9]{0,7}(\.[0-9]{2})?$/gi
		if(objElement.value.match(re) != objElement.value){
			jsfDisplayErrorMessage(MONEYVALUE_ERROR, objElement.getAttribute("errname"));
			objElement.focus();
			return false;
		}
	return true;
} 


function jsfCheckEstimatedTime(objElement) {
	var re = /^([1-9]|[1-5][0-9]|6[0])$/gi
	if ( objElement.value.match(re) != objElement.value ) {
		jsfDisplayErrorMessage(ET_ERROR, objElement.getAttribute("errname"));
		objElement.focus();
		return false;
	}
	return true;
}


/* This Function checks the valid Name. */

function jsfCheckAlphaName(objElement) {
		var re = /^[a-zA-Z][a-zA-Z\s]*/gi
		if(objElement.value.match(re) != objElement.value)	{				 
			jsfDisplayErrorMessage(NAMEALPHABET_ERROR, objElement.getAttribute("errname"));
			objElement.focus();
			return false;
		}
	return true;
}


function encodeXml(input) {
	input = input.replace(/&/g, "&amp;");
	input = input.replace(/</g, "&lt;");
	input = input.replace(/>/g, "&gt;");
	input = input.replace(/'/g, "&apos;");
	input = input.replace(/"/g, "&quot;");
	return input;
}

function Logouts()
{
 // alert(childwindow);
 if(childwindow != "")
	 {
		childwindow.close();
	 }
}
function CheckSearchCondition(objtxt,objdr)
{
	var index=document.getElementById(objdr).selectedIndex;
	
	if(index=="0")
	{	  
		if(trim(document.getElementById(objtxt).value)!="")
		{
			alert("Please clear the Search Value");
			document.getElementById(objtxt).focus();
			return false;
		}
	}
}




/*
function searchValid1(objtxt,objdr)
{
 var search = /^[a-zA-Z\s]*$/;
 var index=document.getElementById(objdr).selectedIndex;
 if(index > 0)
 {
	if(index > 1)
	{ 
 		if(document.getElementById(objtxt).value == "")
		{
		alert("Please enter the value to be searched");
		document.getElementById(objtxt).focus();
		return false;
		}
	}
	else
	{
		return CheckSearchCondition(objtxt,objdr);
    }
 }
 if(document.getElementById(objdr).selectedIndex == 0)
  {
  alert("Please select the Search Option");
  document.getElementById(objdr).focus();
  return false;
  }
  /* if(!search.test(document.getElementById("txtSearch").value))
  {
   alert("Search value accepts only Alphabets and Spaces");
   document.getElementById("txtSearch").focus();
   return false;
  }
  return true;
 }
*/
function SearchClear(txtSearch,DrSearch)
{
	document.getElementById(DrSearch).selectedIndex=0;
	document.getElementById(txtSearch).value="";
	//document.getElementById(Lblerr).innerHTML = "";
}	
function keycheck(e)
{
	if(e.keyCode=="13")
	{
		e.keyCode=0;
	}
}
//Dateconversion from 12/jan/2006 as 12/01/2006
function DateConversionMMM_MM(gdate)
{
	var SDate=gdate.split("/");
	var arr=new Array();
	arr[1]="Jan";
	arr[2]="Feb";
	arr[3]="Mar";
	arr[4]="Apr";
	arr[5]="May";
	arr[6]="Jun";
	arr[7]="Jul";
	arr[8]="Aug";
	arr[9]="Sep";
	arr[10]="Oct";
	arr[11]="Nov";
	arr[12]="Dec";
	var mon;
	for(i=1;i<=12;i++)
	{
	//alert(SDate[1]);
		if(arr[i]==SDate[1])
		{
			mm=i;
			if(mm<9)
			{
				mon="0"+mm;
			}
			else
			{
				mon=mm;
			}
		}
	}
	return (mon+"/"+SDate[0]+"/"+SDate[2]);
}
//To get todays Date in 01/01/2006(mm/dd/yy) format
function ToDayDate()
{
		var  TodayDate=new Date();
		 var TodayDay=TodayDate.getDate();
		 var TodayMonth=TodayDate.getMonth();
		 var TodayYear=TodayDate.getYear();
		 TodayMonth=parseInt(TodayMonth)+parseInt(1);
		 if(TodayMonth<9)
		 {
			TodayMonth="0"+TodayMonth;
		 }
		 if(TodayDay<9)
		 {
			TodayDay="0"+TodayDay;
		 }
		 var Tdate=TodayMonth+"/"+TodayDay+"/"+TodayYear;
		 return Tdate;
}


function replaceallfnc1(str)
{
	
	var newstr = str.replace("  "," ");
	if(newstr.indexOf("  ")!= -1)
	{
		//alert(newstr);
		return replaceallfnc1(newstr,"  "," ");
	}
	else
	{
	    //alert(newstr);
	    return newstr
	}
}

//Function to replace single apostrophe
function replaceallfncApos(str)
{
	
	var newstr = str.replace("'","");
	if(newstr.indexOf("'")!= -1)
	{
		//alert(newstr);
		return replaceallfnc1(newstr,"'","");
	}
	else
	{
	    //alert(newstr);
	    return newstr
	}
}

//Function to concatenate the selected values from dropdown with comma(,) separator
function DrvalueswithComma(obj)
	{
		//alert(obj.value);
		//var Listvalues = document.getElementById("LstScope");
		
				var str ="0";
				if(obj.value=="All")
				{
					for(i = 1; i < obj.options.length; i++)
					{
							if(str=="")
							{
								str = obj.options[i].value;
							}
							else
							{
								str+="," +obj.options[i].value;
							}
							
					}
				}
				else
				{
					str=obj.value;
				}
			//alert(str);	
		return str;
		
	
	}
//=====================================
function PopulateState()
{
	var RegionID=document.getElementById("drRegion").value;
	
	var val = new AJAXMaster();
	val.spName = "State_Master";
	val.add("RegionId",RegionID);
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drState").length=0;
		document.getElementById("drState").options[0]=new Option("All", "All");
		document.getElementById("drServicePartner").length=0;
		document.getElementById("drServicePartner").options[0]=new Option("All", "All");
		document.getElementById("drServiceCenter").length=0;
		document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
		
		return false;
	}
	document.getElementById("drState").length=0;
	//document.getElementById("drState").options[0]=new Option("Select State", "0");
	document.getElementById("drState").options[0]=new Option("All", "All");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drState").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[0].text))
	}
	document.getElementById("drServicePartner").length=0;
	document.getElementById("drServicePartner").options[0]=new Option("All", "All");
	document.getElementById("drServiceCenter").length=0;
	document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
	 PopulatePartner();
	PopulateServiceCenter();
	

}
function PopulatePartner()
{
	var StateId=document.getElementById("drState").value;
	var RegionID=document.getElementById("drRegion").value;
	var val = new AJAXMaster();
	val.spName = "ServicePartner_State";
	val.add("StateID","All");
	val.add("RegionId","All");
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drServicePartner").length=0;
		document.getElementById("drServicePartner").options[0]=new Option("All", "0");
		document.getElementById("drServiceCenter").length=0;
		document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
		
		return false;
	}
	document.getElementById("drServicePartner").length=0;
	document.getElementById("drServicePartner").options[0]=new Option("All", "All");
	//document.getElementById("drServicePartner").options[1]=new Option("All", "All");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drServicePartner").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[2].text))
	}
	document.getElementById("drServiceCenter").length=0;
	document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
	
	PopulateServiceCenter();
	
}
function PopulateServiceCenter()
{
	var ServicePartnerId=document.getElementById("drServicePartner").value;
	
	var StateId=document.getElementById("drState").value;
	var RegionID=document.getElementById("drRegion").value;
	var val = new AJAXMaster();
	val.spName = "ServiceCenter_Partner";
	val.add("ServicePartnerId",ServicePartnerId);
	val.add("StateID",StateId);
	val.add("RegionId",RegionID);
	val.add("sGroupName",document.getElementById("hdnGroupName").value);
	val.add("iLoginId",document.getElementById("hdnLoginId").value);
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drServiceCenter").length=0;
		document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
		
		return false;
	}
	document.getElementById("drServiceCenter").length=0;
	//document.getElementById("drServiceCenter").options[0]=new Option("Select Service Center", "0");
	document.getElementById("drServiceCenter").options[0]=new Option("All", "All");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drServiceCenter").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[0].text))
	}
	
}
function PopulateServiceProvider()
{
	var TechnologyId=document.getElementById("drTechnology").value;
	var val = new AJAXMaster();
	val.spName = "ServiceProvider_Master";
	val.add("TechologyId",TechnologyId);
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drServiceProvider").length=0;
		document.getElementById("drServiceProvider").options[0]=new Option("All", "All");
		return false;
	}
	document.getElementById("drServiceProvider").length=0;
	document.getElementById("drServiceProvider").options[0]=new Option("All", "All");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drServiceProvider").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[0].text))
	}
}
function PopulateModel()
{
	var InstrumentId=document.getElementById("drInstrument").value;
	var val = new AJAXMaster();
	val.spName = "getModelValue_ById";
	val.add("InstrumentId",InstrumentId);
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drModel").length=0;
		document.getElementById("drModel").options[0]=new Option("All", "%");
		return false;
	}
	document.getElementById("drModel").length=0;
	document.getElementById("drModel").options[0]=new Option("All", "%");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drModel").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[0].text))
	}
}	
function PopulateModel()
{
	var InstrumentId=document.getElementById("drInstrument").value;
	var val = new AJAXMaster();
	val.spName = "getModelValue_ById";
	val.add("InstrumentId",InstrumentId);
	var xmlnod = new ActiveXObject("Microsoft.XMLDOM");
	xmlnod.loadXML(val.getDataOnly());
	
	var node = xmlnod.selectNodes("//Table");
	var Plen = node.length-1;
	if (Plen <0)
	{
		//alert("No State Exists for this Region");
		document.getElementById("drModel").length=0;
		document.getElementById("drModel").options[0]=new Option("All", "All");
		return false;
	}
	document.getElementById("drModel").length=0;
	document.getElementById("drModel").options[0]=new Option("All", "All");
	for(i=0;i<=Plen;i++)
	{
		document.getElementById("drModel").options.add(new Option(node[i].childNodes[1].text,node[i].childNodes[0].text))
	}
}


 
	


