var tempArrayVal = new Array();
var tempArrayLabel = new Array();
var validateflag=false;
// variables defined for alphanumeric field check
var UP      = 1;
var multi   = 2
var WS      = 4;
var WSWC    = 8;
var NSC     = 16;
var NSCWC   = 32
var WSNSC   = 64;
var WSNSCWC = 128;
var CODE    = 256;
var SIGNED  = 512;
var TABOUT  = 1024;
var dateError = "";
var timeError = "";
var DTEND = 2048;
var scriptTagFlag = 0;

var dateSapertorChar='-';
if(dateFormatFlip){
   dateSapertorChar='/';
}

//JSDOC   Function Name: alphaNumericFieldCheck()
//JSDOC   Description  : This function checks for the presence of special characters.
//JSDOC                  It takes two parameters, objCurrent and objectName.
//JSDOC                  objCurrent     : Object passed whose value needs to be validated
//JSDOC                : type to detect if % or _ are allowed for query screens.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid .
//JSDOC   false : Invalid .
function alphaNumericFieldCheck(objCurrent, type)
{
	
  if(flagVar == 'true')
  {

    var uri_sp_chars=";/?:@&=+$,-_.!~*'()%[]";
    var char_numStr    = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var char_Str    = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var char_upperStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var char_lowerStr  = "abcdefghijklmnopqrstuvwxyz";
    var splChar_String = "~!@#$^*()-=/?.>,<:;+ŁĄ€'";
    var splChar_PswdString = "!@#$^&*()~";
    var spcChar_Str    = " ";
    var wildCard_Str   = "%_";
    var numStr         = "0123456789";
	var phStr		   = "0123456789- ";
    var dot = ".";
	var phStr		   = "0123456789- ";
	var addStr         = "/_- ,.&#(  ) : ; \\";
    var roleStr = "()&-/";
    var phonenostr = " -0123456789";
    //change begin
    var char_keyboard = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+`-=[]{}\\|';:/.,<>?\"";
    //change end
    //V. NERELLA - START
	 var charStr			= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    //V. NERELLA - END
    //    ARUNIM START
    var strCompanySplcChar ="()-.&':@";
    //  ARUNIM END
	var strQuerySplChar = "-.&'_,";
	var identifier_Str = "+/\\";
    var amntStr		   = "+";
    var time_str = ":";
	var dashStr="-";
    var charString;
	var apostrophe_Str = "'"; // Added to allow apostrophe(') in Director's name
    var strObjValue = objCurrent.value;
    if(strObjValue.charAt(strObjValue.length-1)==' ')
    {
      strObjValue= removeTrailingSpaces(objCurrent);
    }
    if(strObjValue.charAt(0)==' ')
    {
      strObjValue=joaRemoveLeadingSpaces(objCurrent);
    }
    if(!type)
    {
      type='Other';
    }
    switch(type)
    {
     	case 'URI'    ://RFC2396 & RFC2732
    	    charString     = char_numStr + uri_sp_chars;
        break;
    
      case 'Other'    :
        charString     = char_numStr + splChar_String + spcChar_Str;
        break;
      case 'multi'    :
        charString     = char_numStr + splChar_String + spcChar_Str + wildCard_Str;
        break;
      case 'WS'       :
        charString     = char_numStr + splChar_String ;
        break;
        
      case 'PC'       :
        charString     = char_numStr + splChar_PswdString ;
        break;
        
      case 'WSWC'     :
        charString     = char_numStr + splChar_String + wildCard_Str;
        break;
      case 'NSC'      :
        charString     = char_numStr + spcChar_Str;
        break;
      case 'NSCWC'    :
        charString     = char_numStr + spcChar_Str + wildCard_Str;
        break;
	 case 'NSCWCNMS'    :
        charString     = char_numStr + spcChar_Str + strCompanySplcChar; //Changed by arunim
        break;
	 case 'NSCWCNMS1'    :
        charString     = char_numStr + spcChar_Str + strCompanySplcChar+amntStr; 
        break;

      case 'WSNSC'    :
        charString     = char_numStr ;
        break;
      case 'WSNSCWC'  :
        charString     = char_numStr + wildCard_Str;
        break;
		case 'NUMWC'    : 
			charString     = numStr + wildCard_Str;
        break;
		case 'NUM'    :
		 charString     = numStr;
		break;
		case 'ALPHA' : 
			charString     = char_numStr;
		break;
		case 'ALPHAONLY' : 
			charString     = char_Str;
		break;
		case 'ALPHAUP' : 
			charString     = char_upperStr;
		break;
		case 'ALPHALOW' : 
			charString     = char_lowerStr;
		break;
       case 'AMNT'    :
        charString     = numStr + dot + amntStr; //modified by deepak
        break;
       case 'TOVR'    : //added by arun
        charString     = numStr + dot + amntStr; 
        break; 
        case 'AMNN' :
          charString     = numStr + dot + amntStr;
        break;

	  case 'PH'    : 
        charString     = phStr;
		break;
	  case 'ADD'	 :	   
        charString     = char_numStr + addStr;       
		break;
	  case 'PH'    : 
        charString     = phStr;
        break;
    //V. NERELLA - START
	   case 'ALPHASPC'	:
		  charString = spcChar_Str + charStr;
        break;
	   case 'ALPHASPCDOT'	:
		  charString = spcChar_Str + charStr+dot;
        break;
	//V. NERELLA - END
	   case 'ALPHANUMSPCDOT'    : //added by deepak
        charString     = spcChar_Str + char_numStr + dot;
        break;
	   case 'IDSTR' :
		 charString     = char_numStr + identifier_Str;	
        break;
    case 'ALPHASPCONE'	:
		  charString = spcChar_Str + charStr;
        break;       
	case 'ALPHASPCDOTONE'	:
	     charString = spcChar_Str + charStr+dot;
        break;   
	case 'ALPHAMULSPCDOTONE'	:
	     charString = spcChar_Str + charStr+dot;
        break;    
    case 'ALPHAMULSPC'	:  //Added by Janita
	     charString = spcChar_Str + charStr;
        break;
       
        case 'TIMESTR'	:  //Added by Mayank
	     charString = numStr + time_str;
        break;
       
   	case 'LEGALNAME'	:
	     charString = spcChar_Str + charStr+dot;
        break;
	case 'ALPHADASH'	:  //Added by Manmeet
	     charString     = char_numStr + identifier_Str + dashStr;	
        break; 
    case 'ROLE' :
           charString = char_numStr +  roleStr + spcChar_Str;   
       break;
	case 'CMPNYCH'    :
        charString     = char_numStr + spcChar_Str + strCompanySplcChar+amntStr;
		break;
	//change begin for RL453
	case 'KEYBOARDCHAR' :
		charString     = char_keyboard;
        break;
	case 'PHONE'   :
	        charString = phonenostr;
	        break;
	case 'PEROTH'    : 
        charString     = numStr + dot + amntStr+dashStr; 
        break; 
	case 'TRADENAME'  :
         charString     = char_numStr + spcChar_Str + strQuerySplChar; 
        break;	
		
	case 'DINNAME'	:
	 charString = spcChar_Str + charStr + apostrophe_Str;  // Added to allow apostrophe(') in Director's name
		//alert('i in case : DINNAME');
	break;
		
	case 'DINNAMEDOT'	:
	 charString = spcChar_Str + charStr + apostrophe_Str + dot;  // Added to allow apostrophe(') in Director's name
	break;
	
    }
    for ( i=0; i<strObjValue.length; i++)
  	{
  	  thisChar = strObjValue.charAt(i);
  	  if(type == "KEYBOARDCHAR" && !(strObjValue.charCodeAt(i) ==13) && !(strObjValue.charCodeAt(i) ==10))
  	  {
	      if (charString.indexOf( thisChar ) == -1)
	      {
	        var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			var str ="";
			if(objCurrent.type == "password")
			  str = COM00059+"password field";
			else
	          str = COM00059+objectName;
	        setError(str);
			if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
	        return false;
	  	  }
  	  }
  	  else if(type != "KEYBOARDCHAR")
  	  {
 		if (charString.indexOf( thisChar ) == -1)
	      {
	        var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			var str ="";
			if(objCurrent.type == "password")
			  str = COM00059+"password field";
			else
	          str = COM00059+objectName;
	        setError(str);
			if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
	        return false;
	  	  } 	  	
  	  }
	    	  if(type == "PHONE")
  	  {
	  	  if(charString.indexOf( thisChar ) == -1)
	  	  {
	  	  	var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			var str ="";
			if(objCurrent.type == "password")
			  str = COM00059+"password field";
			else
	          str = COM00059+objectName;
	        setError(str);
			if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
	        return false;
	  	  }
  	  }
  	}
	  	 if(type == "PHONE")
  	 {
  	 if(i<4)
  	 {
  	 var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			var str ="";
			if(objCurrent.type == "password")
			  str = COM00059+"password field";
			else
	          str = objectName+"Must be greater than 3 digit";
	        setError(str);
			if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
	        return false;
  	 
  	 }
  	 }
//change end  	
  	if(type == 'ALPHASPCONE' || type == 'ALPHASPCDOTONE') 
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length;i++)
		   		{
		   			if(strObjValue.charAt(i) == " ")
		   			{
		   				vDotCount = parseInt(vDotCount+1);
		   			}		   			
		   		}
		   		if(vDotCount > 1)
		   		{
 		          str = "Cannot enter consecutive blank spaces for "+objectName;
    		        setError(str);
					if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = objCurrent.getAttribute('name');
					}
   		        	return false;
		   		}   			
  	   }
  		 
 }

   	if(type == 'ALPHAMULSPCDOTONE' || type == 'ALPHAMULSPC') 
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length;i++)
		   		{
		   			if(strObjValue.charAt(i) == " " && strObjValue.charAt(i+1) == " ")
		   			{
		   				str = "Cannot enter consecutive blank spaces for "+objectName;
	    		        setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
   		        		return false;
		   			}		   			
		   		}
		   		if(vDotCount > 1)
		   		{
 		         
		   		}   			
  	   }
  		 
 }

  
	if(type == 'LEGALNAME') 
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length - 1;i++)
		   		{
		   			if(strObjValue.charAt(i) == " ")
		   			{
		   				if(strObjValue.charAt(i+1) == " ")
						{
							str = "Multi spaces in "+objectName;
							setError(str); 
							if(error_arr.length==1 && firstErrorField=="")
							{
								firstErrorField = objCurrent.getAttribute('name');
							}
							return false;
						}
		   			}		   			
		   		}
  	   }
  		 
 }
       
     
       
	if(type == 'NSCWCNMS' || type == 'CMPNYCH' || type == 'NSCWCNMS1' || type=='ALPHASPC') 
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length - 1;i++)
		   		{
		   			if(strObjValue.charAt(i) == " ")
		   			{
		   				if(strObjValue.charAt(i+1) == " ")
						{
							str = "Multi spaces in "+objectName;
							setError(str); 
							if(error_arr.length==1 && firstErrorField=="")
							{
								firstErrorField = objCurrent.getAttribute('name');
							}
							return false;
						}
		   			}		   			
		   		}
  	   }
  		 
 }
 
   // Added to allow apostrophe(') in Director's name
 
 if(type == 'DINNAMEDOT') 
  	{
		//alert('Inside if Block: DINNAMEDOT ');
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length;i++)
		   		{
		   			if(strObjValue.charAt(i) == " " && strObjValue.charAt(i+1) == " ")
		   			{
		   				str = "Cannot enter consecutive blank spaces for "+objectName;
	    		        setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
   		        		return false;
		   			}		   			
		   		}
		   		if(vDotCount > 1)
		   		{
 		         
		   		}   			
  	   }
  		 
 }
 
  // Added to allow apostrophe(') in Director's name ends
  
  //Added by Nakul
 if(type == 'TRADENAME') 
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf(" "));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(" ")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length - 1;i++)
		   		{
							if(error_arr.length==1 && firstErrorField=="")
							{
								firstErrorField = objCurrent.getAttribute('name');
							}
							return false;
						
		   					   			
		   		}
  	   }
  		 
 }
 //Change ends
  	if(type == 'ALPHASPCDOTONE')
  	{
  	 	var vFirstValue = strObjValue.substring(0,strObjValue.indexOf("."));
  		var vDotCount=0;
  		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
  		if(strObjValue.indexOf(".")!=-1)
  		{ 
		   		for(var i=0;i<strObjValue.length;i++)
		   		{
		   			if(strObjValue.charAt(i) == ".")
		   			{
		   				vDotCount = parseInt(vDotCount+1);
		   			}		   			
		   		}
		   		if(vDotCount > 1)
		   		{
 		          str = COM00059+objectName;
    		        setError(str);
					if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = objCurrent.getAttribute('name');
					}
   		        	return false;
		   		}   	
  		} 
 }
  	
  	
  	if(type == 'AMNT' || type == 'AMNN')
  	{//modified by deepak
  		var vFirstValue = strObjValue;
   		var vSecondValue = '';
   		var vDotCount=0;
   		var vAmtStr = 0;
   		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
     
   		if(strObjValue.indexOf(".")!=-1){ 
   			if(strObjValue.charAt(0) == "+" || strObjValue.charAt(0) == "-") {
  				vFirstValue = strObjValue.substring(1,strObjValue.indexOf("."));
  			} else {
  				vFirstValue = strObjValue.substring(0,strObjValue.indexOf("."));
  			}
   			vSecondValue = strObjValue.substring(strObjValue.indexOf(".")+1,strObjValue.length);   		
   		}
			for(var i=0;i<strObjValue.length;i++){
				if(strObjValue.charAt(i) == "."){
					vDotCount = parseInt(vDotCount+1);
				}	
				else if(strObjValue.charAt(i) == "+" || strObjValue.charAt(i) == "-") {
					vAmtStr = parseInt(vAmtStr+1);
				}	   			
			}
			if(vDotCount > 1 || vAmtStr>1){
        if(type == 'AMNT')
        {
          str = objectName+" should be of Format (+)000000000000.00";
        }
        else
        {
          str = objectName+" should be of Format (+)000000000000000.00";
        }
			  
				setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}   			
			else if((strObjValue.indexOf("+")!=-1 && strObjValue.indexOf("+")!= 0)
					|| (strObjValue.indexOf("-")!=-1 && strObjValue.indexOf("-")!= 0)) {
        if(type == 'AMNT')
        {
          str = objectName+" should be of Format (+)000000000000.00";
        }
        else
        {
            str = objectName+" should be of Format (+)000000000000000.00";
        }
					  setError(str);
					  if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
					  return false;
			}
			else if(type == 'AMNT' &&(isNaN(vFirstValue) || vFirstValue.length>12)){
			  			str = objectName+" should be of Format (+)000000000000.00";
						setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
						return false;
			}
      else if(type=='AMNN' && (isNaN(vFirstValue) || vFirstValue.length>15))
      {
            str = objectName+" should be of Format (+)000000000000000.00";
						setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
						return false;
      }
			else if(isNaN(vSecondValue) || vSecondValue.length>2){
        if(type == 'AMNT')
        {
          str = objectName+" should be of Format (+)000000000000.00";
        }
        else
        {
          str = objectName+" should be of Format (+)000000000000000.00";
        }	 
					 setError(str);
					 if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = objCurrent.getAttribute('name');
					}
					return false;   			
			}

			else{
				return true;
			}
   		}	
  	}
  	//added by arun
  	if(type == 'TOVR')
  	{
  		var vFirstValue = strObjValue;
   		var vSecondValue = '';
   		var vDotCount=0;
   		var vAmtStr = 0;
   		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
   		if(strObjValue.indexOf(".")!=-1){ 
   			if(strObjValue.charAt(0) == "+" || strObjValue.charAt(0) == "-") {
  				vFirstValue = strObjValue.substring(1,strObjValue.indexOf("."));
  			} else {
  				vFirstValue = strObjValue.substring(0,strObjValue.indexOf("."));
  			}
   			vSecondValue = strObjValue.substring(strObjValue.indexOf(".")+1,strObjValue.length);   		
   		}
			for(var i=0;i<strObjValue.length;i++){
				if(strObjValue.charAt(i) == "."){
					vDotCount = parseInt(vDotCount+1);
				}	
				else if(strObjValue.charAt(i) == "+" || strObjValue.charAt(i) == "-") {
					vAmtStr = parseInt(vAmtStr+1);
				}	   			
			}
			if(vDotCount > 1 || vAmtStr>1){
			  str = objectName+" should be of Format (+)00000000000000.00";
				setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}   			
			else if((strObjValue.indexOf("+")!=-1 && strObjValue.indexOf("+")!= 0)
					|| (strObjValue.indexOf("-")!=-1 && strObjValue.indexOf("-")!= 0)) {
			  		  str = objectName+" should be of Format (+)00000000000000.00";
					  setError(str);
					  if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
					  return false;
			}
			else if(isNaN(vFirstValue) || vFirstValue.length>14){
			  			str = objectName+" should be of Format (+)00000000000000.00";
						setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
						return false;
			}
			else if(isNaN(vSecondValue) || vSecondValue.length>2){
			  		 str = objectName+" should be of Format (+)00000000000000.00";
					 setError(str);
					 if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = objCurrent.getAttribute('name');
					}
					return false;   			
			}

			else{
				return true;
			}
   		}
  	//added by arun 
	 	//Change by Udit Kansal  on 27-04-2010 to check Percentage other data type
  	  	if(type == 'PEROTH')
  	{
  		var vFirstValue = strObjValue;
   		var vSecondValue = '';
   		var vDotCount=0;
   		var vAmtStr = 0;
   		var objectName =  getObjectLabel(objCurrent.id,objCurrent);
   		if(strObjValue.indexOf(".")!=-1)
   		{ 
   			if(strObjValue.charAt(0) == "+" || strObjValue.charAt(0) == "-") 
   			{
  				vFirstValue = strObjValue.substring(1,strObjValue.indexOf("."));
  			} else 
  			{
  				vFirstValue = strObjValue.substring(0,strObjValue.indexOf("."));
  			}
   			vSecondValue = strObjValue.substring(strObjValue.indexOf(".")+1,strObjValue.length);   		
   		}
			for(var i=0;i<strObjValue.length;i++){
				if(strObjValue.charAt(i) == "."){
					vDotCount = parseInt(vDotCount+1);
				}	
				else if(strObjValue.charAt(i) == "+" || strObjValue.charAt(i) == "-") {
					vAmtStr = parseInt(vAmtStr+1);
				}	   			
			}
			if(vDotCount > 1 || vAmtStr>1){
			  str = objectName+" should be of Format (+/-)0000.00";
				setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}   			
			else if((strObjValue.indexOf("+")!=-1 && strObjValue.indexOf("+")!= 0)
					|| (strObjValue.indexOf("-")!=-1 && strObjValue.indexOf("-")!= 0)) {
			  		  str = objectName+" should be of Format (+/-)0000.00";
					  setError(str);
					  if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
					  return false;
			}
			else if(isNaN(vFirstValue) || vFirstValue.length>4){
			  			str = objectName+" should be of Format (+/-)0000.00";
						setError(str);
						if(error_arr.length==1 && firstErrorField=="")
						{
							firstErrorField = objCurrent.getAttribute('name');
						}
						return false;
			}
			else if(isNaN(vSecondValue) || vSecondValue.length>2){
			  		 str = objectName+" should be of Format (+/-)0000.00";
					 setError(str);
					 if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = objCurrent.getAttribute('name');
					}
					return false;   			
			}

			else{
				return true;
			}
   		}
  //Change end by Udit kansal 	
 return true;
}
//Checks if the given radio button is selected
function isRadioButtonSelected(radioButton){
	for(i=0;i<radioButton.length;i++){
		if(radioButton[i].checked)
			break;
	}
	return i<radioButton.length;
}


//JSDOC   Function Name:  mandatoryFieldCheck()
//JSDOC   Description  :  This function checks for the mandatory fields of the form.
//JSDOC                   If certain fields in the form are marked as mandatory then
//JSDOC                   this function should be called to check that none of the
//JSDOC                   mandatory fields are left blank.
//JSDOC                   All the mandatory fields of the form should have id as
//JSDOC                   'reqdxxx...' format, where xxx... is the name of the element.
//JSDOC                   It takes only one parameter, objForm.
//JSDOC                   objForm     : the form  object passed  to the function.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid .
//JSDOC   false : Invalid .
//JSDOC   This function should be called on the onSubmit event of the FORM tag.
function mandatoryFieldCheck(objForm)
{
 if(flagVar == 'true')
 {
 	var blnFlag=true; // This flag if true then error is set in a stack
    var errFlag=false;

    if(document.getElementById)
    {
    	
      var len = objForm.length;
      for(var i=0; i<len; i++)
      {
      	
        blnFlag=true;
        var objElement=objForm.elements[i];

        if (objElement.id.substring(0,4)=='reqd') // check for mandatory
        {
        	
 		  if(objElement.value.charAt(0)==' ')//remove leading spaces
            objElement.value= joaRemoveLeadingSpaces(objElement);


		  if(objElement.type =='textarea' && objElement.value.length >0 && objElement.value.substring(0,2)=="\r\n")//remove leading spaces nad newline
			objElement.value= joaRemoveLeadingNewLineSpaces(objElement);
	
           // checks if objElement value is blank then set boolean flag
          if(((objElement.type=='password' || objElement.type=='text'||objElement.type=='textarea')&&objElement.value=='')||
            (objElement.type.toString().charAt(0)=='S' && objElement.selectedIndex==0)||
            (objElement.type=='checkbox' && objElement.checked==false))
          {
            blnFlag=false;
            errFlag = true;
          }
        }
        if (!blnFlag)
        {
          var elementFieldId=getObjectLabel(objElement.id,objElement); //objElement.id.substring(4).toUpperCase();
          var str = elementFieldId+COM00004;
          setError(str);
		  if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objElement.getAttribute('name');
			}
        }
      }
      if(errFlag)
      {
        //stripMethod();
        return false;
      }
    }
  }
  else
    return true;
}


//JSDOC   Function Name: alphabeticFieldCheck()
//JSDOC   Description  : This function checks for the alphabetic fields validity.
//JSDOC                  It takes two parameters, objCurrent and objectName.
//JSDOC                  objCurrent     : Object passed whose value needs to be validated.
//JSDOC                  objectName     : Object label used for displaying alert.
//JSDOC                  fieldLength    : Length of the field excluding decimal.
//JSDOC                  fieldPrecision : No. of digits after the decimal.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid Data.
//JSDOC   false : Invalid Data.

function alphabeticFieldCheck(objCurrent)
{
  if(flagVar == 'true')
  {
    var strObjValue = objCurrent.value;
    // remove trailing spaces
    if(strObjValue.charAt(strObjValue.length-1)==' ')
      strObjValue= removeTrailingSpaces(objCurrent);

    // remive leading spaces
    if(strObjValue.charAt(0)==' ')
      strObjValue=joaRemoveLeadingSpaces(objCurrent);

    var len = strObjValue.length;

    for (var i=0; i<len; i++)
    {
      var charObject = strObjValue.charAt(i);

      // if character no bet between [a-z] or [A-Z] then raise error
      if(!(((charObject >= 'a') && (charObject <= 'z')) || ((charObject >= 'A') && (charObject <= 'Z'))))
      {
        var objectName =  getObjectLabel(objCurrent.id,objCurrent);
        var str = COM00059+objectName;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
        return false;
      }
    }
  }
  return true;
}


//JSDOC   Function Name: floatFieldCheck()
//JSDOC   Description  : This function checks for the Float fields validity.
//JSDOC                  It takes four parameters, objCurrent,objectName,fieldLength and fieldPrecision.
//JSDOC                  objCurrent     : Object passed whose value needs to be validated
//JSDOC                  objectName     : Object label used for displaying alert
//JSDOC                  fieldLength    : Length of the field excluding decimal
//JSDOC                  fieldPrecision : No. of digits after the decimal.
//JSDOC   This function does not accept special characters.
//JSDOC   The function returns true/false.

function floatFieldCheck(objCurrent,fieldLength,fieldPrecision)
{
  if(flagVar == 'true')
  {
    var strObjValue = objCurrent.value;
    var blnFlag=true;


    if(isNaN(strObjValue))
      blnFlag=false;
    else
    {

      if(strObjValue.charAt(strObjValue.length-1)==' ')
        strObjValue=removeTrailingSpaces(objCurrent);

      if(strObjValue.charAt(0)==' ')
        strObjValue= joaRemoveLeadingSpaces(objCurrent);

      if((strObjValue.charAt(0) == '+')||(strObjValue.charAt(0) == '-'))
        blnFlag=false;

	  if(strObjValue.length != 0 && strObjValue.indexOf(".") == strObjValue.length-1)
		blnFlag=false;
    
      var strAfterDecimal=0;
	  //Added by MCACross
	  if(strObjValue.indexOf(".")==-1)
		{
			strObjValue=strObjValue+".00";
		}
      var arrObjectValue = strObjValue.split('.');
      var strBeforeDecimal = arrObjectValue[0];
          strAfterDecimal = arrObjectValue[1];
	 // alert("nX "+nX); 
	
      //if(strAfterDecimal==null) changed by MCACross
	  if ((strAfterDecimal==null) || (strAfterDecimal =="00"))
      {
        if (strBeforeDecimal.length > (fieldLength - fieldPrecision))
        blnFlag=false;
      }
      else
      {
        if (strBeforeDecimal.length > (fieldLength - fieldPrecision) || strAfterDecimal.length > fieldPrecision)
          blnFlag=false;
      }
    }

    if(!blnFlag)
    {
      var objectName =  getObjectLabel(objCurrent.id,objCurrent);
      var str = objectName +COM00057+(fieldLength-fieldPrecision)+' digits and '+ fieldPrecision+' decimals';
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
      return false;
    }
    return blnFlag;
  }
  return true;
}
//JSDOC   Function Name: numericFieldCheck()
//JSDOC   Description  : This function checks for the Numeric fields validity.
//JSDOC                  It takes two parameters, objCurrent and objectName.
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC  This function does not accept special characters.
//JSDOC  The function returns true/false.
//function numericFieldCheck(objCurrent,objectName)

function numericFieldCheck(objCurrent)
{
  if(flagVar=='true')
  {
    var strObjValue = objCurrent.value;
    var strAllowedValues = '0123456789';
    var blnFlag = true;

    if(strObjValue.charAt(strObjValue.length-1)==' ')
      strObjValue= removeTrailingSpaces(objCurrent);

    if(strObjValue.charAt(0)==' ')
      strObjValue= joaRemoveLeadingSpaces(objCurrent);

    for (var i = 0; i<strObjValue.length; i++)
    {
      var ch = strObjValue.charAt(i);
      for (var j = 0; j<strAllowedValues.length; j++)
      {
        if (ch == strAllowedValues.charAt(j))
        break;
      }
      if (j == strAllowedValues.length)
      {
        blnFlag = false;
        break;
      }
    }
    if (!blnFlag)
    {
      var objectName = getObjectLabel(objCurrent.id,objCurrent);
      var str = objectName+COM00038;
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
    return blnFlag;
  }
  return true;
}

//JSDOC   Function Name:  checkGreaterDate()
//JSDOC   Description  :  This function checks that From Date should be less
//JSDOC                   than To Date.
//JSDOC                   This function expects two objects
//JSDOC                   date1 of From Date and date2 of To Date.
//JSDOC  The function returns true/false.

function checkGreaterDate(date1,date2)
{
  if(flagVar=='true')
  {
    var fromdt=null;
    var todt  =null;
    if(typeof(date1)=='object' && typeof(date2)=='object')
    {
      fromdt = date1.value;
      todt	 = date2.value;
    }
    else if(typeof(date1)=='string' && typeof(date2)=='string')
    {
      fromdt = date1;
      todt	 = date2;
    }
    else
    {
       var str = "Wrong usage of the function";
       setError(str);
       return false;
    }
    if( (fromdt=="") && (todt==""))
    {
      return true;
    }
    if( ((fromdt!="") && (todt=="") ) || ((fromdt=="") && (todt!="") ))
    {
	    if(typeof(date1)=='object' && typeof(date2)=='object')
	    {
	      var date1Name = getObjectLabel(date1.id,date1);
	      var date2Name = getObjectLabel(date2.id,date2);
      	  var str = 'Invalid Entry: Enter both '+date1Name+' and '+date2Name;
	      setError(str);
	    }
	    return false;
    }
	if(validateflag==true)
    {
    	return false;
    }
    if(validateflag==false)
	 {
	    if(!chkDate(date1))
	    {
	      return false;
	    }
	    if(!chkDate(date2))
	    {
	      return false;
	    }
	}
    var firstslash=fromdt.indexOf(dateSapertorChar);
    var lastslash	=fromdt.lastIndexOf(dateSapertorChar);
    var yearfrom	=convertStringToNumber(fromdt.substr(lastslash+1));
    var monfrom		=convertStringToNumber(fromdt.substring(firstslash+1,lastslash));
    var dayfrom		=convertStringToNumber(fromdt.substr(0,firstslash));
	if(fromdt.indexOf(dateSapertorChar) == -1 )
	{
		return false;
	}
	if(todt.indexOf(dateSapertorChar) == -1 )
	{
		return false;
	}
    firstslash=todt.indexOf(dateSapertorChar);
    lastslash	=todt.lastIndexOf(dateSapertorChar);
    var yearto=convertStringToNumber(todt.substr(lastslash+1));
    var monto	=convertStringToNumber(todt.substring(firstslash+1,lastslash));
    var dayto	=convertStringToNumber(todt.substr(0,firstslash));

    var diffYear  = yearto - yearfrom;
    var diffMonth = (monto  - monfrom );
    var diffDay   = (dayto  - dayfrom );
    if(diffYear > 0)
    {
      return true;
    }
    else if(typeof(date1)=='object' && typeof(date2)=='object' && diffYear < 0)
    {
      date1Label = getObjectLabel(date1.id,date1);
      date2Label = getObjectLabel(date2.id,date2);
      var str    = date1Label +COM00052+ date2Label;
      setError(str);
      return false;
    }
    else if(typeof(date1)=='string' && typeof(date2)=='string' && diffYear < 0)
    {
      return false;
    }
    else
    {
      if(diffMonth > 0)
      {
        return true;
      }
      else if(typeof(date1)=='object' && typeof(date2)=='object' && diffMonth < 0)
      {
        date1Label = getObjectLabel(date1.id,date1);
        date2Label = getObjectLabel(date2.id,date2);
        var str = date1Label +COM00052+ date2Label;
        setError(str);
        return false;
      }
      else if(typeof(date1)=='string' && typeof(date2)=='string' && diffMonth < 0)
      {
        return false;
      }
      else
      {
         if(typeof(date1)=='object' && typeof(date2)=='object' && diffDay< 0)
         {
           date1Label = getObjectLabel(date1.id,date1);
           date2Label = getObjectLabel(date2.id,date2);
           var str = date1Label +COM00052+ date2Label;
           setError(str);
           return false;
         }
         else if(typeof(date1)=='string' && typeof(date2)=='string' && diffDay< 0)
         {
           return false;
         }
         else
         {
            return true;
         }
      }
    }
  }
  else
  {
	  return true;
	}
}



//JSDOC   Function Name:  fromNumLtToNumber()
//JSDOC   Description  :  This function checks that From number should be less
//JSDOC                   than To number.
//JSDOC                   This function expects two objects
//JSDOC                   objNum1 of From number and objNum2 of To number.
//JSDOC  The function returns true/false.

function fromNumLtToNumber(objNum1,objNum2)
{
  if(flagVar=='true')
  {
    var fromNum = objNum1.value;
    var toNum = objNum2.value;

    if( (fromNum=="") && (toNum=="")) return true;
    if( ((fromNum!="") && (toNum=="") ) || ((fromNum=="") && (toNum!="") ))
    {
      var str = COM00060+'numbers.';
      setError(str);
      return false;
    }
    if(isNaN(fromNum))
    {
      var str = 'From'+COM00061;
      setError(str);
      return false;
    }
    if(isNaN(toNum))
    {
      var str = 'To'+COM00061;
      setError(str);
      return false;
    }

    var diff = parseFloat(fromNum) - parseFloat(toNum);

    if(diff>0)
    {
      fromLabel = getObjectLabel(objNum1.id,objNum1);
      toLabel   = getObjectLabel(objNum2.id,objNum2);
      var str   = fromLabel +COM00052+ toLabel;
      setError(str);
      return false;
    }
  }
	return true;
}

//JSDOC   Function Name:		valueBlkOfDropDn()
//JSDOC   Description  :		Depending on the value of flag and option selected this function blanks the options
//JSDOC										of second select box or disables it.
//JSDOC                   	This function expects two objects and two variables.
//JSDOC                   	selectObj1 of selctbox1 and selectObj2 of selectbox2, val the value
//JSDOC										on the basis of which action is to be performed. And flag which decides
//JSDOC										what action to be performed.
function valueBlkOfDropDn(selectObj1,selectObj2,val,flag)
{
  var index		=selectObj1.selectedIndex;
  var tempVal	=selectObj1.options[index].text;
	var len			=selectObj2.length;
  if(flag=="N")
	{
		if(tempVal==val)
		{
      for(var i=0;i<selectObj2.length;i++)
      {
       tempArrayLabel[i] =  selectObj2.options[i].text;
       tempArrayVal[i]   =  selectObj2.options[i].value;
      }
      for(var i=0;i<len;i++)
			{
				selectObj2.options[0] = null;
			}
		}
		else
		{
			for(var i=0;i<tempArrayVal.length;i++)
			{
				selectObj2.options[i] 	= new Option(tempArrayLabel[i],tempArrayVal[i]);
			}
		}
	}
	if(flag=="Y")
	{
		if(tempVal==val)
		{
			selectObj2.disabled = true;
		}
		else
		{
			selectObj2.disabled = false;
		}
	}
 return;
}


//JSDOC   Function Name:		chkMandatorySearch(objList)
//JSDOC   Description  :		Checks for mandatory search criteria.
//JSDOC                   	This function can accept variable objects depending upon the serch criterion.

function chkMandatorySearch(val,objList)
{
  if(flagVar=='true')
  {
    var tempCount=(arguments.length-1);
    var nameStr='';
    if(val==0)
    {
		   for (var i=1; i<(arguments.length); i++)
		   {
          if(arguments[i].length != undefined)
          {
            index = arguments[i].selectedIndex;
            value = arguments[i].options[index].value;
          }
          else
          {
            value = arguments[i].value;
          }
			 		if(value=="")
			 		{
           nameStr += getObjectLabel(arguments[i].id,arguments[i])+ " ";
           tempCount--;
  		 		}
			 		if(tempCount==0)
			 		{
		        str = COM00062+nameStr+COM00070;
		        setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = arguments[i].getAttribute('name');
				}
            return false;
			 		}
			 }
			 return true;
	  }
  if(val==1)
  {
    var blnFlag='true';
    var objNameStr ='';
    if(arguments[1].length != undefined)
    {
      index = arguments[1].selectedIndex;
      value = arguments[1].options[index].text;
    }
    else
    {
      value = arguments[1].value;
    }
    if(value!="")
    {
      for (var i=2; i<(arguments.length); i++)
      {
        if(undefined != arguments[i].length)
        {
          index = arguments[i].selectedIndex;
          value = arguments[i].options[index].text;
        }
        else
        {
          value = arguments[i].value;
        }
        if(value=="" )
  	 		{
          blnFlag = 'false';
          objNameStr += getObjectLabel(arguments[i].id,arguments[i])+" ";
  	 		}
     }
     if(blnFlag=='false')
     {
        var objName = getObjectLabel(arguments[1].id,arguments[1])
        var str = objNameStr + COM00005 + objName ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = arguments[i].getAttribute('name');
		}
        blnFlag='true';
        return false;
     }
     return true;
    }
    else
    {
       return true;
    }
  }
 }
  return true;
}

//JSDOC  Function Name :disableButton()
//JSDOC  Description   :This function disables button
//JSDOC  Input 				:type is the type of object field.
//JSDOC                :1) if type = "select" then Input arguments are
//JSDOC                :   a)objSelct - Object of the select field.
//JSDOC                :   b)condVal  - Conditional Value on the basis of which the
//JSDOC                :                button has to be enabled or disabled.
//JSDOC                :   c)buttonId - Id of the button that is to be enabled/disabled.
//JSDOC                :2) if type="text" then Input arguments are
//JSDOC                :   a)objField - Object of the text field.
//JSDOC                :   b)condVal  - Conditional Value on the basis of which the
//JSDOC                :                button has to be enabled or disabled.
//JSDOC                :   c)buttonId - Id of the button that is to be enabled/disabled.
//JSDOC                :3) if type="other" then Input arguments are
//JSDOC                :   a)buttonId - Id of the button that is to be enabled/disabled.
//JSDOC                :   b)flad     - if true then button is enabled else disabled.

function disableButton(type)
{
  var funcArguments = disableButton.arguments;
  if(type=="select")
  {
    var objSelect = funcArguments[1];
    var condVal   = funcArguments[2];
    var buttonId  = funcArguments[3];
 	  var index		  = objSelect.selectedIndex;
	  var tempVal	  = objSelect.options[index].value;
	  if(tempVal==condVal)
	  {
	    document.getElementById(buttonId).disabled=true;
	  }
	  else
	  {
		 document.getElementById(buttonId).disabled=false;
	  }
  }
  if(type=="text")
  {
    var objField  = funcArguments[1];
    var condVal   = funcArguments[2];
    var buttonId  = funcArguments[3];
    var tempVal   = objField.value;
	  if(tempVal==condVal)
	  {
      document.getElementById(buttonId).disabled=true;
	  }
	  else
	  {
      document.getElementById(buttonId).disabled=false;
	  }
  }
  if(type=="other")
  {
    var buttonId  = funcArguments[1];
    var flag      = funcArguments[2];
    if(flag)
    {
      document.getElementById(buttonId).disabled=true;
    }
    else
    {
      document.getElementById(buttonId).disabled=false;
    }
  }
}

//JSDOC   Function Name:		valueBlkOfDropDn()
//JSDOC   Description  :		Depending on the value of flag and option selected this function blanks the options
//JSDOC										of second select box or disables it.
//JSDOC                   	This function expects two objects and two variables.
//JSDOC                   	selectObj1 of selctbox1 and selectObj2 of selectbox2, val the value
//JSDOC										on the basis of which action is to be performed. And flag which decides
//JSDOC										what action to be performed.
function valueBlkOfDropDn(selectObj1,selectObj2,val,flag)
{
  var index		       =selectObj1.selectedIndex;
  var tempVal	=selectObj1.options[index].text;
	var len			=selectObj2.length;
  if(flag=="N")
	{
		if(tempVal==val)
		{
      for(var i=0;i<selectObj2.length;i++)
      {
       tempArrayLabel[i] =  selectObj2.options[i].text;
       tempArrayVal[i]   =  selectObj2.options[i].value;
      }
      for(var i=0;i<len;i++)
			{
				selectObj2.options[0] = null;
			}
		}
		else
		{
			for(var i=0;i<tempArrayVal.length;i++)
			{
				selectObj2.options[i] 	= new Option(tempArrayLabel[i],tempArrayVal[i]);
			}
		}
	}
	if(flag=="Y")
	{
		if(tempVal==val)
		{
			selectObj2.disabled = true;
		}
		else
		{
			selectObj2.disabled = false;
		}
	}
 return;
}


//JSDOC Function Name: chkDate()
//JSDOC Description:   This function checks for the validity of Date fields.
//JSDOC                objCurrentis the object of the field passed to the function.
//JSDOC                The function returns true/false.
//JSDOC Function Name: chkDate()
//JSDOC Description:   This function checks for the validity of Date fields.
//JSDOC                objCurrentis the object of the field passed to the function.
//JSDOC                The function returns true/false.
function chkDate(objCurrent)
{
    var blnFlag = true;
    // variable arrDays specifies number of days according to the month.
    var arrDays = new Array (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var arrMonths = new Array ('','JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC');
    var objVal = null;
    if(typeof(objCurrent)=='object')
    {
      objVal = trim(objCurrent.value);
    }
    else if(typeof(objCurrent)=='string')
    {
      objVal = trim(objCurrent);
    }

    if(objVal == undefined)
    return true;

    if(objVal == format && typeof(objCurrent)=='object')
    {
      objCurrent.value="";
    }
    else if(objVal == format && typeof(objCurrent)=='string')
    {
      return true;
    }
    var format="dd-mm-yyyy";
    if(dateFormatFlip){
		format="dd/mm/yyyy";
	}
    var objElements    = objVal.split(dateSapertorChar); // splits the date
    var formatElements = format.split(dateSapertorChar) ;
    blnFlag = (objElements.length == 3);
     if(blnFlag)
     {
       var day   = getDay(objElements,formatElements);
       var month = getMonth(objElements,formatElements);
       var year  = getYear(objElements,formatElements);

       blnFlag = (!isNaN(month) && (month > 0) && (month < 13) &&
                 !isNaN(day) && (day > 0) && (day < 32) &&
                 !isNaN(year) && (objElements[2].length == 4 ));

       if(day.length!=undefined && day.length==1)
        blnFlag = false;

       if(month.length!=undefined && month.length==1)
        blnFlag = false;
		


       if (((year % 4 == 0) && (year%100 != 0)) ||(year % 400 == 0))
            arrDays[1] = 29;

       if(month.toString().charAt(1)=='.' ||day.toString().charAt(1)=='.')
          blnFlag=false;

       if(day > arrDays[month-1])
       {
         if(typeof(objCurrent)=='object')
         {
		   var objectName =  getObjectLabel(objCurrent.id,objCurrent);
           var str=objectName + COM00063+day+ ' days.';
           setError(str);
		   if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
			validateflag=true;
		   return false;
         }
         else if(typeof(objCurrent)=='string')
         {
           dateError=objCurrent+COM00063+day+ ' days. ';
			validateflag=true;
           return false;
         }
	   }

	  if(day > 12 && month > 12)
	   {
		 if(typeof(objCurrent)=='object')
		 {
			 var objectName =  getObjectLabel(objCurrent.id,objCurrent);
		   var str= objectName +'Invalid number of months.';
		   if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
		   setError(str);
		   validateflag=true;
			return false;
		 }
		 else if(typeof(objCurrent)=='string')
		 {
		   dateError=objCurrent +'Invalid number of months.';
		   validateflag=true;
		   return false;
		 }
      }
    }  // end of if(blnFlag)

    if (!blnFlag && typeof(objCurrent)=='object')
    {
     var labelName = getObjectLabel(objCurrent.id,objCurrent);
     var str = labelName+COM00006+format;
     setError(str);
	 if(error_arr.length==1 && firstErrorField=="")
	{
		firstErrorField = objCurrent.getAttribute('name');
	}
     validateflag=true;
    }
    else if(!blnFlag && typeof(objCurrent)=='string')
    {
      dateError = COM00006;
	  validateflag=true;
      return false;
    }

   return blnFlag;

 }


//JSDOC Function Name: chkTime()
//JSDOC Description:   This function checks for the validity of Time fields.
//JSDOC                theobjis the object of the field passed to the function.
//JSDOC                name is the name of the field.
//JSDOC                The function returns true/false.
function chkTime(theobj)
{
  if(flagVar=='true')
  {
     var fromtime1=null;
     if(typeof(theobj)=='object')
     {
        fromtime1=theobj.value;
     }
     else if(typeof(theobj)=='string')
     {
       fromtime1=theobj;
     }

     if(fromtime1=="")
     {
      return true;
     }
     if(fromtime1.length<5)
     {
       if(typeof(theobj)=='object')
       {
          var str = COM00064;
          setError(str);
		  if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = theobj.getAttribute('name');
			}
          return false;
       }
       else if(typeof(theobj)=='string')
       {
         timeError =COM00064;
         return false;
       }
    }
     var firstcolon=fromtime1.indexOf(":");
     if(firstcolon == -1 && typeof(theobj)=='object')
     {
        var str = COM00064;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = htmlObj.getAttribute('name');
		}
        return false;
     }
     else if(firstcolon == -1 && typeof(theobj)=='string')
     {
       timeError =COM00064;
       return false;
     }
     var minfrom=fromtime1.substring(firstcolon+1);
     var hourfrom=fromtime1.substr(0,firstcolon);

     for (var idx=0;idx<fromtime1.length;idx++)
     {
      ch1 = fromtime1.substring(idx,idx +1);
      if ((ch1 < "0") || (ch1 > "9"))
      {
         if (ch1 == ":")
         {
           continue;
         }
        else
        {
           if(typeof(theobj)=='object')
           {
              var str = COM00064;
              setError(str);
			  if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = htmlObj.getAttribute('name');
				}
              return false;
           }
           else if(typeof(theobj)=='string')
           {
             timeError =COM00064;
             return false;
           }
        }
      }
     }
     if (minfrom < 0 || minfrom >=60 )
     { // check minute range
       if(typeof(theobj)=='object')
       {
          var str = COM00066;
          setError(str);
		  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = htmlObj.getAttribute('name');
		}
          return false;
       }
       else if(typeof(theobj)=='string')
       {
         timeError =COM00066;
         return false;
       }
     }
     if (hourfrom < 0 || hourfrom >=24 )
     { // check hour range
       if(typeof(theobj)=='object')
       {
          var str = COM00065;
          setError(str);
		  if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = htmlObj.getAttribute('name');
			}
          return false;
       }
       else if(typeof(theobj)=='string')
       {
         timeError =COM00065;
         return false;
       }
     }
     return true;
  }
   return true;
}


//JSDOC Function Name    : maxDtDiff()
//JSDOC Description      : This function checks that from date and to date
//JSDOC                  : must be within a specified difference.
//JSDOC Input Parameters : 1) To date object.
//JSDOC                  : 2) From Date object.
//JSDOC                  : 3) Difference.
//JSDOC                  : This function gives an alert if from date
//JSDOC                  : exceeds the specified range.
function maxDtDiff(ObjToDt,ObjFromDt,Diff)
{
  if(flagVar=='true')
  {
    if( (ObjFromDt.value=="") && (ObjToDt.value==""))
    {
      return true;
    }
    checkGreaterDate(ObjFromDt,ObjToDt);
    /* chkDate(ObjFromDt);
    chkDate(ObjToDt); */

    var objElementsFrmDt = ObjFromDt.value.split('-'); // splits the date
    var objElementsToDt  = ObjToDt.value.split('-'); // splits the date
    var formatElements   = format.split('-') ;

    var yearfrom    = convertStringToNumber(getYear(objElementsFrmDt,formatElements));
    var Toyear	    = convertStringToNumber(getYear(objElementsToDt,formatElements));

    var fromDtMonth = convertStringToNumber(getMonth(objElementsFrmDt,formatElements));
    var ToDtMonth   = convertStringToNumber(getMonth(objElementsToDt,formatElements));

    var fromDtDay   = convertStringToNumber(getDay(objElementsFrmDt,formatElements));
    var ToDtDay     = convertStringToNumber(getDay(objElementsToDt,formatElements));

    var diffYear    =  Toyear - yearfrom;
    var monthDiff   =  ToDtMonth - fromDtMonth;

    var fromdate = new Date(yearfrom,fromDtMonth,fromDtDay,23,59,59,999); // Set day and month
    var todate   = new Date(Toyear,ToDtMonth,ToDtDay,23,59,59,999); // Set day and month

    var timedifference = todate.getTime() - fromdate.getTime();

    // This is to check that the fromdate is before the todate
    if (timedifference >0)
    {
      // Number of milliseconds per day
      var msPerDay = 24 * 60 * 60 * 1000 ;
      var daysLeft = timedifference/msPerDay ;
      var dateDiff = Math.round(daysLeft) ; //returns days difference between the two dates specified.
    }

    if(dateDiff > Diff)
    {
      var str=COM00067 + Diff + " days";
      setError(str);
      return false;
    }
    else
    {
      return true;
    }
  }
  else
  return true;
}


//JSDOC Function Name    : getObjectLabel()
//JSDOC Description      : This function returns object label inside a
//                            box bracket.
//JSDOC                    It tales only one parameter
//JSDOC                    objID :id of the Html objeect for which label is
//JSDOC                    required
//JSDOC This function returns label corresponding to the HTML Object
function getObjectLabel(objId,fieldObj)
{
  var label=  "&nbsp;"+ "["+trim(getObjectName(objId,fieldObj))+"]"+"&nbsp;";
  return label;
}


//JSDOC Function Name    : getObjectName()
//JSDOC Description      : This function will return the label and value of the
//JSDOC                    corresponding Html object attached together seaprated
//JSDOC                    by :
//JSDOC                    It takes two parameter
//JSDOC                    objId :id of the Html objeect for which label is
//JSDOC                    required
//JSDOC                    fieldObj :Html object
//JSDOC This function returns label corresponding to the HTML Object

function getObjectName(objId,fieldObj)
{
  len =  objId.length;
  lastChar = objId.charAt(len-1);
  if(checkDataType(lastChar,"N"))
  {
    objId = objId.substring(0,len-1);
  }
  var labelObjId = objId+"_lbl";
  labelObj = document.getElementById(labelObjId); //get the object with the given id.
  var preSib = null;
  var prePreSib = null;
  var  length   = 0;
  var  label    =null;
  if(null==labelObj)
  {
    preSib    = fieldObj.previousSibling;
    //added by MCACross to check the presence of #text
	var mcaCross = 0;
	while(preSib.nodeName == '#text')
	{
		preSib = preSib.nextSibling;
		mcaCross++;
	}
	if(preSib.nodeName=='A')
    {
      parentEle    = preSib.parentElement;
      preParentSib = parentEle.previousSibling;
      mainEle      = preParentSib.previousSibling;
      labelObj     = mainEle;
      length       =  labelObj.childNodes.length;
      if(length==2)
      {
        label = labelObj.childNodes[1].data+"Time";
      }
      else
      {
        label = labelObj.childNodes[0].data+"Time";
      }
    }
  }
  else
  {
    length =  labelObj.childNodes.length;
    // check if field is mandatory or optional then accordingly get the label name.
    if(length==2)
    {
      label = labelObj.childNodes[1].data
    }
    else
    {
      label = labelObj.childNodes[0].data
    }
  }
  var labelTime=null;
  if(label.indexOf(":")!=-1)
  {
    var labelIndex = label.indexOf(":"); // remove the ":" at the end of the label.
    label          = label.substring(0,labelIndex);
  }
  if(label.indexOf(":")!=-1)//If still not removed
  {
    var labelIndex = label.indexOf(":"); // remove the ":" at the end of the label.
    label          = label.substring(0,labelIndex-1);
  }

  if((fieldObj.value =='')||
     (fieldObj.type=='select-one' && fieldObj.value =='98')||
	  (fieldObj.type=='password'))
  {
    return label; // return label
  }
  else
  {
    return (label+" : "+fieldObj.value); // return label
  }
}



//JSDOC Function Name    : getObjName()
//JSDOC Description      : This function will return the label
//JSDOC                    It takes only one parameter
//JSDOC                    objId :id of the Html objeect for which label is
//JSDOC                    required
//JSDOC This function returns label corresponding to the HTML Object

function getObjName(objId)
{
  var fieldObj = document.getElementById(objId);
  len =  objId.length;
  lastChar = objId.charAt(len-1);
  if(checkDataType(lastChar,"N"))
  {
    objId = objId.substring(0,len-1);
  }
  var labelObjId = objId+"_lbl";

  labelObj = document.getElementById(labelObjId); //get the object with the given id.
  var preSib = null;
  var prePreSib = null;
  var  length   = 0;
  var  label    =null;
  if(null==labelObj)
  {
    preSib    = fieldObj.previousSibling;
    if(preSib.nodeName=='A')
    {
      parentEle    = preSib.parentElement;
      preParentSib = parentEle.previousSibling;
      mainEle      = preParentSib.previousSibling;
      labelObj     = mainEle;
      length       =  labelObj.childNodes.length;
      if(length==2)
      {
        label = labelObj.childNodes[1].data+"Time";
      }
      else
      {
        label = labelObj.childNodes[0].data+"Time";
      }
    }
  }
  else
  {
    length =  labelObj.childNodes.length;
    // check if field is mandatory or optional then accordingly get the label name.
    if(length==2)
    {
      label = labelObj.childNodes[1].data
    }
    else
    {
      label = labelObj.childNodes[0].data
    }
  }
  if(label.indexOf(":")!=-1)
  {
    var labelIndex = label.indexOf(":"); // remove the ":" at the end of the label.
    label   = label.substring(0,labelIndex);
  }
  label = trim(label); // trim spaces from label.
  return label; // return label
}


//JSDOC Function Name    : getDay()
//JSDOC Description      : This function checks the date format and on the basis of it
//JSDOC                  : returns the day.
//JSDOC Input Parameters : 1) date Object, 2) format mask.

function getDay(objDate,formatMask)
{
  if(formatMask[0]=='DD' || formatMask[0]=='dd')
  return objDate[0];
  else if(formatMask[1]=='DD' || formatMask[1]=='dd')
  return objDate[1];
  else
  return objDate[2];
}

//JSDOC Function Name    : getMonth()
//JSDOC Description      : This function checks the date format and on the basis of it
//JSDOC                  : returns the month.
//JSDOC Input Parameters : 1) date Object, 2) format mask.

function getMonth(objDate,formatMask)
{
  if(formatMask[0]=='MM' || formatMask[0]=='mm')
  return objDate[0];
  else if(formatMask[1]=='MM' || formatMask[1]=='mm')
  return objDate[1];
  else
  return objDate[2];
}

//JSDOC Function Name    : getYear()
//JSDOC Description      : This function checks the date format and on the basis of it
//JSDOC                  : returns the year.
//JSDOC Input Parameters : 1) date Object, 2) format mask.

function getYear(objDate,formatMask)
{
  if(formatMask[0]=='YYYY' || formatMask[0]=='yyyy')
  return objDate[0];
  else if(formatMask[1]=='YYYY' || formatMask[1]=='yyyy')
  return objDate[1];
  else
  return objDate[2];
}

//JSDOC   Function Name:  mandatoryFieldCheck()
//JSDOC   Description  :  This function checks for the mandatory fields in a block
//JSDOC                   of the form.
//JSDOC                   If certain fields in the form are marked as mandatory then
//JSDOC                   this function should be called to check that none of the
//JSDOC                   mandatory fields are left blank.
//JSDOC                   All the mandatory fields of the form should have id as
//JSDOC                   'reqdxxx...' format, where xxx... is the name of the element.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid .
//JSDOC   false : Invalid .
//JSDOC   This function should be called on the onSubmit event of the FORM tag.
function mandatoryFieldCheck()
{

  var tableObj;
  var tableId;
  var errFlag = false;
  if(flagVar == 'true')
  {
    for(blockCounter=1;;blockCounter++)
    {
      tableId  = "DataBlock"+blockCounter;
      tableObj = document.getElementById(tableId);
      if(tableObj!=null)
      {
      	if(!blockMandatoryFieldCheck(tableObj))
      	{
      		errFlag=true;
      	}
      }
      else
      {
        break;
      }
    }
    for(tableCounter=1;;tableCounter++)
    {
      tableId  = "list"+tableCounter;
      tableObj = document.getElementById(tableId);
      if(tableObj!=null)
      {
        if(!eval("document.forms[0].rowModified_"+tableId))
        {
          continue;
        }
      	if(!listMandatoryFieldCheck(tableId, tableObj))
      	{
      		errFlag=true;
      	}
      }
      else
      {
        break;
      }
    }
    if(errFlag)
    {
      stripMethod();
      return false;
    }
  }
  else
  {
    return true;
  }
}

//JSDOC   Function Name:  blockMandatoryFieldCheck()
//JSDOC   Description  :  This function checks for the mandatory fields in a scalar block
//JSDOC                   of the form.This function is called from the mandatoryFieldCheck().
//JSDOC                   If certain fields in the form are marked as mandatory then
//JSDOC                   this function should be called to check that none of the
//JSDOC                   mandatory fields are left blank.
//JSDOC                   All the mandatory fields of the form should have id as
//JSDOC                   'reqdxxx...' format, where xxx... is the name of the element.
//JSDOC                   This function takes on parameter. tableObj
//JSDOC                   tableObj : table containing element of the block.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid .
//JSDOC   false : Invalid .

function blockMandatoryFieldCheck(tableObj)
{

  var errFlag;
  inputElements  = tableObj.getElementsByTagName("INPUT");

  for(counterInput = 0; counterInput < inputElements.length; counterInput++)
  {
    htmlObj = inputElements[counterInput];
    
    if (htmlObj.id.substring(0,4)=='reqd')
    {
      if(htmlObj.value.charAt(0)==' ')
      {
        htmlObj.value= joaRemoveLeadingSpaces(htmlObj);
      }
      
      if((htmlObj.type=='text' ||htmlObj.type=='password'|| htmlObj.type=='file')&& htmlObj.value=='')
      {
        var elementFieldId=getObjectLabel(htmlObj.id,htmlObj); //objElement.id.substring(4).toUpperCase();
        var str = elementFieldId+COM00004;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = htmlObj.getAttribute('name');
		}
        errFlag = true;
      }
    }
  }
  selectElements = tableObj.getElementsByTagName("SELECT");
  for(counterSelect = 0; counterSelect < selectElements.length; counterSelect++)
  {
    htmlObj = selectElements[counterSelect];
    if (htmlObj.id.substring(0,4)=='reqd')
    {
      if(htmlObj.value.charAt(0)==' ')
      {
        htmlObj.value= joaRemoveLeadingSpaces(htmlObj);
      }
      if(htmlObj.type.toString().charAt(0)=='s')
      {
        var index = htmlObj.selectedIndex;
        if(htmlObj.selectedIndex==0)
        {
			var elementFieldId=getObjectLabel(htmlObj.id,htmlObj); //objElement.id.substring(4).toUpperCase();
			var str = elementFieldId+COM00004;
			setError(str);
			if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = htmlObj.getAttribute('name');
			}
			errFlag = true;
        }
      }
    }
  }
  
  selectElements = tableObj.getElementsByTagName("textarea");
  for(counterSelect = 0; counterSelect < selectElements.length; counterSelect++)
  {
  	htmlObj = selectElements[counterSelect];
   if (htmlObj.id.substring(0,4)=='reqd')
    {
      if(htmlObj.value.charAt(0)==' ')
      {
        htmlObj.value= joaRemoveLeadingSpaces(htmlObj);
	    }
      if(htmlObj.value.length >0 && htmlObj.value.substring(0,2)=="\r\n")//remove leading spaces nad newline
      {
			htmlObj.value= joaRemoveLeadingNewLineSpaces(htmlObj);
		}
      if(htmlObj.value=='')
      {
        var elementFieldId=getObjectLabel(htmlObj.id,htmlObj); //objElement.id.substring(4).toUpperCase();
        var str = elementFieldId+COM00004;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = htmlObj.getAttribute('name');
		}
        errFlag = true;
      }
    }
  }
  
  if(errFlag)
  {
  	return false;
  }
  else
  {
  	return true;
  }
}


//JSDOC   Function Name:  listMandatoryFieldCheck()
//JSDOC   Description  :  This function checks for the mandatory fields in a updateable list block
//JSDOC                   of the form.This function is called from the mandatoryFieldCheck().
//JSDOC                   If certain fields in the form are marked as mandatory then
//JSDOC                   this function should be called to check that none of the
//JSDOC                   mandatory fields are left blank.
//JSDOC                   All the mandatory fields of the form should have id as
//JSDOC                   'reqdxxx...' format, where xxx... is the name of the element.
//JSDOC                   This function takes on parameter. tableObj
//JSDOC                   tableId  : Id of the table containing updatebale List.
//JSDOC                   tableObj : table containing updatebale List.
//JSDOC   The function returns true/false.
//JSDOC   true  : Valid .
//JSDOC   false : Invalid .
function listMandatoryFieldCheck(tableId,tableObj)
{
  var rowModifiedObj;
  var errFlag;
  rows = tableObj.getElementsByTagName('tr');
  for(i = 1; i < rows.length ; i++ )
  {
    rowModifiedObj = eval("document.forms[0].rowModified_"+tableId)[i-1];
    if(rowModifiedObj && (rowModifiedObj.value=='' || rowModifiedObj.value=='Deleted'))
    {
    	continue;
    }    cols= rows[i].getElementsByTagName('td');
    for(ind = 0; ind < cols.length ; ind++ )
    {
      col = cols[ind];
      if(col.childNodes[0])
      {
        htmlObj = col.childNodes[0];
        switch(htmlObj.nodeName)
        {
          case 'INPUT'  :
            if (htmlObj.id.substring(0,4)=='reqd')
            {
              if(htmlObj.value.charAt(0)==' ')
              {
                htmlObj.value= joaRemoveLeadingSpaces(htmlObj);
              }
              if(htmlObj.type=='text'&& htmlObj.value=='')
              {
                var elementFieldId=getObjectLabel(htmlObj.id,htmlObj); //objElement.id.substring(4).toUpperCase();
                var str = elementFieldId+COM00004+ "for  Row["+i+"]";
                setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = htmlObj.getAttribute('name');
				}
                errFlag = true;
              }
            }
            break;
          case 'SELECT' :
            if (htmlObj.id.substring(0,4)=='reqd')
            {
              if(htmlObj.value.charAt(0)==' ')
              {
                htmlObj.value= joaRemoveLeadingSpaces(htmlObj);
              }
              if(htmlObj.type.toString().charAt(0)=='s' &&
                        (htmlObj.selectedIndex==0 || htmlObj.selectedIndex==-1))
              {
                var elementFieldId=getObjectLabel(htmlObj.id,htmlObj); //objElement.id.substring(4).toUpperCase();
                var str = elementFieldId+COM00004+ " for Row["+i+"]";
                setError(str);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = htmlObj.getAttribute('name');
				}
                errFlag = true;
              }
            }
            break;
          default       :
            break;
        }
      }
    }
	}
	if(errFlag)
  {
  	return false;
  }
  else
  {
  	return true;
  }
}

//JSDOC   Function Name: checkMinLength()
//JSDOC   Description  : This function checks the size of value entered should be
//JSDOC                               greater than minimum length specified
//JSDOC                  It takes two parameters, objCurrent and objMinLength
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC                  objMinLength : minimum length of the value entered.
//JSDOC  This function does not accept special characters.
//JSDOC  The function returns true/false.

function checkMinLength(objCurrent,objMinLength)
{
  if(flagVar=='true')
  {
    var objValue = objCurrent.value;
    objValue     = trim(objValue);
    if(objValue && objValue.length < objMinLength)
    {
      var objectName = getObjectLabel(objCurrent.id, objCurrent);
      var str = COM00133+' '+objMinLength+ ' '+ COM00134 + objectName;
      setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
  }
  return true;
}

//JSDOC   Function Name: checkMaxLength()
//JSDOC   Description  : This function checks the size of value entered should be
//JSDOC                               lesser than maximum length specified
//JSDOC                  It takes two parameters, objCurrent and objMinLength
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC                  objMinLength : minimum length of the value entered.
//JSDOC  This function does not accept special characters.
//JSDOC  The function returns true/false.


function checkMaxLength(objCurrent,objMinLength)
{
  if(flagVar=='true')
  {
    var objValue = objCurrent.value;
    objValue     = trim(objValue);
    if(objValue && objValue.length > objMinLength)
    {
      var objectName = getObjectLabel(objCurrent.id, objCurrent);
      var str = ' '+ COM00135 + objMinLength+ ' ' +  COM00134 + objectName ;
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
  }
  return true;
}
//JSDOC   Function Name: alphabeticSubstringCheck()
//JSDOC   Description  : This function checks the substring for
//JSDOC                               alphabetic datatype
//JSDOC                  It takes 3 parameters, objCurrent and startpos and endpos
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC  The function returns true/false.

function alphabeticSubstringCheck(objCurrent, startPos, endPos)
{
  if(flagVar=='true')
  {
    var strObjValue = objCurrent.value;
    strObjValue     = trim(strObjValue);
    if(strObjValue)
    {
      strObjValue   = strObjValue.substring(startPos-1,endPos);
      if(!strObjValue)
      {
        var objectName =  getObjectLabel(objCurrent.id, objCurrent);
        var str = 'Enter character for '+objectName+' from position '+startPos+' to position '+ endPos ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
        return false;
      }
      for (var i=0; i<strObjValue.length; i++)
      {
        var charObject = strObjValue.charAt(i);
        if(!(((charObject >= 'a') && (charObject <= 'z')) || ((charObject >= 'A') && (charObject <= 'Z'))))
        {
          var objectName =  getObjectLabel(objCurrent.id, objCurrent);
          var str = 'Enter character for '+objectName+' from position '+startPos+' to position '+ endPos ;
          setError(str);
		  if(error_arr.length==1 && firstErrorField=="")
			{
				firstErrorField = objCurrent.getAttribute('name');
			}
          return false;
        }
      }
    }
  }
  return true;
}

//JSDOC   Function Name: numericSubstringCheck()
//JSDOC   Description  : This function checks the substring for
//JSDOC                               numeric datatype
//JSDOC                  It takes 3 parameters, objCurrent and startpos and endpos
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC  The function returns true/false.

function numericSubstringCheck(objCurrent, startPos, endPos)
{
  if(flagVar=='true')
  {
    var strObjValue = objCurrent.value;
    var strAllowedValues = '0123456789';
    strObjValue     = trim(strObjValue);
    if(strObjValue)
    {
      strObjValue   = strObjValue.substring(startPos-1,endPos);
      if(!strObjValue)
      {
        var objectName =  getObjectLabel(objCurrent.id, objCurrent);
        var str = 'Enter numbers for '+objectName+' from position '+startPos+' to position '+ endPos ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
        return false;
      }
      for (var i=0; i<strObjValue.length; i++)
      {
        var ch = strObjValue.charAt(i);
        for (var j = 0; j<strAllowedValues.length; j++)
        {
          if (ch == strAllowedValues.charAt(j))
          break;
        }
        if (j == strAllowedValues.length)
        {
          blnFlag = false;
          break;
        }
      }
      if(!blnFlag)
      {
        var objectName =  getObjectLabel(objCurrent.id, objCurrent);
        var str = 'Enter numbers for '+objectName+' from position '+startPos+' to position '+ endPos ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
        return false;
      }
    }
  }
  return true;
}

//JSDOC   Function Name: characterSubstringCheck()
//JSDOC   Description  : This function checks the substring for
//JSDOC                  chcracter in allowedValues String.
//JSDOC                  It takes 3 parameters, objCurrent and startpos and endpos
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC  The function returns true/false.

function characterSubstringCheck(objCurrent, startPos, endPos, allowedValues)
{
  if(flagVar=='true')
  {
    var strObjValue = objCurrent.value;
    var strAllowedValues = allowedValues;
    strObjValue     = trim(strObjValue);
    if(strObjValue)
    {
      strObjValue   = strObjValue.substring(startPos-1,endPos);
      if(!strObjValue)
      {
        var objectName =  getObjectLabel(objCurrent.id, objCurrent);
        var str = 'Enter '+ allowedValues + ' for '+objectName+' from position '+startPos+' to position '+ endPos ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
        return false;
      }
      for (var i=0; i<strObjValue.length; i++)
      {
        var ch = strObjValue.charAt(i);
        for (var j = 0; j<strAllowedValues.length; j++)
        {
          if (ch == strAllowedValues.charAt(j))
          break;
        }
        if (j == strAllowedValues.length)
        {
          blnFlag = false;
          break;
        }
      }
      if(!blnFlag)
      {
        var objectName =  getObjectLabel(objCurrent.id, objCurrent);
        var str = 'Enter '+ allowedValues + ' for '+objectName+' from position '+startPos+' to position '+ endPos ;
        setError(str);
		if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
        return false;
      }
    }
  }
  return true;
}


//JSDOC   Function Name: checkAbsLength()
//JSDOC   Description  : This function checks the size of value entered should be
//JSDOC                               equal to the length specified
//JSDOC                  It takes two parameters, objCurrent and objMinLength
//JSDOC                  objCurrent : Object passed whose value needs to be validated
//JSDOC                  objMinLength : minimum length of the value entered.
//JSDOC  This function does not accept special characters.
//JSDOC  The function returns true/false.

function checkAbsoluteLength(objCurrent,objAbsLength)
{
  if(flagVar=='true')
  {
    var objValue = objCurrent.value;
    objValue     = trim(objValue);
    if(objValue && objValue.length != objAbsLength)
    {
      var objectName = getObjectLabel(objCurrent.id, objCurrent);
      var str = 'Enter '+objAbsLength+ ' character for '+ objectName;
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
  }
  return true;
}


//JSDOC:	An entry made in an HTML field always returns a string -- come what may --
//JSDOC:	resulting into a crazy scenario -- if the value entered by a user is to be compared with a number,
//JSDOC:	an ASCII comparison takes place -- 9900 comes greater than 61000 !
//JSDOC:	hence for the case when we need to make a number comparison for a value entered by a user,
//JSDOC:	we need to convert the string to number

//JSDOC: '0' 's ASCII value will be subtracted from the ASCII value of the character entered -- giving us the right number
//JSDOC: e.g ............. --- >............	[	'5'(ASCII 53) - '0'(ASCII 48) = 5	]

function convertStringToNumber(fieldValue)
{
  if(fieldValue=="" || fieldValue==undefined)
  {
    return 0;
  }
	var n = 0;
	var wholeNum = 0;

	var d = 0.0;
	var decNum = 0.0;

	var zeroASCII ='0';

	var lengthUptoDecimal = 0;
	var lengthAfterDecimal = 0;

	var indexOfDecimal = 0;

	if (fieldValue.indexOf(".") > 0)
	{
		indexOfDecimal = fieldValue.indexOf(".");
		lengthUptoDecimal = fieldValue.substring(0,indexOfDecimal).length;
		lengthAfterDecimal = fieldValue.substring(indexOfDecimal + 1,fieldValue.length).length;
	}
	else
	{
		lengthUptoDecimal = fieldValue.length;
	}

	for (var i = 0; i < lengthUptoDecimal; i++)
	{
		n = fieldValue.substring(i,i+1) - zeroASCII;

		wholeNum = 10 * wholeNum + n;
	}

	if (indexOfDecimal > 0)
	{
		for (var i = 0; i < lengthAfterDecimal; i++)
		{
			var k = fieldValue.indexOf(".") + i + 1;

			if (k >= fieldValue.length)
			{
				break;
			}

			d = (fieldValue.substring(k,k+1) - zeroASCII) * 0.1;

			decNum = decNum + Math.pow(0.1,i) * d;
		}
	}

	if (indexOfDecimal > 0)
	{
		return ((wholeNum * 1.0) + decNum);
	}
	else
	{
		return wholeNum;
	}
}

//JSDOC   Function Name: validateField()
//JSDOC   Description  : This function wrapper for field level validations for updatable lists.
//JSDOC   The function returns true/false.

function validateField()
{
  var argList  = validateField.arguments;
  var htmlObj  = argList[0];
  var validateFlag = 0;
  var validateString = argList[1];

  if(validateString =='F' && argList.length >4)
  {
    validateFlag = argList[4];
  }
  else if(argList.length >2)
  {
    validateFlag=argList[2];
  }

//This check is for appending 00:00 in Time on Tabout for date time field.

  if(flagVar == 'false' && validateString=='DT')
    {
      if((validateFlag & DTEND) == DTEND)
      {
        dateTimeChk(htmlObj,'true');
      }
      else
      {
        dateTimeChk(htmlObj);
      }
    }



  if(flagVar == 'true')
  {
    var validateString = argList[1];
    if(validateString=='A')
    {
      alphabeticFieldCheck(htmlObj);
    }
    else if(validateString=='AN')
    {
      if(validateFlag== 0)
      {
        alphaNumericFieldCheck(htmlObj,'Other');
      }
      else if((validateFlag & multi) == multi)
      {
        alphaNumericFieldCheck(htmlObj,'multi');
      }
      else if((validateFlag & WS) == WS)
      {
        alphaNumericFieldCheck(htmlObj,'WS');
      }
      else if((validateFlag & WSWC) == WSWC)
      {
        alphaNumericFieldCheck(htmlObj,'WSWC');
      }
      else if((validateFlag & NSC) == NSC)
      {
        alphaNumericFieldCheck(htmlObj,'NSC');
      }
      else if((validateFlag & NSCWC) == NSCWC)
      {
        alphaNumericFieldCheck(htmlObj,'NSCWC');
      }
      else if((validateFlag & WSNSC) == WSNSC)
      {
        alphaNumericFieldCheck(htmlObj,'WSNSC');
      }
      else if((validateFlag & WSNSCWC) == WSNSCWC)
      {
        alphaNumericFieldCheck(htmlObj,'WSNSCWC');
      }
    }
    else if(validateString=='D')
    {
      chkDate(htmlObj);
    }
    else if(validateString=='T')
    {
      chkTime(htmlObj);
    }
    else if(validateString=='I')
    {
      if((validateFlag & SIGNED) == SIGNED)
      {
        signedNumChk(htmlObj);
      }
      else
      {
        numericFieldCheck(htmlObj);
      }
    }
    else if(validateString=='F')
    {
      if((validateFlag & SIGNED) == SIGNED)
      {
        signedFltFldChk(htmlObj,argList[2], argList[3]);
      }
      else
      {
        floatFieldCheck(htmlObj, argList[2], argList[3]);
      }
    }
    else if(validateString=='DT')
    {
      if((validateFlag & DTEND) == DTEND)
      {
        dateTimeChk(htmlObj,'true');
      }
      else
      {
        dateTimeChk(htmlObj);
      }
    }
  }
  if(validateFlag!=0)
  {
    if((UP & validateFlag) != 0)
    {
      toUp(htmlObj);
    }
    if((TABOUT & validateFlag) != 0)
    {
      listTabout(htmlObj);
    }

  }
}

function listTabout(htmlObj)
{
}

//JSDOC   Function Name: compareDateTime()
//JSDOC   Description  : This function wrapper for date and time comparisons
//JSDOC   The function returns true/false.

function compareDateTime()
{
  var arglist = compareDateTime.arguments;
  var type    = arglist[0];
  if(flagVar == 'true')
  {
    var date1   = null;
    var date2   = null;
    var time1   = null;
    var time2   = null;

    if(type=="DT")
    {
      //var index = indexOf(" ");
      var arg1  = arglist[1].value;
      var arg2  = arglist[2].value;
      date1     = arg1.substring(0,10);
      time1     = arg1.substring(11);
      date2     = arg2.substring(0,10);
      time2     = arg2.substring(11);
      if(date1==date2)
      {
        if(checkGreaterTime(time1,time2))
        {
          return true;
        }
        else
        {
          date1Label = getObjectLabel(arglist[1].id,arglist[1]);
          date2Label = getObjectLabel(arglist[2].id,arglist[2]);
          var str    = date1Label +COM00052+ date2Label;
          setError(str);
          return false;
        }
      }
      else if(!checkGreaterDate(date1,date2))
      {
        date1Label = getObjectLabel(arglist[1].id,arglist[1]);
        date2Label = getObjectLabel(arglist[2].id,arglist[2]);
        var str    = date1Label +COM00052+ date2Label;
        setError(str);
        return false;
      }
      else
      {
         return true;
      }
    }
    else if(type=="DNT")
    {
      date1 = arglist[1].value;
      time1 = arglist[2].value;
      date2 = arglist[3].value;
      time2 = arglist[4].value;
      if(date1 == date2)
      {
        if(checkGreaterTime(arglist[2],arglist[4]))
        {
          return true;
        }
        else
        {
          return false;
        }
      }
      else if(!checkGreaterDate(arglist[1],arglist[3]))
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return true;
    }
 }
 else
 {
   return true;
 }
}

//JSDOC   Function Name : checkGreaterTime()
//JSDOC   Description   : This function is used for comparing time fields.
//JSDOC   The function returns true/false.
//JSDOC   I/p Parameters: 1) 'From Time' Object
//JSDOC   I/p parameters: 2) 'To Time' Object

function checkGreaterTime()
{
  if(flagVar=='true')
  {
    var arglist  = checkGreaterTime.arguments;
    var fromTime=null;
    var toTime  =null;
    if(typeof(arglist[0])=='object' && typeof(arglist[1])=='object')
    {
      fromTime = arglist[0].value;
      toTime	 = arglist[1].value;
    }
    else if(typeof(arglist[0])=='string' && typeof(arglist[1])=='string')
    {
      fromTime = arglist[0];
      toTime	 = arglist[1];
    }
    else
    {
       var str = "Wrong usage of the function";
       setError(str);
       return false;
    }

    if(!chkTime(fromTime))
    {
      return false;
    }

    if(!chkTime(toTime))
    {
      return false;
    }

    var index   = fromTime.indexOf(":");
    var fromHrs = convertStringToNumber(fromTime.substring(0,index));
    var fromMin = convertStringToNumber(fromTime.substring(index+1));
    var toHrs   = convertStringToNumber(toTime.substring(0,index));
    var toMin   = convertStringToNumber(toTime.substring(index+1));

    if(typeof(arglist[0])=='object' && typeof(arglist[1])=='object' && (toHrs - fromHrs)< 0)
    {
      var fromTimeName = getObjectLabel(arglist[0].id,arglist[0]);
      var toTimeName   = getObjectLabel(arglist[1].id,arglist[1]);
      var str          = fromTimeName+COM00052+toTimeName;
      setError(str);
      return false;
    }
    else if(typeof(arglist[0])=='string' && typeof(arglist[1])=='string' && (toHrs - fromHrs)< 0)
    {
      return false;
    }
    else if((toHrs - fromHrs)==0)
    {
      if(typeof(arglist[0])=='object' && typeof(arglist[1])=='object' && (toMin-fromMin)<0)
      {
        var fromTimeName = getObjectLabel(arglist[0].id,arglist[0]);
        var toTimeName   = getObjectLabel(arglist[1].id,arglist[1]);
        var str          = fromTimeName+COM00052+toTimeName;
        setError(str);
        return false;
      }
      else if(typeof(arglist[0])=='string' && typeof(arglist[1])=='string' && ((toMin-fromMin)< 0))
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return true;
    }
  }
  else
  {
    return true;
  }
}

//JSDOC Function Name:signedNumChk
//JSDOC Description  :This functions checks for signed integer
//JSDOC              :values
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false
function signedNumChk(objCurrent)
{
  if(flagVar=='true')
  {
    var strObjValue = objCurrent.value;
    var strAllowedValues = '+-0123456789';
    var blnFlag = true;

    if(strObjValue.charAt(strObjValue.length-1)==' ')
      strObjValue= removeTrailingSpaces(objCurrent);

    if(strObjValue.charAt(0)==' ')
      strObjValue= joaRemoveLeadingSpaces(objCurrent);

    for (var i = 0; i<strObjValue.length; i++)
    {
      var ch = strObjValue.charAt(i);
      if((ch=='-' || ch=='+') && i==0)
      {
        continue;
      }
      else if((ch=='-' || ch=='+') && i!=0)
      {
        blnFlag = false;
        break;
      }
      for (var j = 0; j<strAllowedValues.length; j++)
      {
        if (ch == strAllowedValues.charAt(j))
        break;
      }
      if (j == strAllowedValues.length)
      {
        blnFlag = false;
        break;
      }
    }
    if (!blnFlag)
    {
      var objectName = getObjectLabel(objCurrent.id,objCurrent);
      var str = objectName+COM00038;
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
    return blnFlag;
  }
  return true;
}


//JSDOC Function Name:signedFltFldChk
//JSDOC Description  :This functions checks for signed float values values
//JSDOC Parameters   :current object, fieldlength and field precision
//JSDOC Result       :returns true/false

function signedFltFldChk(objCurrent,fieldLength,fieldPrecision)
{
  if(flagVar == 'true')
  {
    var strObjValue = objCurrent.value;
    var blnFlag=true;

    if(isNaN(strObjValue))
      blnFlag=false;
    else
    {
      if(strObjValue.charAt(strObjValue.length-1)==' ')
        strObjValue=removeTrailingSpaces(objCurrent);

      if(strObjValue.charAt(0)==' ')
        strObjValue= joaRemoveLeadingSpaces(objCurrent);

      var arrObjectValue   = strObjValue.split('.');
      var strBeforeDecimal = arrObjectValue[0];
      var strAfterDecimal  = arrObjectValue[1];

      if (strAfterDecimal == null)
      {
        if (strBeforeDecimal.length > (fieldLength - fieldPrecision))
        blnFlag=false;
      }
      else
      {
        if (strBeforeDecimal.length > (fieldLength - fieldPrecision) || strAfterDecimal.length > fieldPrecision)
          blnFlag=false;
      }
    }

    if(!blnFlag)
    {
      var objectName =  getObjectLabel(objCurrent.id,objCurrent);
      var str = objectName +COM00057+(fieldLength-fieldPrecision)+' digits and '+ fieldPrecision+' decimals';
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = objCurrent.getAttribute('name');
		}
      return false;
    }
    return blnFlag;
  }
  return true;
}

//JSDOC Function Name:dateTimeChk()
//JSDOC Description  :Function dateTimeChk is used to validate date-time format
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false

function dateTimeChk(obj, showEndTime)
{
  var objVal = trim(obj.value);

  if(objVal == undefined)
     return true;

  var labelName = getObjectLabel(obj.id,obj);
  var timeStr = "";
  var objElements    = objVal.split('-'); // splits the date
  if(!(objElements.length == 3))
  {
    objElements    = objVal.split('/');
    if(!(objElements.length==3))
    {
//      alert("Invalid date separator");
      return ;
    }
    var dateStr =objElements[0]+dateSapertorChar+objElements[1]+dateSapertorChar+objElements[2];
    objVal = dateStr;
    obj.value = objVal;
  }
  var formatElements = format.split(dateSapertorChar) ;
  var day   = getDay(objElements,formatElements);
  var month = getMonth(objElements,formatElements);
  var year  = getYear(objElements,formatElements);
  if(day!=undefined && day.length==1)
   day="0"+day;
  if(month!=undefined && month.length==1)
   month="0"+month;
  objVal= day+dateSapertorChar+month+dateSapertorChar+year;
  obj.value = objVal;

  var len       = objVal.length;

  // Append time portion if not suffixed already
  if (len == 10) // Only date potion is specified
  {
    if(showEndTime == 'true')
      obj.value = objVal+" 23:59"
    else
      obj.value = objVal+" 00:00"
  }
  else
  {
    var index = objVal.indexOf(' ');
    timeStr   = objVal.substring(index+1);

    if (timeStr.length == 4)
    {
      if(timeStr.indexOf(":")!=-1)//if colon is specified
      {
        var index  = timeStr.indexOf(":");
        var str1   = timeStr.substring(0,index);
        var str2   = timeStr.substring(index+1);
        if(str1.length==1)
        timeStr = "0"+timeStr;
        else if(str2.length==1)
        timeStr = timeStr+"0";
        obj.value = objVal.substring(0,10)+ " " + timeStr;
      }
      else
      obj.value = objVal.substring(0,10)+ " " + timeStr.substring(0,2) + ":" + timeStr.substring(2);
    }
    else if(timeStr.length == 3)
    {
       if(timeStr.indexOf(":")!=-1)//if colon is specified
       {
         var index  = timeStr.indexOf(":");
         var str1   = timeStr.substring(0,index);
         var str2   = timeStr.substring(index+1);
         if(str1.length==0)//colon at first place
         timeStr = "00"+timeStr;
         else if(str1.length==1)//colon at second place
         timeStr = "0"+timeStr+"0";
         else if(str1.length==2)//colon at third place
         timeStr = timeStr+"00";
         obj.value = objVal.substring(0,10)+ " " + timeStr;
       }
       else
       {
        timeStr = "0"+timeStr;
        obj.value = objVal.substring(0,10)+ " " + timeStr.substring(0,2) + ":" + timeStr.substring(2);
       }
    }
  }

 // Validate DateTime
 if(flagVar=='true')
 {
    if(len<16 && len!=0)
    {
      var str = labelName + "Invalid: Date-Time format should be 'dd-MM-yyyy HH:mm' ";
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = obj.getAttribute('name');
		}
      return false;
    }
    var dt = objVal.substring(0,10);
    var time = objVal.substring(11);
    if(!chkDate(dt))
    {
      var labelName = getObjectLabel(obj.id,obj);
      var index = dateError.indexOf('month');
      var str = "";
      if(index != -1)
      {
        str = labelName+dateError;
      }
      else
      {
         str = labelName+dateError+dateTimeFormat;
      }
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = obj.getAttribute('name');
		}
      return false;
    }
    if(!chkTime(time))
    {
      var labelName = getObjectLabel(obj.id,obj);
      var str = labelName+timeError;
      setError(str);
	  if(error_arr.length==1 && firstErrorField=="")
		{
			firstErrorField = obj.getAttribute('name');
		}
      return false;
    }
  }
  return true;
}

//	function validateEmail(field)
//	{
//		if(flagVar == 'true')
//		{
//			var field_value=field.value;
//			var periodpos="";
//			var atpos="";
//			var rule_num="0123456789qwertyuiopasdfghjklzxcvbnmASDFGHJKLPOIUYTREWQzXCVBNM.@_-";
//			if(field_value!="")
//			{
//				for(var i=0;i<field_value.length;i++)
//				{
//					var cchar=field_value.charAt(i);
//					if(rule_num.indexOf(cchar)==-1)
//					{
//						setError("Enter Valid Charecters in Email Field");
//						field.focus();
//						return false;
//					}
//				} 
//				atpos=field_value.indexOf("@",1)
//				if(atpos==-1)
//				{
//					setError("Enter your email id in format like info@tcs.com");
//					field.focus();
//					return false;
//				 }
//				 periodpos=field_value.lastIndexOf(".")
//				 if(periodpos==-1)
//				 {
//					setError("should have @y.com etc");
//					field.focus();
//					return false;
//				}
//               //V. NERELLA - START
//				if((periodpos == atpos + 1) || (atpos == periodpos + 1))
//				{
//					setError("@ and . can not be together in an Email");
//					return false;
//				}
//				//V. NERELLA - END
//	 		if(!((periodpos + 3 == field_value.length) || (periodpos + 4 == field_value.length)))
//			{
//				setError("Enter just 3 chars after the symbol.,like .com etc");
//				return false;
//			}
//		}
//		   }
//   else
//	 return true;
//	 }
//Added for CIN and SRN Validations
function getCurrentYear()
{
	var date=new Date();
	var year=date.getFullYear();
	return year;
}
function validateSRN(strobj)
{
	//if(strobj.value.length!='0')
	if(flagVar == 'true')
	{
		strobj.value = joaRemoveLeadingSpaces(strobj);
		strobj.value = removeTrailingSpaces(strobj);
		var strSRN=strobj.value;
		var character;
		var requesttype;
		var servicecode;
		var serialnumber;
		var valid=false;
		if(strSRN.length!=0 && strSRN!=null)
		{
			if(strSRN.length==9)
			{
				character=strSRN.substring(0,1);
				requesttype=strSRN.substring(1,9);
				strobj.value=character;
				if(alphaNumericFieldCheck(strobj,'ALPHAUP') )
				{	
					strobj.value=requesttype;
					if(alphaNumericFieldCheck(strobj,'NUM') )
					{
						strobj.value = strSRN;
						if(alphaNumericFieldCheck(strobj,'ALPHA') )
						{
							valid=true;

						}
					}
				}
			}
			else
			{
				if(valid==false)
				{
					setError("Invalid SRN");
					if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = strobj.getAttribute('name');
					}
				}
			}
		}
		strobj.value=strSRN;
	}
}

function isDateDDMMYYYY(date)
{
	var day=date.substring(0,2);
	var month=date.substring(2,4);
	var year=date.substring(4,8);
	if(day<31 &&  month<12 && year <=getCurrentYear())
	{
		return true;
	}
	else 
		return false;
}

function validateCIN(strobj)
{
	var strCIN;
	var valid = false;
	//if(strobj.value.length!='0')
	if(flagVar == 'true')
	{
		strCIN=strobj.value;
		var status;
		var activity;
		var statecode;
		var year;
		var owner;
		var regnum;
		if(strobj.value!=null && strobj.value.length!=0 )
		{
			if(strobj.value.length==21)
			{
				status=strCIN.substring(0,1);
				activity=strCIN.substring(1,6);
				statecode=strCIN.substring(6,8);
				year=strCIN.substring(8,12);
				owner=strCIN.substring(12,15);
				regnum=strCIN.substring(15,21);
				strobj.value = status;
				if(status=='U' || status=='L')
				{	
					strobj.value = activity;
					if(alphaNumericFieldCheck(strobj,'NUM'))
					{
						strobj.value = statecode;
						if(alphaNumericFieldCheck(strobj,'ALPHA') )
						{
							strobj.value = year;
							if(alphaNumericFieldCheck(strobj,'NUM') && year<=getCurrentYear())
							{
								strobj.value = owner;
								if(alphaNumericFieldCheck(strobj,'WSNSC'))
								{ 
									strobj.value = regnum;
									if(alphaNumericFieldCheck(strobj,'NUM'))
									{
										valid=true;			
									}
								}
							}	
						}
					}
				}
			}
			else if (strobj.value.length==6)
			{
				var firstChar = strCIN.substring(0,1);
				var nextFive = strCIN.substring(1,6);
				strobj.value = firstChar;
				if(alphaNumericFieldCheck(strobj,'ALPHA'))
				{
					strobj.value = nextFive;
					if(alphaNumericFieldCheck(strobj,'NUM'))
					{
						valid=true;
					}
				}
			}
			if(valid==false)
			{
				setError("Invalid CIN");
				if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = strobj.getAttribute('name');
					}
			}
		}
		strobj.value = strCIN;		
	}
}

//JSDOC Function Name:isCINValid()
//JSDOC Description  :Function isCINValid is used to validate CIN
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false
function isCINValid(objCurrent)
{
	if(flagVar == 'true')
	{
		var strCIN=objCurrent.value;
		if(strCIN!="")
		{
			var patternCIN=/^[UL]\d{5}[A-Z]{2}\d{4}[A-Z]{3}\d{6}$/;
			var result=strCIN.match(patternCIN);
			if(result !=null)
			{
				return true;
			}
			var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			setError(URS00001+ objectName);
			if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
			return false;
		}
	}
	return true;
}
	
	function isCINFCRNValid(objCurrent)

{

	if(flagVar == 'true')

	{

		var strCIN=objCurrent.value;

		if(strCIN!="")

		{

			if(strCIN.substring(0,1)=='F')
			{
			var patternCIN=/^[F]\d{5}$/;

			var result=strCIN.match(patternCIN);

			if(result !=null)

			{

				return true;

			}

			var objectName =  getObjectLabel(objCurrent.id,objCurrent);

			setError(URS00003+ objectName);

			if(error_arr.length==1 && firstErrorField=="")

				{

					firstErrorField = objCurrent.getAttribute('name');

				}

			return false;

			}

			else
			{
			var patternCIN=/^[UL]\d{5}[A-Z]{2}\d{4}[A-Z]{3}\d{6}$/;

			var result=strCIN.match(patternCIN);

			if(result !=null)

			{

				return true;

			}

			var objectName =  getObjectLabel(objCurrent.id,objCurrent);

			setError(URS00003 + objectName);

			if(error_arr.length==1 && firstErrorField=="")

				{

					firstErrorField = objCurrent.getAttribute('name');

				}

			return false;

			}


		}

	}

	return true;

}

//JSDOC Function Name:isSRNValid()
//JSDOC Description  :Function isSRNValid is used to validate SRN
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false
function isSRNValid(objCurrent)
{
	if(flagVar == 'true')
	{
		var strSRN=objCurrent.value;
		if(strSRN!="")
		{

			var patternSRN=/^[A-Z]\d{8}$/;
			var result=strSRN.match(patternSRN);
			if(result !=null)
			{
				return true;
			}
			var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			setError(URS00002+ objectName);
			if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
			return false;
		}
	}
	return true;
}

//JSDOC Function Name:isValidDIN()
//JSDOC Description  :Function isValidDIN is used to validate DIN
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false
function isValidDIN(objCurrent)
{
//	alert(URA00001);
	if(flagVar == 'true')
	{
		var strDIN = objCurrent.value;
		if(strDIN!="")
		{
			if(strDIN.length < 8)
			{
				var extra = 8 - strDIN.length;
				for (var i = 0 ; i < extra ; i++)
				{
					strDIN = "0"+strDIN;
				}
				objCurrent.value = 	strDIN;
			}
			if(strDIN == "00000000")
			{
				var objectName =  getObjectLabel(objCurrent.id,objCurrent);
				setError( objectName + " cannot be all zeros");
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}
			var patternDIN=/\d{8}$/;
			var result=strDIN.match(patternDIN);
			if(result !=null)
			{
				return true;
			}
			var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			setError(URA00001+ objectName);
			if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
			return false;
		}
	}
	return true;
}

//ARUNIM -Start
//JSDOC Function Name:isValidPAN()
//JSDOC Description  :Function isPANValid is used to validate PAN
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false
function isValidPAN(objCurrent)
{
	if(flagVar == 'true')
	{
		
		var strPAN=objCurrent.value.toUpperCase();
		objCurrent.value = strPAN;
		if(strPAN!="")
		{

			var patternPAN=/^[A-Za-z]{5}\d{4}[A-Za-z]$/;
			var result=strPAN.match(patternPAN);
			if(result !=null)
			{
				return true;
			}
			var objectName =  getObjectLabel(objCurrent.id,objCurrent);
			setError(URA00002+ objectName);
			if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
			return false;
		}
	}
	return true;
}
//ARUNIM- End

function validateEmail(field)
{
	if(flagVar == 'true')
	{
		var field_value=field.value;
		if(field_value!="")
		{
			var email = field_value.split(',');
			for (var k = 0; k < email.length; k++) 
			{
				var addr = email[k];
				if (!emailCheck(email[k],field)) 
				{
					if(error_arr.length==1 && firstErrorField=="")
					{
						firstErrorField = field.getAttribute('name');
					}
					return false;
				}

				 
			}
		}
	}
	else
	return true;
}

//Vikas begins for validating the Voter's id and Passport Number
function isvalidVoterID(objCurrent)  // var char is repleced by var ch by MCACross
{
	if(flagVar == 'true')
	{
		var strVoterID = objCurrent.value;
		if(strVoterID != "")
		{
			var len = strVoterID.length;
			var ch;
			
			for( i=0; i<len ; i++ )
			{
				 ch = strVoterID.charCodeAt(i);
				 if( (ch < 97 || ch > 122 ) && ( ch < 65 || ch > 90 )&&(ch < 48 || ch > 57) && ch != 47)
				 {
				 	//alert("The format of the Voter ID is wrong");
				 	break;
				 }
			}
			if(i == len)
			{
				return true;
			}	
			else
			{
				var objectName =  getObjectLabel(objCurrent.id,objCurrent);
				setError("Invalid VoterID"+ objectName);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}
		}
	}
	return true;
}

function isvalidPassportNo(objCurrent) // var char is repleced by var ch by MCACross
{
	
	if(flagVar == 'true')
	{
		
		var strPassportNo = objCurrent.value;
		
		if(strPassportNo != "")
		{
			var len = strPassportNo.length;
			var ch;
			for( i=0; i<len ; i++ )
			{
				 
				 ch = strPassportNo.charCodeAt(i);
				 if( (ch < 97 || ch > 122 ) && ( ch < 65 || ch > 90 )&&(ch < 48 || ch > 57) )
				 {
				 	
				 	break;
				 }
			}
			if(i == len)
			{
				return true;
			}	
			else
			{
				var objectName =  getObjectLabel(objCurrent.id,objCurrent);
				setError("Invalid Pasasport No"+ objectName);
				if(error_arr.length==1 && firstErrorField=="")
				{
					firstErrorField = objCurrent.getAttribute('name');
				}
				return false;
			}
		}
	}
	return true;
}

//Vikas ends for validating the Voter's id and Passport Number


function emailCheck (emailStr,field) 
{
	var emailLabel = getObjectLabel(field.id,field);			
	/* The following variable tells the rest of the function whether or not
	to verify that the address ends in a two-letter country or well-known
	TLD.  1 means check it, 0 means don't. */

	var checkTLD=1;

	/* The following is the list of known TLDs that an e-mail address must end with. */

	var knownDomsPat=/^(COM|NET|ORG|EDU|INT|MIL|GOV|ARPA|BIZ|AERO|NAME|COOP|INFO|PRO|MUSEUM)$/;

	/* The following pattern is used to check if the entered e-mail address
	fits the user@domain format.  It also is used to separate the username
	from the domain. */

	var emailPat=/^(.+)@(.+)$/;

	/* The following string represents the pattern for matching all special
	characters.  We don't want to allow special characters in the address. 
	These characters include ( ) < > @ , ; : \ " . [ ] */

	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";

	/* The following string represents the range of characters allowed in a 
	username or domainname.  It really states which chars aren't allowed.*/

	var validChars="\[^\\s" + specialChars + "\]";

	/* The following pattern applies if the "user" is a quoted string (in
	which case, there are no rules about which characters are allowed
	and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	is a legal e-mail address. */

	var quotedUser="(\"[^\"]*\")";

	/* The following pattern applies for domains that are IP addresses,
	rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	e-mail address. NOTE: The square brackets are required. */

	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;

	/* The following string represents an atom (basically a series of non-special characters.) */

	var atom=validChars + '+';

	/* The following string represents one word in the typical username.
	For example, in john.doe@somewhere.com, john and doe are words.
	Basically, a word is either an atom or quoted string. */

	var word="(" + atom + "|" + quotedUser + ")";

	// The following pattern describes the structure of the user

	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");

	/* The following pattern describes the structure of a normal symbolic
	domain, as opposed to ipDomainPat, shown above. */

	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");

	/* Finally, let's start trying to figure out if the supplied address is valid. */

	/* Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze. */

	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) 
	{

		/* Too many/few @'s or something; basically, this address doesn't
		even fit the general mould of a valid e-mail address. */
		setError(emailLabel+"seems incorrect (check @ and .'s)");
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];

	// Start by checking that only basic ASCII characters are in the strings (0-127).

	for (i=0; i<user.length; i++) 
	{
		if (user.charCodeAt(i)>127) 
		{
			setError(emailLabel+"The username contains invalid characters.");
			return false;
		}
	}
	for (i=0; i<domain.length; i++) 
	{
		if (domain.charCodeAt(i)>127) 
		{
			setError(emailLabel+"The domain name contains invalid characters.");
			return false;
		}
	}

	// See if "user" is valid 

	if (user.match(userPat)==null) 
	{

		// user is not valid

		setError(emailLabel+"Invalid Email Address Format.");
		return false;
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	host name) make sure the IP address is valid. */

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null) 
	{

		// this is an IP address

		for (var i=1;i<=4;i++) 
		{
			if (IPArray[i]>255) 
			{
				setError(emailLabel+"The Destination IP address is invalid!");
				return false;
			}
		}
		return true;
	}

	// Domain is symbolic name.  Check if it's valid.
	 
	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;
	for (i=0;i<len;i++) 
	{
		if (domArr[i].search(atomPat)==-1) 
		{
			setError(emailLabel+"The domain name does not seem to be valid.");
			return false;
		}
	}

	/* domain name seems valid, but now make sure that it ends in a
	known top-level domain (like com, edu, gov) or a two-letter word,
	representing country (uk, nl), and that there's a hostname preceding 
	the domain or country. */

	if (checkTLD && domArr[domArr.length-1].length!=2 && 
	domArr[domArr.length-1].toUpperCase().search(knownDomsPat)==-1) 
	{
		setError(emailLabel+"must end in a well-known domain or two letter " + "country.");
		return false;
	}

	// Make sure there's a host name preceding the domain.

	if (len<2) 
	{
		setError(emailLabel+"is missing a hostname!");
		return false;
	}

	// If we've gotten this far, everything's valid!
	return true;
}

function checkGreaterThanSysDate(date)
{
  if(flagVar=='true')
  {
	if(validateflag==true)
    {
    	return ;
    }
	 if(validateflag==false)
	 {
	    if(chkDate(date))
	    {
	    	
	    	if(dateFormatFlip){
		    	businessDate=businessDate.replace("-","/");
		    	businessDate=businessDate.replace("-","/");
		    }

			if(date.value!=null && date.value!='' && !checkGreaterDate(date.value,businessDate) 
				&& date.readOnly !=true && (!date.disabled))
			{
				var dateLabel = getObjectLabel(date.id,date);			
				setError(dateLabel + COM00136);	
			}
		}
	 }
  }		
}

function checkLesserThanSysDate(date)
{
  if(flagVar=='true')
  {
	if(validateflag==true)
    {
    	return ;
    }
	 if(validateflag==false)
	 {
	    if(chkDate(date))
	    {
	    	if(dateFormatFlip){
		    	businessDate=businessDate.replace("-","/");
		    	businessDate=businessDate.replace("-","/");
		    }
			if(date.value!=null && date.value!='' && !checkGreaterDate(businessDate,date.value)
				&& date.readOnly !=true && (!date.disabled))
			{
				var dateLabel = getObjectLabel(date.id,date);			
				setError(dateLabel + COM00137);	
			}
		}
	 }
  }		
}

function fileFieldValidation()
{
  
  if(flagVar=='true')
  {
    /*
      This loop iterates for all the form elements of scalar DataBlock. It evaluates
      all the onblur events on the field elements and invoke them.
    */
    for(blockCounter=1;;blockCounter++)
    {
      tableId  = "DataBlock"+blockCounter;
      tableObj = document.getElementById(tableId);
      if(tableObj!=null)
      {
        inputElements  = tableObj.getElementsByTagName("INPUT");
        for(var i=0;i<inputElements.length ;i++)
        {
          if(inputElements[i].type=='file' && inputElements[i].value!=null && inputElements[i].value.length>0 && inputElements[i].value.indexOf('\\')==-1)
          {
            setError(getObjectLabel(inputElements[i].id,inputElements[i])+' is invalid');
          }
        }
        
      }
      else
      {
        break;
      }
    }
    
  }
  
}
// Added by Parul for space trim starts

function spaceTrim(Obj)
{
var CurrObj = Obj.value;
var len = CurrObj.length;
for( i=0; i<len ; i++ )
{ 
	cr = CurrObj.charCodeAt(i);		
	// to remove consecutive spaces	  
	if(cr == 32)
	{ 
		for(j=i; CurrObj.charAt(j) == ' '; j++);
		CurrObj = CurrObj.substr(0,i+1)+CurrObj.substr(j);
		Obj.value = CurrObj;				
	}
 }
}

// Added by Parul for space trim ends
//JSDOC Function Name:isPeakFilingSRN()
//JSDOC Description  :Function isPeakFilingSRN is used to check whether the SRN is that of Peak filing Forms
//JSDOC Description  :To be called after isvalidSRN
//JSDOC Parameters   :current object
//JSDOC Result       :returns true/false

function isNotPeakFilingSRN(objCurrent)

{

	if(flagVar == 'true')
	{
  
   	if(objCurrent.value!=null && objCurrent.value.length >1 )
    {
      objCurrent.value = joaRemoveLeadingSpaces(objCurrent);
      objCurrent.value = removeTrailingSpaces(objCurrent);
      var strSRN = objCurrent.value;
      var patternSRN=/^[A-Z]\d{8}$/;
      var result=strSRN.match(patternSRN);
      if(result !=null)
  		{
        var firstChar = strSRN.substring(0,1);
        if (firstChar!= "P" && firstChar!= "S" )
        {
          return true;
        }
        var objectName =  getObjectLabel(objCurrent.id,objCurrent);
        setError("It is a Annual Filing/ STP SRN. Service you are trying to avail is not allowed for this SRN."+ objectName);
        if(error_arr.length==1 && firstErrorField=="")
        {
          firstErrorField = objCurrent.getAttribute('name');
        }
        return false;
      }
    }
	}

	return true;

}
    
    
//for CSS

function validchars(objCurrent)
{


var input=objCurrent.value;
var startindex=input.indexOf("<");
var tempVal='';



	if(startindex!= -1)
	{
		var endindex=input.indexOf(">");

		if(endindex!= -1)
		{
	
	
		var objectName =  getObjName(objCurrent.id);
	


		if(objCurrent.name == "attachment")
		{
			tempVal=document.forms[0].strDocumentTitle.value;
			document.forms[0].reset();
			document.forms[0].strDocumentTitle.value=tempVal;

		}
	
		if(scriptTagFlag==1) 
		{
        setError("Invalid characters have been entered in "+objectName);
	    var strChar=objCurrent.value;
	    objCurrent.value='';
		scriptTagFlag=0;
		
		}
		else
		{ 
	     error_arr.length=0;
         setError("Invalid characters have been entered in "+objectName);
         objCurrent.value='';
	     showErrors();
		 error_arr.length=0;
		 } 
		
		
		}

	}


}

function descriptionFieldCheck(objElement, length){
	var elementFieldId=getOnlyObjectName(objElement.id,objElement);
	var value=objElement.value;
	if(value.length>length){
		setError("The maximum length for field '"+elementFieldId+"' is "+length);
		showErrors();
		error_arr.length=0;
		objElement.focus();
		return false;
	}else{
		return true;
	}
	
}


function getOnlyObjectName(objId,fieldObj)
{
  len =  objId.length;
  lastChar = objId.charAt(len-1);
  if(checkDataType(lastChar,"N"))
  {
    objId = objId.substring(0,len-1);
  }
  var labelObjId = objId+"_lbl";
  labelObj = document.getElementById(labelObjId); //get the object with the given id.
  var preSib = null;
  var prePreSib = null;
  var  length   = 0;
  var  label    =null;
  if(null==labelObj)
  {
    preSib    = fieldObj.previousSibling;
    //added by MCACross to check the presence of #text
	var mcaCross = 0;
	while(preSib.nodeName == '#text')
	{
		preSib = preSib.nextSibling;
		mcaCross++;
	}
	if(preSib.nodeName=='A')
    {
      parentEle    = preSib.parentElement;
      preParentSib = parentEle.previousSibling;
      mainEle      = preParentSib.previousSibling;
      labelObj     = mainEle;
      length       =  labelObj.childNodes.length;
      if(length==2)
      {
        label = labelObj.childNodes[1].data+"Time";
      }
      else
      {
        label = labelObj.childNodes[0].data+"Time";
      }
    }
  }
  else
  {
    length =  labelObj.childNodes.length;
    // check if field is mandatory or optional then accordingly get the label name.
    if(length==2)
    {
      label = labelObj.childNodes[1].data
    }
    else
    {
      label = labelObj.childNodes[0].data
    }
  }
  var labelTime=null;
  if(label.indexOf(":")!=-1)
  {
    var labelIndex = label.indexOf(":"); // remove the ":" at the end of the label.
    label          = label.substring(0,labelIndex);
  }
  if(label.indexOf(":")!=-1)//If still not removed
  {
    var labelIndex = label.indexOf(":"); // remove the ":" at the end of the label.
    label          = label.substring(0,labelIndex-1);
  }

  
  return label; // return label
  
}
function isValidForCharSet(objCurrent, rule_num){
	var bValidPhone = false;
	var strnumber=objCurrent.value;
	if(strnumber != "")
	{
		
		strnumber = trim(strnumber);
		for(i = 0; i < strnumber.length; i++)
		{
			cchar = strnumber.charAt(i);
			if(rule_num.indexOf(cchar) == -1)
			{		   
				bValidPhone = false;
				break;
			}		
			else
				bValidPhone = true;
		}

	} 
	else
	{
		bValidPhone = true;
	}
	
	if(!bValidPhone){
		var elementFieldId=getObjectLabel(objCurrent.id,objCurrent);
		setError("Invalid value for field "+elementFieldId);
		showErrors();
		error_arr.length=0;
		objCurrent.focus();
	}
	
	return bValidPhone;
	

}

function isValidPhoneNo(objCurrent){
	return isValidForCharSet(objCurrent, "0123456789- ");
	

}
function isValidPIN(objCurrent){
	return isValidForCharSet(objCurrent, "0123456789");

}
