
/// Types declaration
	var cTEXTBOX="text";
	var cTXTPASSWORD="password";
	var cTEXTAREA="textarea";
	var cCHECKBOX="checkbox";
	var cRADIO="radio";
	var cDROPDOWN="select-one";
	var cLISTBOX="select";

	var cTEXT=1;
	var cNUMERIC=2;
	var cEMAIL=3;
	var cDATE=4;
	var cUSERNAME=5;
	var cPASSWORD=6;
	var	cCPASSWORD=7;

/// Variable and Constants declaration
	var disableColor="#dddddd"

//######### this function is called by the form onsubmit #######################
	function checkform(FormName)
	{
		var frm;
		if (document.all) 
		{ 
			frm=eval("document.all."+FormName);
		}
		else
		{
			frm=eval("document."+FormName);
		}
		myRslt= (ValidateFormObjects(frm))
		myRslt= myRslt && (FormsCityValidate(frm))
		return  myRslt
	
	}//end of function

//######### this function validates all the objects of form #######################
	var f
	function ValidateFormObjects(frm)
	{
	
		f=frm;
		var frmLength=f.elements.length;
		var itype,irequired;
		var iReturn=0;
		for (var i=0; i < frmLength; i++)	
		{
			itype=frm.elements[i].type;
			irequired=isRequired(frm.elements[i]);
			
			if (((itype==cCHECKBOX) || (itype==cRADIO)) && (irequired==1))
			{
				//validation of checkbox and radio
				var field=f.elements[i];
				if (field.checked==false)
				{
					 alert(field.msg);
					 field.style.backgroundColor=disableColor;
					 field.focus();
					iReturn=iReturn+1;
					break;
				}
				//alert("validation of checkbox/radio");
				//return true;
			}
			else if (((itype==cDROPDOWN) || (itype==cLISTBOX)) && (irequired==1))
			{
				//validation of dropdown
				var field=f.elements[i];
				
				if (field.value==0)
				{
					 alert(field.msg);
					 field.style.backgroundColor=disableColor;
					 field.focus();
					iReturn=iReturn+1;
					break;
				}
			}
			else if ((itype==cTEXTBOX) || (itype==cTXTPASSWORD) || (itype==cTEXTAREA))
			{
			
				  if (filterWords(f.elements[i]))
					{				
						if (irequired)
						{
							if(ValidationType(f.elements[i])==false)
							{
								iReturn=iReturn+1;
								break;
							}
						}
					}
					else
					{
						iReturn=iReturn+1;
						break;
					}
			}
			
		}//end of for

		if (iReturn>0 )
		{
			return false;
		}
		else
		{
			return true;
		}
		
		
	}//end of function

////######## Reads the element's "required" attribute ###########
	function isRequired(elm)
	{
		var obj=elm;
		var retValue=0;
		if (document.all) 
			{ 
				retValue=obj.req;
			}
		else
			{
				if (obj.attributes.req)
				{
					retValue=obj.attributes.req.value;
				}
			}
		return retValue;
	
	}//end of function
////######## Reads the elements msg attribute ###########
	function getMessage(elm)
	{
		var obj=elm;
		var retValue="";
		if (document.all) 
			{ 
				retValue=obj.msg;
			}
		else
			{
				if (obj.attributes.msg)
				{
					retValue=obj.attributes.msg.value;
				}
			}
		return retValue;
	
	}//end of function
	
////######## Reads the elements trtypr attribute ###########
	function getObjectType(elm)
	{
		var obj=elm;
		var retValue=1;
		if (document.all) 
			{ 
				retValue=obj.trtypr;
			}
		else
			{
				if (obj.attributes.trtypr)
				{
					retValue=obj.attributes.trtypr.value;
				}
			}
		return retValue;
	
	}//end of function
////######## this function validates all the types of validations ###########
	function ValidationType(elm)
	{
		var field=elm;
		var iRequired=isRequired(field);
		var message=getMessage(field);
		var iType=getObjectType(field);

		if (Trim(field.value) =="")
		{ 
		
				field.focus();
				field.style.backgroundColor=disableColor;
		        alert (message);
				//field.select();
		
		            return false;
		}           
		else
		{ 
		
			//for numeric values	
				if(iType==cNUMERIC)
					{
					if(isNaN(field.value)||(field.value==0)||(field.value < 0))
						{
							alert(message);
				            field.select();
					        return false;
						}
						else
						{
							return true;
						}
					}
					
					//Email
				if(iType==cEMAIL)
					{
					 return checkemail(field);
					}
					
					//Validation for date
				if(iType==cDATE)
					{
					if(isDate(field.value))
						{
							return true;
						}
						else
						{
							field.style.backgroundColor=disableColor;
							field.select();
							return false;
						}
					}
					
					//Validation for Username
				if(iType==cUSERNAME)
					{
		
					if(isUsername(field.value))
						{
							return true;
						}
						else
						{
							field.style.backgroundColor=disableColor;
							field.select();
							return false;
						}
					}
					
					//Validation for Password
				if(iType==cPASSWORD)
					{
		
					if(isPassword(field.value))
						{
							return true;
						}
						else
						{
							field.style.backgroundColor=disableColor;
							field.select();
							return false;
						}
					}
					
					//Validation for confirm Password
					if(iType==cCPASSWORD)
					{
		
					if(confirmPassword(field))
						{
							return true;
						}
						else
						{
							field.style.backgroundColor=disableColor;
							field.select();
							return false;
						}
					}

					
			return true;
		}
	}//end of function

////######## this function validates email ids ###########
	function checkemail(mfield)
	{
		var str=mfield.value
		TheFormNameElmReq=isRequired(mfield) ;
		message=getMessage(mfield);
	
		//var filter=/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
		//var filter=/^[a-z0-9][a-z0-9_\.-]{0,}[a-z0-9]@[a-z0-9][a-z0-9_\.-]{0,}[a-z0-9][\.][a-z0-9]{2,4}$/
		var filter=/^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$/
		if (filter.test(str))
		{
			var emailIsOk=0;
			var IncomData=str;
			var incomeFiledName=mfield.name
			for (k=0;k<=(IncomData.length-1);k++)
			{
				if ( !((IncomData.charCodeAt(k)>=37 && IncomData.charCodeAt(k)<=126)))
				{
					mfield.focus();
					mfield.style.backgroundColor=disableColor;
					emailIsOk=1;
				}
			}
			if (emailIsOk==0)
			{
			    return true
			}
			else
			{
			    alert(message)
				mfield.focus();
				mfield.select();
		    	return false
			}
		}
	 	else 
	 	{
		    alert(message)
			mfield.focus();
			mfield.select();
		   	return false
		}
	}// end of function
	
//########################################################     	
//This function implements the validation on checkboxes and radio buttons, and it is invoked from within
//the checkform function.
	function checkCheckbox(TheFormName,number)
	{	
		var chk;
		chk=true;
		var i;
		for (i=0; i < number; i++)	
		{			
			if (((TheFormName.elements[i].type=="checkbox")||(TheFormName.elements[i].type=="radio"))&&(TheFormName.elements[i].req==1))	
			{	
				chk = false;
				var j;
				fieldName = TheFormName.elements[i].name;
				ObjCheckBox=document.getElementsByName(fieldName);
		
				for (j=0;j<ObjCheckBox.length;j++)
				{				
					if (ObjCheckBox[j].checked)
					{
						chk=true;
					}				
				}
				
				if (!(chk))
				{
					alert(ObjCheckBox[0].msg);
					ObjCheckBox[0].focus();
					break;
				}
				i=i+j;
			}		
		}
		return chk;
	}//end of function 
//#################################################################
//The following is the code of the Trim function.

function Trim(TRIM_VALUE)
{
	if(TRIM_VALUE.length < 1)
	{return"";}

	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE=="")
	{
	return "";
	}
	else
	{
	return TRIM_VALUE;
	}
} //End Function

function RTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";

	if(v_length < 0)
	{return"";}
	var iTemp = v_length -1;

	while(iTemp > -1)
	{
		if(VALUE.charAt(iTemp) == w_space)
		{}
		else
		{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	
	} //End While

return strTemp;

} //End Function

function LTrim(VALUE)
{
	var w_space = String.fromCharCode(32);
	if(v_length < 1)
	{
	return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";
	var iTemp = 0;

	while(iTemp < v_length)
	{
	if(VALUE.charAt(iTemp) == w_space)
	{}
	else
	{
		strTemp = VALUE.substring(iTemp,v_length);
		break;
	}
	iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function

//#################################################################
	
//#################################################################
// DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
// Declaring valid date character, minimum year and maximum year
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
//#################################################################
	function isInteger(s)
	{
		var i;
	    for (i = 0; i < s.length; i++){   
	        // Check that current character is number.
	        var c = s.charAt(i);
	        if (((c < "0") || (c > "9"))) return false;
	    }
	    // All characters are numbers.
	    return true;
	}//end of function

//#################################################################
	function stripCharsInBag(s, bag)
	{
		var i;
	    var returnString = "";
	    // Search through string's characters one by one.
	    // If character is not in bag, append to returnString.
	    for (i = 0; i < s.length; i++){   
	        var c = s.charAt(i);
	        if (bag.indexOf(c) == -1) returnString += c;
	    }
	    return returnString;
	}

//#################################################################
	function daysInFebruary (year)
	{
		// February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
	}

//#################################################################
	function DaysArray(n) 
	{
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
	   } 
	   return this
	}//end of function
//#################################################################
	function isDate(dtStr)
	{
		var daysInMonth = DaysArray(12)
		var pos1=dtStr.indexOf(dtCh)
		var pos2=dtStr.indexOf(dtCh,pos1+1)
		var strDay=dtStr.substring(0,pos1)
		var strMonth=dtStr.substring(pos1+1,pos2)
		var strYear=dtStr.substring(pos2+1)
		strYr=strYear
		if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
		if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
		for (var i = 1; i <= 3; i++) {
			if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
		}
		month=parseInt(strMonth)
		day=parseInt(strDay)
		year=parseInt(strYr)
		if (pos1==-1 || pos2==-1){
			alert("The date format should be : dd/mm/yyyy")
			return false
		}
		if (strMonth.length<1 || month<1 || month>12){
			alert("Please enter a valid month")
			return false
		}
		if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
			alert("Please enter a valid day")
			return false
		}
		if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
			alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
			return false
		}
		if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
			alert("Please enter a valid date")
			return false
		}
	return true
	}// end of function

//#################################################################
//**********************************
//allows only 16 characters of username
//spaces and special characters are not allowed
//to avoid SQL Injection

function isUsername(string) {
var st=string;

	if (st.length<6)
	{
	alert("Username Must be at least 6 characters or more !!!")
	return false;
	}
	if (st.length>16)
	{
	alert("Username should not be greater than 16 Characters");
	return false;
	}

    if (st.search(/^\w+\.?(\w+\.?)?$/) != -1)
	    {
	        return true;
	    }
	    else
	    {
	    alert(st)
	    alert("Only letters,_(Underscore) and numbers allowed")
	        return false;
        }
}

//#################################################################
//**********************************
//allows only 6-16 characters of password
function isPassword(string) 
{
	var st=string;
	if (st.length<6)
	{
		alert("Password Must be at least 6 characters or more !!!")
		return false;
	}
	if (st.length>16)
	{
		alert("Password should not be greater than 16 Characters");
		return false;
	}
	//\w+(\w+)?
	if (st.search(/^[A-Za-z0-9]+$/) != -1)
	    {
	        return true;
	    }
	    else
	    {
	    alert("Only letters,_(Underscore) and numbers allowed")
	        return false;
        }

	return true;
}

//#################################################################
//**********************************
//confirm password and matches it with the matches element
function confirmPassword(elm) 
{
	var field=elm;
	var fieldConfirm=getMatchObjectValue(elm)

		if (field.value!=fieldConfirm )
		{
			alert("Password does not match");
			return false;
		}
		return true
}

////######## Reads the elements trtypr attribute ###########
	function getMatchObjectValue(elmnt)
	{

		var obj=eval("f." + getMatchName(elmnt));
		var retValue=obj.value;

		return retValue;
	
	}//end of function

function getMatchName(elm)
	{
		var obj=elm;
		var retValue="";
		if (document.all) 
			{ 
				retValue=obj.matches;
			}
		else
			{
				if (obj.attributes.matches)
				{
					retValue=obj.attributes.matches.value;
				}
			}
		return retValue;
	
	}//end of function


/////########## add to favourite 
function AddToFavorite(sURL,sTitle)
{
	if (document.all)
	window.external.AddFavorite(sURL,sTitle)
}


///////////////////////////////////////////////////////////////////////////////
/* bad word filter */
/* add the bad words to be filtered by the input */

var swear_words_arr=new Array("fuck","bloody","war","terror");
var swear_alert_arr=new Array;
var swear_alert_count=0;
var errorMsg="The form cannot be submitted.\nThe following illegal words were found:\n"
	errorMsg=errorMsg + "_______________________________\n{0}\n_______________________________"



function filterWords(field)
{
 //reset alert count
 swear_alert_count=0;
 var sWord=field.value
  
 var compare_text=sWord;
 
 for(var i=0; i<swear_words_arr.length; i++)
 {
  for(var j=0; j<(compare_text.length); j++)
  {
   if(swear_words_arr[i]==compare_text.substring(j,(j+swear_words_arr[i].length)).toLowerCase())
   {
    swear_alert_arr[swear_alert_count]=compare_text.substring(j,(j+swear_words_arr[i].length));
    swear_alert_count++;
   }
  }
 }
 var alert_text="";
 for(var k=1; k<=swear_alert_count; k++)
 {
  alert_text+="\n" + "(" + k + ")  " + swear_alert_arr[k-1];
 }
 if(swear_alert_count>0)
 {
  alert(errorMsg.replace("{0}",alert_text))
  field.select();
  return false;
 }
 else
 {
 	return true;

 }
}


////********************************************************************************//////

function FormsCityValidate(frm)
{
    
    var myReturn=true;
    //search for elements with 'AltField' attribute if 'frm' form object   
    var alt=new Array();
    var ArIdx=0;
    var AltFieldName= new String()
    for (var hh=0; hh < frm.elements.length; hh++)
    {
        AltFieldName='';
        AltFieldName=getAltFieldAttr(frm.elements[hh])
        
        if (typeof AltFieldName !='undefined')
        {    
            alt[ArIdx]=frm.elements[hh]
            ArIdx++
        }
    }
        
    for (var vv=0; vv < alt.length ; vv++)
    {
        //check each obj in 'alt' array
        //check container, if visible get alt field and validate it
        var contObj,contName
        contName=getAltContainerAttr(alt[vv])
        if (document.all)
            contObj=eval('document.all.' + contName)
        else
            contObj=eval('frm.' + contName)
        if (contObj.style.display=='block')
        {
            //validate alt field
            
            var altF, altN
            altN=getAltFieldAttr(alt[vv])
            if (document.all)
                altF=eval('document.all.' + altN)
            else
                altF=eval('frm.' + altN)
            var strF=new String()
            strF=(altF.value)
            if ((strF.length==0) || (strF==' '))
            {
                alert(altF.msg);
                altF.style.backgroundColor=disableColor;
                altF.focus();
                myReturn=false;
            }
            if (!myReturn) break;
        }
    }
    
    return myReturn;

}

///////**************************************************************************/////
    
    function showHideAltField(frmName, mainName)
{
    //mainObj: the Main Field should be Select (Drop Down) (should be validated before calling this function)
    //          should have attribute AltField='altObj name (not id)' AltContainer='container (DIV or SPAN) name (not id)'
    //altObj: the Alternative Field should be Input Text, should be contained in a (DIV or SPAN) tag
    //          should have attribute MainField='mainObj name (not id)'
    //mainObj selected index will be compared to the "Others" constant
    //return : the visibility case.
    
    var frm, mainObj;
	if (document.all) 
		frm=eval("document.all."+frmName);
	else
		frm=eval("document."+frmName);
	mainObj=eval('frm.' + mainName)	
	
    var Others= mainObj.options.length-1
    var Cont_visible=false;
    var altObj, altCont, altContName
    altObj=eval('frm.'+getAltFieldAttr(mainObj))
    altContName=getAltContainerAttr(mainObj)
        
    if (document.all)
        altCont=eval('document.all.'+altContName)
    else
        altCont=eval('frm.'+altContName)
    
    if(mainObj.selectedIndex==Others)
    {
        altCont.style.display='block';
        Cont_visible=true;
    } 	         
    else 
    {
        altCont.style.display='none';
        altObj.value='';
        Cont_visible=false;
    }
    return Cont_visible
}

///////**************************************************************************/////
function getAltFieldAttr(mainObj)
{
    //returns the 'AltField' attribute if existent.
    var retStr=' '
    if (document.all)
        
        retStr=mainObj.AltField
    else
        retStr=mainObj.attributes.AltField.value
    
    return retStr;
    
}

function getAltContainerAttr(mainObj)
{
    //returns the 'AltContainter' attribute if existent.
    var retStr=' '
    if (document.all)
        retStr=mainObj.AltContainer
    else
        retStr=mainObj.attributes.AltContainer.value
    
    return retStr;
    
}

function getMainFieldAttr(altObj)
{
    //returns the 'MainField' attribute (if existent) of an alternative field.
    var retStr=' '
    if (document.all)
        retStr=altObj.MainField
    else
        retStr=altObj.attributes.MainField.value
    
    return retStr;
}
