// JavaScript Document
/*------------------------------------------------------------------------
Deveoped By - ClassicInformatics
Date of Creation - 29/11/04
Date of Modification - 
Description - This Js file contains all the possbile validation for a
              Data entry form and some other function which are used to
			  handle the custom controls.
--------------------------------------------------------------------------*/

//<-------------BASIC FUNCTIONS---------------------------------------->
////Function to apply the Bg color to the text boxes/////////////////////////
function changeBg(obj){
	
	if(document.getElementById(obj))
	{
   		document.getElementById(obj).style.backgroundColor='#D9E5D0';
	}
}
function NormalBg(obj){
	
	if(document.getElementById(obj))
	{
		document.getElementById(obj).style.backgroundColor='#ffffff';
	}
}

//Report Error
function err(el,tp){
	if((el.Prefix) || (el.suffix))
	{
		var errStr ="";
		if(el.Prefix) errStr+=el.Prefix+" ";
		
		errStr+=el.desc;
		
		if(el.suffix) errStr+=" "+el.suffix;

	alert(errStr);
	}
 else
 	{    	     
		 if(this.Prefix[tp]=="")
		  {
			dsc=el.desc;
			a1=dsc.charAt(0);			
			a1=a1.toUpperCase();
			el.desc=a1+dsc.substr(1); 
		  }        
		alert(this.Prefix[tp.toUpperCase()]+" "+el.desc+" "+this.suffix[tp.toUpperCase()]);
	}
}
//Non Empty
function NE(el){
	//alert();
if(el.value=='')
	{
      el.focus(); return false; 
	}
else var elValue = el.value.replace(/(^\s*)|(\s*$)/g, "");    
if(elValue==""){el.select();return false;} else return true;}
//Trim field values
function trimEL(el)
{
  var str = el.replace(/[\n\r\s]+/,"");
  if(str!=="") while(str.charAt(0)==' '){str = str.substring(1,str.length)}
  if(str!=="") while(str.charAt(str.length-1)==' '){str = str.substring(0,(str.length)-1)}
return str;
}
//<-------------------------//BASIC FUNCTIONS-------------------------->


//<-------------------------VALIDATION FUNCTIONS----------------------->
//Checks and corrects input for numerical data
function isInteger(el){
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	if((parseInt(el.value)).toString()=="NaN"){el.focus();el.select();return false;}
	else {el.value=parseInt(el.value);return true;}


}
//Checks and corrects input for float data
function isFloat(el){
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	if((parseFloat(el.value)).toString()=="NaN"){el.focus();el.select();return false;}
	else {el.value=parseFloat(el.value);return true;}
}
//Function to check for valid character entry

////the following code is modified on 03-03-2005 for not accepting charscodes between 91&96/// 
function isChar(el,mode){
var valid=1;
elValue = el.value;
	if(mode==0){for(i=0;i<elValue.length;i++){cc=elValue.charCodeAt(i);if(((cc<65)||(cc>122))||((cc>90)&&(cc<97)))  valid=0;}}
	if(mode==1){for(i=0;i<elValue.length;i++){cc=elValue.charCodeAt(i);if(((cc<65)||(cc>122))&&(cc!=32) || ((cc>90)&&(cc<97))) valid=0;}}
	if(mode==2){for(i=0;i<elValue.length;i++){cc=elValue.charCodeAt(i);if(((cc<65)||(cc>122))&&(cc!=32)&&(cc!=44)&&(cc!=95)&&(cc!=45)&&(cc!=46)||(cc==91)||(cc==92)||(cc==93)||(cc==94)||(cc==96)) valid=0;}}
	if(mode==3)if((elValue.charCodeAt(0)<65)||(elValue.charCodeAt(0)>122) || ((elValue.charCodeAt(0)>90)&&(elValue.charCodeAt(0)<97))) valid=0;
    if(mode==4){for(i=0;i<elValue.length;i++){cc=elValue.charCodeAt(i);if(((cc<65)||(cc>122))&&(cc!=32)&&(cc!=39)&&(cc!=44)&&(cc!=95)&&(cc!=45)&&(cc!=46)&&(cc!=47)&&(cc!=48)&&(cc!=49)&&(cc!=50)&&(cc!=51)&&(cc!=52)&&(cc!=53)&&(cc!=54)&&(cc!=55)&&(cc!=56)&&(cc!=57)&&(cc!=169)&&(cc!=174)&&(cc!=63)&&(cc!=64)&&(cc!=38)&&(cc!=153)||(cc==91)||(cc==92)||(cc==93)||(cc==94)||(cc==96) ) valid=0;}}

	if(mode==6)
	{
		
		for(i=0;i<elValue.length;i++)
		{
			cc=elValue.charCodeAt(i);
			if(((cc<65)||(cc>90)) && ((cc<97)||(cc>122)) && ((cc<48)||(cc>57)))  			
			{	
				valid=0;			
			}
		}
	}
   
if(mode==7){for(i=0;i<elValue.length;i++){cc=elValue.charCodeAt(i);if(((cc<65)||(cc>122))&&(cc!=32)&&(cc!=39)&&(cc!=48)&&(cc!=49)&&(cc!=50)&&(cc!=51)&&(cc!=52)&&(cc!=53)&&(cc!=54)&&(cc!=55)&&(cc!=56)&&(cc!=57) || ((cc>90)&&(cc<97)))  valid=0;}}

if(!valid) {el.focus();el.select();return false;}
else return true;
}

//Function for applying text limits
function txtLimit(el,limit){
	limit = parseInt(limit);
	if(el.value.length>limit) {
	alert("Data limit: "+limit+" characters.\nPlease shorten your information.");
	el.focus();
	el.select();
	return false;
	} else return true;
}
//Function to check for file extensions

function checkValidFileName(el,tp)
	{
     var valid=true;
	 elValue = el.value;	
		for(i=0;i<elValue.length;i++){
			cc=elValue.charCodeAt(i);
			if(((cc<65)||(cc>122))&&(cc!=32)&&(cc!=58)&&(cc!=45)&&(cc!=46)&&(cc!=48)&&(cc!=49)&&(cc!=50)&&(cc!=51)&&(cc!=52)&&(cc!=53)&&(cc!=54)&&(cc!=55)&&(cc!=56)&&(cc!=57)&&(cc!=173) || (((cc>90)&&(cc<97))&& (cc!=92)&& (cc!=95)))
			  {			
				valid = false; 
				break;
			  }
		   }	
	return valid;
	}

function checkExt(el,tp){
	var testresult = true;
	var ext2=trimEL(el.value);
	

	ext2=ext2.toLowerCase();
	if((ext2=="gif")||(ext2=="jpg")||(ext2=="png")||(ext2=="bmp")||(ext2=="jpeg")){
		el.focus();
		el.select();
        testresult = false;	  } 

	var ext = trimEL(el.value);	
	ext = ext.substring(ext.lastIndexOf(".")+1,ext.length);
	ext = ext.toLowerCase();
	
	if(tp=="IMG")	
		if((ext!="gif")&&(ext!="jpg")&&(ext!="png")&&(ext!="bmp")&&(ext!="jpeg")){
			el.focus();
			el.select();
			testresult = false;
		}	
	if(tp=="DOC")
		if((ext!="rtf")&&(ext!="txt")&&(ext!="doc")) {
			el.focus();
			el.select();
			testresult = false;
		}
	return testresult;
}

//San - To check checkbox selected or not
function isChecked(el)
{		
	if(!el.checked)
	{
		el.focus();
		return false;
	}
	return true;
}
//<------------------------VALIDATION FUNCTIONS----------------------------->


//<-----------------------PARENT FUNCTIONS----------------------------------->
function Validator(frmname,funName)
{
	k=true;
  this.formobj=document.forms[frmname];
	if(!this.formobj)
	{
	  alert("BUG: couldnot get Form object "+frmname);
		k=false;
		return;
	}
	
	if(this.formobj.onsubmit)
	{
	 this.formobj.old_onsubmit = this.formobj.onsubmit;
	 this.formobj.onsubmit=null;
	}
	else
	{
	 this.formobj.old_onsubmit = null;
	}
	
	//Prefix-suffix Array
	this.formobj.Prefix = new Array();
	//this.formobj.Prefix = new Array();
	this.formobj.suffix = new Array();
	//alert(this.formobj);

	this.formobj.Prefix["BLANK"] = "Please enter";
	this.formobj.suffix["BLANK"] = "";
	this.formobj.Prefix["LIMIT"] = "The Limit for";
	this.formobj.suffix["LIMIT"] = "has exceeded. Please shorten it.";
	this.formobj.Prefix["INT"] = "";
	this.formobj.suffix["INT"] = " accepts only integer data.";
	this.formobj.Prefix["FLOAT"] = "";
	this.formobj.suffix["FLOAT"] = " accepts only float data.";
	this.formobj.Prefix["CHAR1"] = "";
	this.formobj.suffix["CHAR1"] = " can contain letters only.";
	this.formobj.Prefix["CHAR2"] = "";
	this.formobj.suffix["CHAR2"] = " can contain either space or letters.";
	this.formobj.Prefix["CHAR3"] = "";
	this.formobj.suffix["CHAR3"] = " can contain letters, space, hyphen, underscore or dot only.";
	this.formobj.Prefix["CHAR4"] = "";
	this.formobj.suffix["CHAR4"] = " must start with an letters.";
	this.formobj.Prefix["CHAR5"] = "";
	this.formobj.suffix["CHAR5"] = " can contain numeric, alphabets, space, hyphen, underscore or dot only.";
	
	this.formobj.Prefix["CHAR7"] = "";
	this.formobj.suffix["CHAR7"] = " can numbers or letters only.";
	this.formobj.Prefix["CHAR8"] = "";
	this.formobj.suffix["CHAR8"] = " can contain letters,numbers and single quote only.";
	
	this.formobj.Prefix["EMAIL"] = "Please enter correct";
	this.formobj.suffix["EMAIL"] = " (Example : someone@enterprisepromotions.com)";
	this.formobj.Prefix["IP"] = "";
	this.formobj.suffix["IP"] = " provided by you is either invalid or special which cannot be used here.";
	this.formobj.Prefix["URL"] = "Invalid ";
	this.formobj.suffix["URL"] = "";
	this.formobj.Prefix["FILETYPE"] = "You have selected invalid file type for ";
	this.formobj.suffix["FILETYPE"] = "";
	this.formobj.Prefix["FILENAME"] = "Please avoid letters ~`!@#$%^&*(){}[];'<,/?|> for ";
	this.formobj.suffix["FILENAME"] = "";

//San - Description for checkbox
	this.formobj.Prefix["CHK"] = "You must ";
	this.formobj.suffix["CHK"] = "";




	//Function redirections
	this.addValidation = addValidation;
	this.formobj.onsubmit=validateAll;
	this.countChars=countChars;
	this.formobj.err = err;
	this.updateAlert = updateAlert;

	if(funName){
         this.formobj.userFunction = funName;
       }
}

function updateAlert(fix,alertID,content){
	if (fix.toLowerCase()=="prefix") this.formobj.Prefix[alertID]=content;
	else this.formobj.suffix[alertID]=content;
}

function addValidation(el_desc,el,req,maxLen,Type,Prefix,suffix)
{

var itemobj = this.formobj[el];
  if(!itemobj)
	{
	  alert("BUG: Couldnot get the input object named: "+itemname);
		return;
	}
	else{

		itemobj.validated = true;
		itemobj.desc = el_desc;
		itemobj.req = req;
		if(maxLen) itemobj.maxLen = maxLen;
		if(Type) itemobj.Type = trimEL(Type.toUpperCase());
		if(Prefix) itemobj.Prefix = Prefix;
		if(suffix) itemobj.suffix = suffix;
	}
}

//Final submission time validation
function validateAll()
	{         
		var i=0;		 		
		while(this.elements.length!=i){			
			var el = this.elements[i];
			
			if(el.validated){
				if(((el.type).toUpperCase=="TEXT")||((el.type).toUpperCase=="TEXTAREA")) el.value=trimEL(el.value);
				//Conditional checking starts here
				if(el.req) if(el.req!=0) if(!NE(el)){this.err(el,"BLANK"); return false};
				if(el.maxLen) if(el.maxLen!=0) if(!txtLimit(el,el.maxLen)){return false};
				if(el.Type=="INT") if(!isInteger(el)){this.err(el,"INT"); return false};
				if(el.Type=="FLOAT") if(!isFloat(el)){this.err(el,"FLOAT"); return false};
				if(el.Type=="CHAR1") if(!isChar(el,0)){this.err(el,"CHAR1"); return false};
				if(el.Type=="CHAR2") if(!isChar(el,1)){this.err(el,"CHAR2"); return false};
				if(el.Type=="CHAR3") if(!isChar(el,2)){this.err(el,"CHAR3"); return false};
				if(el.Type=="CHAR4") if(!isChar(el,3)){this.err(el,"CHAR4"); return false};
                if(el.Type=="CHAR5") if(!isChar(el,4)){this.err(el,"CHAR5"); return false};
				if(el.Type=="CHAR6") if(!isChar(el,5)){this.err(el,"CHAR6"); return false};
				
				if(el.Type=="CHAR7") if(!isChar(el,6)){this.err(el,"CHAR7"); return false};
				if(el.Type=="CHAR8") if(!isChar(el,7)){this.err(el,"CHAR8"); return false};

				if(el.Type=="EMAIL") if(!validEmail(el)){this.err(el,"EMAIL"); return false;}
				if(el.Type=="IP") if(!isIP(el)){this.err(el,"IP"); return false;}
				if(el.Type=="URL") if(!validURL(el)){this.err(el,"URL"); return false;}
				if(el.req) if(el.Type=="IMG") if(!checkExt(el,"IMG")){this.err(el,"FILETYPE"); return false;}
				if(el.Type=="FILE")if(!checkValidFileName(el,"FILE")){this.err(el,"FILENAME"); return false;}				
				if(el.Type=="DOC") if(!checkExt(el,"DOC")){this.err(el,"FILETYPE"); return false;}
               
	
			//San - Validation for checkbox
				if(el.req)
					if(el.Type=="CHK") 
						if(!isChecked(el))
						{
							this.err(el,"CHK"); 
							return false;
						}


				//Conditional checking ends here
			}
			i++;
		}
		  /////////////////to execute the user defined function//////////////////////////////  
                if(this.userFunction){
					eval("v=" + this.userFunction + "()");
					return v;
				   }   

}


//<---------------------//PARENT FUNCTIONS----------------------------------->



//<------------------------PAGE AUTOMATION FUNCTIONS------------------------>
//Function for checking all checkboxes

function checkAll(){
	var i=0;
	ID = "chk"+i;
	while(document.forms[0].elements[ID]){
		document.forms[0].elements[ID].checked=1;
		i++;
		ID="chk"+i;
	}
}

//Function to uncheck all checkboxes
function uncheckAll(){
	var i=0;
	ID = "chk"+i;
	while(document.forms[0].elements[ID]){
		document.forms[0].elements[ID].checked=0;
		i++;
		ID="chk"+i;
	}
}

//Function for empty Deletion
function falseDelete(){
	elChecked=0;
	var i=0;
	ID = "chk"+i;
	while(document.forms[0].elements[ID]){
		if(document.forms[0].elements[ID].checked)
		elChecked=1;
	i++;
	ID="chk"+i;
	}
if(!elChecked) alert("Empty selection.\nPlease select something before you execute this command.");
}




//Validation for proper Email address
function validEmail(el){
	testresults = true;
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	var str=el.value
	var filter=/^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$/i
	if (filter.test(str))
	testresults=true
	else {el.focus();el.select();testresults=false;
	return false;
	}
    
    var theStr = new String(el.value)
    for(i=0;i<theStr.length;i++)
	{
	  if(theStr.charCodeAt(i)==32)
         return false;     
	}
  var index = theStr.indexOf('@'); 
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
	
    if ((pindex > index+1) && (theStr.length > pindex+1))
	  testresults = true;
    
	theStr2 = theStr.substring(pindex+1, theStr.length);       
	

	var pindex2 = theStr2.indexOf(".",0);
	
	if(pindex2==0)
		 testresults=false;
	else if(pindex2 > 0){
        if(theStr.length > (pindex2+pindex+2))
	         testresults=true;
        else
			testresults=false;
            
			
            theStr3 = theStr.substring(pindex2+pindex+2, theStr.length);
			
			var pindex3 = theStr3.indexOf(".",0);
			
			if(pindex3==0 || pindex3>0)
				testresults= false;					
    }     
  }
  return (testresults); 
}

//Validation for proper URL
function validURL(el){
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	var str=el.value
	var filter=/^((ht|f)tp(s?))(:((\/\/)(?!\/)))(((w){3}\.)?)([a-zA-Z0-9\-_\.]+(\.(com|edu|gov|int|mil|net|org|biz|info|name|pro|museum|co\.uk)))((?!\/))(([a-zA-Z0-9\-_\/]*)?)$/i
	if (filter.test(str))
	testresults=true;
	else {el.focus();el.select();testresults=false;}
	return (testresults);
}




//Validation for Proper Ip Address
function isIP (el) {
	var elval= el.value.replace(/[\n\r\s]+/,"");
	if(elval =="") return true;
	var IPvalue=el.value;
	errorString = "";
	theName = "IPaddress";

	var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
	var ipArray = IPvalue.match(ipPattern); 

	if (IPvalue == "0.0.0.0")
	errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
	else if (IPvalue == "255.255.255.255")
	errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
	if (ipArray == null)
	errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
	else {
	for (i = 0; i < 4; i++) {
	thisSegment = ipArray[i];
	if (thisSegment > 255) {
	errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
	i = 4;
	}
	if ((i == 0) && (thisSegment > 255)) {
	errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
	i = 4;
		  }
	   }
	}
	extensionLength = 3;
	if (errorString != ""){
		alert(errorString);
		el.focus();el.select();
		}
		return true;
}

///Count characters in different text box//
function countChars(strpCharObject,strpCntObject)
{
	var el = eval("strpCharObject");
	var strVal=strpCharObject.value;
	if(strpCharObject.value!=""){
		var str=strpCharObject.value;
		var Bal=el.maxLen-str.length;
		if(Bal>=0){strpCntObject.value=Bal};
		if(Bal<=0){
			sub=strVal.substr(0,20);
			strpCharObject.value=sub;
			}
		}
	if(strpCharObject.value==""){
		strpCntObject.value=el.maxLen;
	}
}



 /* open a popup for any kind of file */
function window_popup(filename,attr1,winname)
{
	if(winname=="")
	winname="openwin";
	var popupwin=window.open(filename,winname,attr1);
}

/* validate the key pressed in a textbox validate if it is anumeric or not */ 
function validIntDigit(key, fieldValue)
{	
	if(parseInt(key)<48 || parseInt(key)>57) 
	{  		
		return 0;
	}
	else
	{   		
		return key;
	}
}


function cc()
{
  if (document.cookie == "") 
  {
    alert("COOKIES need to be enabled!");
  } else {
  }
}
