 /*
 *
 * Validation Class
 * @version 1.0
 */
//Declaring the class 
var Validator = Class.create();
var frm;
var duplicate='0';
//defining the rest of the class implementation
Validator.prototype = {

	//initialize settings for validation
	initialize: function(settings)
	{ 
		//get all settings
		this.settings = settings;
		///alert(this.settings);
		window.settings = this.settings;
		//get form Id
		this.btnId = $(this.settings["btnId"]);
		frm = this.settings["formId"];
		
		if(this.settings["validEmail"]){
			this.validEmail = this.settings["validEmail"];
			var eMailFields = this.validEmail;
		}else{
			var eMailFields = '';
		}
		
		if(this.settings["isMultiple"]){
			this.isMultiple = this.settings["isMultiple"];
			var multipleFields = this.isMultiple;
		}else{
			var multipleFields = '';
		}
		
		if(this.settings["totMulfield"]){
			this.totMulfield = this.settings["totMulfield"];
			var totMulField = this.totMulfield;
		}else{
			var totMulfield = '';
		}
		
		if(this.settings["isMinlen"]){
			this.isMinlen = this.settings["isMinlen"];
			var isMinlen = this.isMinlen;
		}else{
			var isMinlen = '';
		}
		
		if(this.settings["isEqualsNew"]){
			this.isEqualsNew = this.settings["isEqualsNew"];
			var isEqualsNew = this.isEqualsNew;
		}else{
			var isEqualsNew = '';
		}
		
		if(this.settings["isSupportfile"]){
			this.isSupportfile = this.settings["isSupportfile"];
			var isSupportfile = this.isSupportfile;
		}else{
			var isSupportfile = '';
		}
		if(this.settings["isSupportMultiplefile"]){
			this.isSupportMultiplefile = this.settings["isSupportMultiplefile"];
			var isSupportMultiplefile = this.isSupportMultiplefile;
		}else{
			var isSupportMultiplefile = '';
		}
		if(this.settings["isPhoneNo"]){
			this.isPhoneNo = this.settings["isPhoneNo"];
			var isPhoneNo = this.isPhoneNo;
		}else{
			var isPhoneNo = '';
		}
		
		
		
		/*if(opt["isMinlen"]){
				if(opt["minlen"]){
					var minlength = opt["minlen"][0];
					var minmsg = opt["minlen"][1];
				}
				var optlen = opt["isMinlen"];
				for(k=0;k<optlen.length;k++){
					var lengthinput = opt["isMinlen"][k];
					if($(lengthinput)){
						strchk = $(lengthinput).value;
						if(strchk < minlength){
							alert(minmsg);
							return false;
						}
					}
				}
			}
		*/
		this.btnId.onclick = function()
		{
      opt = window.settings;
			var error = '';
			validationTypes = new Array("isRequired", "isEmail", "isNumeric","isFile","isChecked");
			var error = " Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";
			var errorMsg = 0;
			var fid="";
			var n = 0;	
			
			if(opt['isMultiple'])
			{
				while(n<(opt['isMultiple']).length)
				{
					var str ='';
					arr = opt['isMultiple'][n];
					if($(''+totMulField+''))
						var totmul = $(''+totMulField+'').value;
					for(var i=1;i<=parseInt(totloop);i++)
					{	
						str = arr+i;

						if($(str))
						{
							if(trim($(str).value)=='' || trim($(str).value)==null)
							{	
								alert("Enter the item value");
								$(str).focus();
								return false;	
							}
						}
					}
				n++;
				}
			}
			
			
			if(opt['isChkPassLen'])
			{
				var vPassword 	= 	$(opt['isChkPassLen'][0]).value;
				if(vPassword != ''){
					ChkPassLen(vPassword);
					return false;
				}
				
			}
			
			for(n=0; n<validationTypes.length; n++)
			{
				var x = opt[validationTypes[n]];
				if(x != null)
				{
					for(i=0; i<x.length; i++) 
					{
						inputField = $(x[i]);
						//alert(x[i]);
						switch (validationTypes[n])
						{
							case "isRequired":
								if(eMailFields != ''){
									for(j=0;j<eMailFields.length;j++)
									{
										if(eMailFields[j] == x[i])
										{
											if(inputField.value != '')
											{
												xs =  isEmail(inputField.value);
												if(xs == false){
													fid+= inputField.id+",";
													validationmsg1 = inputField.getAttribute('validationmsg');
													validationmsg = "";
													error += " * "+validationmsg1 +"\n";
																										
													errorMsg = 1;
												}
											}else{
													valid = !isRequired(inputField.value);
											}	
										}else{
												valid = !isRequired(inputField.value);
										}
									}
								}
								if(multipleFields != ''){
									for(a=0;a<multipleFields.length;a++){
										var msgstar ="";
										var msgstar1 = "";
										var validationmsga = "";
										if(multipleFields[a] == x[i])
										{
											for(k=1;k<=totmul;k++)
											{
												var mulfieldId = x[i]+k;
												var mulfieldobj = $(''+mulfieldId+'');
												if(mulfieldobj)
												{
													valid = !isRequired(mulfieldobj.value);
													if(!valid)
													{
														fid+= mulfieldobj.id+",";
														validationmsg1 = mulfieldobj.getAttribute('validationmsg');
														validationmsg = "";
														error += " * "+validationmsg1 +"\n";
														errorMsg = 1;
													}
												}
											}
										}
										else
										{
											valid = !isRequired(inputField.value);
										}
									}
								}
								if(isEqualsNew != ''){
									for(nw=0;nw<isEqualsNew.length;nw++){
										var compflds = isEqualsNew[nw];
										var cmpfd = compflds.split(",");
										if(x[i] == cmpfd[1]){
											if($(cmpfd[1]).value != ''){
												if($(cmpfd[0]).value != $(cmpfd[1]).value){
													fid+= $(cmpfd[1]).id+",";
													error += " * "+cmpfd[2]+"\n";
													errorMsg = 1;													
													//alert(error);
												}
											}
										}
									}
								}
				  if(isPhoneNo != ''){
				  var phcompid = isPhoneNo[0];
					// alert(phcompid);
                  var phflds = isPhoneNo[1];
				  //alert(phflds);
                  var phmsg = isPhoneNo[2];
				  var phlnmsg = isPhoneNo[3];
                  var fidsel = '';
                  if(x[i] == phcompid){
                  	if($(phflds+'1').value == '' || $(phflds+'2').value == '' || $(phflds+'3').value == ''){
						if($(phflds+'1').value == ''){
						    if(fidsel == ''){
							fid+= $(phflds+'1').id+",";
							fidsel = '1';
                        }
                        $(phflds+'1').style.background = "#FFFF99";
  						$(phflds+'1').style.border = "1px solid #000000";  
                      }
                      if($(phflds+'2').value == ''){
                        if(fidsel == ''){
                          fid+= $(phflds+'2').id+",";
                          fidsel = '1';
                        }
                        $(phflds+'2').style.background = "#FFFF99";
  								      $(phflds+'2').style.border = "1px solid #000000";
                      }
                      if($(phflds+'3').value == ''){
                        if(fidsel == ''){
                          fid+= $(phflds+'3').id+",";
                          fidsel = '1';
                        }
                        $(phflds+'3').style.background = "#FFFF99";
  								      $(phflds+'3').style.border = "1px solid #000000";
                        
                      }						  
					  //alert($(phflds+'1').value.length);					  
                      error += " * "+phmsg+"\n";
					  errorMsg = 1;					  
                    }				
                  }
                }
				
								if(isMinlen != ''){
									var isMulInput = isMinlen[0].split(',');
									var isMulLen = isMinlen[1].split(',');
									var isMulMsg = isMinlen[2].split(',');
									for(b=0;b<isMulInput.length;b++){
										var msgstar ="";
										var msgstar1 = "";
										var validationmsga = "";
										if(isMulInput[b] == x[i]){
											var mulfieldId = isMulInput[b];
											var mulfieldobj = $(''+isMulInput[b]+'');
											if(mulfieldobj){
												if(mulfieldobj.value != ''){
													valid = isMinLen(mulfieldobj.value,isMulLen[b]);
													//alert(valid);
													if(valid == 0){
														fid+= mulfieldobj.id+",";
														validationmsg1 = isMulMsg[b];
														validationmsg = "";
														error+= " * "+validationmsg1 +"\n";																												
														//alert(error);
														errorMsg = 1;
													}
												}else{
													if(inputField)
														valid = !isRequired(inputField.value);
												}	
											}
										}else{
											if(inputField)
											  valid = !isRequired(inputField.value);
										}	
									}
								}
								if(isSupportfile != '')
								{										
									var inputtype 	= isSupportfile[0];									
									var extensions 	= isSupportfile[1].split(',');						 
									var superrormsg = isSupportfile[2];
																		
									if(x[i] == inputtype){				 
										if($(inputtype).value != ''){
											//alert("ok");
											//return false;
											var ss = chkExtesion(extensions,$(inputtype).value);											
											if(ss == extensions.length){
												fid+= $(inputtype).id+",";
												error+= " * "+superrormsg+"\n";
												errorMsg = 1;
											}else{
												if(inputField)
													valid = !isRequired(inputField.value);
											}
										}else{
												if(inputField)
													valid = !isRequired(inputField.value);
											}
									}else{
										if(inputField)
											valid = !isRequired(inputField.value);
									}
								}
								else
								{
									if(inputField)
										valid = !isRequired(inputField.value);
								}
								
								if(isSupportMultiplefile != '')
								{									
									for(j=0;j<isSupportMultiplefile.length;j++){
										
									var inputtype 	= isSupportMultiplefile[j][0];									
									var extensions 	= isSupportMultiplefile[j][1].split(',');
									var superrormsg = isSupportMultiplefile[j][2];
									//alert(x[i]);
									//alert(inputtype);
									//alert(extensions);
									//alert(superrormsg);
									//alert(x[i]);
									//return false;
									if(x[i] == inputtype){				 
										if($(inputtype).value != ''){
											//alert("ok");
											//return false;
											
											var ss = chkExtesion(extensions,$(inputtype).value);											
											if(ss == extensions.length){
												fid+= $(inputtype).id+",";
												error+= " * "+superrormsg+"\n";
												errorMsg = 1;
											}else{
												if(inputField)
													valid = !isRequired(inputField.value);
											}
										}else{
												if(inputField)
													valid = !isRequired(inputField.value);
											}
									}else{
										if(inputField)
											valid = !isRequired(inputField.value);
									}
									}									
								}
								else
								{
									if(inputField)
										valid = !isRequired(inputField.value);
								}
								//return false;
								//if(inputField)
								//		valid = !isRequired(inputField.value);
								break;
							case "isEmail" :
								valid =  isEmail(inputField.value);
								break;
							case "isNumeric":
								valid = isNumeric(inputField.value);	
								break;
							case "isFile":
								valid = isFile(inputField.value);
								break;
							case "isChecked":
								valid = isChecked(inputField.id);
								//alert(valid);
								break;	
						}
						
						if(!valid)
						{	
							//alert(valid);
							if(inputField.id != 'vPhone1'){
                fid+= inputField.id+",";
  							validationmsg  = inputField.getAttribute('validationmsg');														
  							//alert();
  							if(trim(inputField.value) == '' || inputField.type == 'checkbox'){							
  								inputField.style.background = "#FFFF99";
  								inputField.style.border = "1px solid #000000";
  								error += " * "+validationmsg +"\n";
  							}else{
  								error = error;
  							}
              }
							errorMsg = 1;
						}
					}
				}
			}
			//Chk Equality of fields value
			/*if(opt["isEqualsNew"]){
				var isEqualsNew = opt["isEqualsNew"];
				for(nw=0;nw<isEqualsNew.length;nw++){
					var compflds = isEqualsNew[nw];
					var cmpfd = compflds.split(",");
					if($(cmpfd[0]).value != $(cmpfd[1]).value){
						errorMsg == 1
						error += " * "+cmpfd[2]+"\n";
						
					}
				}
			}*/
			//alert(isEqualsNew[0]);
			
			
			if(errorMsg == 1)
			{	
				alert(error);
				var firstId = fid.split(",");
				$(firstId[0]).focus();
				return false;
			}
			if(opt['isDatecheck'])
			{
				var dEventdate1 	= 	$(opt['isDatecheck'][0]).value;
				var AddedDate1		=	$(opt['isDatecheck'][1]).value;
				if(dEventdate1 != '' && AddedDate1 != ''){
					chkdate(dEventdate1,AddedDate1);
					return false;
				}
			}
			
			if(opt['isEquals']){
				var eq1 	= 	$(opt['isEquals'][0]).value;
				var eq2		=	$(opt['isEquals'][1]).value;
				var eqmsg 	= 	opt['isEquals'][2];
				if(eq1 != eq2){
					alert(error +"* "+eqmsg);
					$(opt['isEquals'][1]).focus();
					return false;
				}
				
			}
			//return false;
			//return false;
			if(opt['isChkEmail'])
			{
				var vEmail 	= 	$(opt['isChkEmail'][0]).value;
				var vConEmail		=	$(opt['isChkEmail'][1]).value;
				if(vEmail != '' && vConEmail != ''){
					ChkEmail(vEmail,vConEmail);
					return false;
				}
				
			}
			if(opt['isChkPassword'])
			{
				var vPassword 	= 	$(opt['isChkPassword'][0]).value;
				var vConPassword		=	$(opt['isChkPassword'][1]).value;
				if(vPassword != '' && vConPassword != ''){
					ChkPassword(vPassword,vConPassword);
					return false;
				}
				
			}
			
			if(opt['isDuplicateMul'])
			{
				if(opt['isDuplicateMul'] != ''){
					var fieldval 		= 	$(opt['isDuplicateMul'][0]).value;
					var compId			=	opt['isDuplicateMul'][1];
					var primeid			=	opt['isDuplicateMul'][2];
					var tablename 		=	opt['isDuplicateMul'][3];
					var tableprimeid 	=	opt['isDuplicateMul'][4];
					chkDuplicate(fieldval,compId,primeid,tablename,tableprimeid,'');
					return false;
				}
			}
		/* 
    Not necessery	
    if(opt['isFLV'])
			{				
				if(opt['isFLV'] != ''){
					var fieldval 	= 	trim($(opt['isFLV'][0]).value);
					var msg = opt['isFLV'][1];
					//alert(msg);
					if(fieldval != ''){
					 var ret = chkFLV(fieldval,msg);
					}
					if(ret == false){
						return false;	
					}	
					//chkDuplicate(fieldval,compId,primeid,tablename,primeid,'');
					//return false;
				}
			}*/
			
			if(opt['isDuplicate'])
			{				

				if(opt['isDuplicate'] != ''){
					var fieldval 	= 	trim($(opt['isDuplicate'][0]).value);						
					var compId		=	opt['isDuplicate'][1];
					var tablename 	=	opt['isDuplicate'][2];
					var primeid		=	opt['isDuplicate'][3];					
					chkDuplicate(fieldval,compId,primeid,tablename,'','');
					return false;
				}
			}
			
		
			if(opt['isValidFax'])
			{			 
				
				if(opt['isValidFax'] != ''){
					if(opt['isValidFax'][0])
					{						
						arr = opt['isValidFax'][0].split(',');
						field = opt['isValidFax'][1].split(',');						
						msg = opt['isValidFax'][2].split(',');
						//alert(arr);						
						for(i=0;i<arr.length;i++)
						{
							//alert(field[i]);	
							var valid = chkValidFax(arr[i],field[i],msg[i]);
							//return false;
							if(valid == false)
							{	
								return false;
							}	
						}								
					}						
				}
			}
			
      if(opt['isDuplicateMultiple'])
			{				
				//alert(opt['isDuplicateMultiple'].length);
				if(opt['isDuplicateMultiple'] != ''){
					if(opt['isDuplicateMultiple'][0])
					{
						//var str ='';
						arr = opt['isDuplicateMultiple'][0].split(',');
						//alert(arr);						
						var pars ='';
						for(i=0;i<arr.length;i++)
						{
							//pars+= '&'+arr[i]+'='+$(arr[i]).value;
							if(i ==  (arr.length-1)){
								pars+= $(arr[i]).value;
							}else{
								pars+= $(arr[i]).value+',';
							}							
							
						}											
					}
				  //chkMulDuplicate(pars,opt['isDuplicateMultiple'][2],opt['isDuplicateMultiple'][3])	
					chkDuplicate(pars,opt['isDuplicateMultiple'][1],'',opt['isDuplicateMultiple'][2],opt['isDuplicateMultiple'][3],'');
					return false;
					//alert(field[0]);
				}
			}
			
			if(frm != '')
				$(frm).submit();
		}	
	}
};

// returns true if the string is not empty
function isRequired(str){
	var nstr = trim(str);
	//alert(nstr);
	return (nstr == null) || (nstr.length == 0);
}
function isMinLen(str,minlen){
	if(str.length < minlen)
		return 0;
	else
		return 1;
}

function chkExtesion(extensions,fileval){
	var ssl = "0";
	//alert(fileval);
	for(e=0;e<extensions.length;e++)
    {

		if((fileval.lastIndexOf(""+extensions[e]+"")) == -1)
        {
			ssl++;
		}
	}
	
	return ssl;
}
function isFile(str){
	var len = str.substr(str.length - 3 ,3);
	var strn = '';
	strn = len.toLowerCase();
	if(strn != "pdf" && strn != "")
	{
		return (strn == null);
	}
	else
	{
		if(strn == '')
		strn = 'str';
		return strn;
	}
}

// returns true if the string is a valid email
function isEmail(str){
	var nstr = trim(str);
	if(isRequired(nstr)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(nstr);
}

// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str){
	var nstr = trim(str);
	if(isRequired(nstr)) return false;
	var re = /[\D]/g
	if (re.test(nstr)) return false;
	return true;
}

// compare length of password.
function CheckLength(val,vPassword)
{	
	var length = val.length;
	if(length < 6)
	{
		alert("Password should be six character");
		$('vPassword').focus();
		return false;
	}
	else
	{
		return true;
	}
	
}

// compare email and  Confirm email.
function ChkEmail(email,confemail)
{	
	if(email != confemail)
	{
		alert("Email and Conform Email should be same");
		$('vConEmail').value = "";
		$('vEmail').focus();
		return false;
	}
	else
	{
		$('frm')!= ''
		$('frm').submit();
	}
	
}

function chkValidFax(id,field,msg)
{		

if($(field+'1').value != '' || $(field+'2').value != '' || $(field+'3').value != ''){	
	if($(field+'1').value != '' && ($(field+'2').value == '' || $(field+'3').value == '')){					
		if($(field+'2').value == ''){
			$(field+'2').focus();
		}else{	
			$(field+'3').focus();
		}	
			alert(msg);
			return false;
	}else if($(field+'2').value != '' && ($(field+'1').value == '' || $(field+'3').value == '')){
		if($(field+'1').value == ''){
			$(field+'1').focus();
		}else{	
			$(field+'3').focus();
		}	
			alert(msg);
			return false;				
	}else if($(field+'3').value != '' && ($(field+'1').value == '' || $(field+'2').value == '')){			
		if($(field+'1').value == ''){
			$(field+'1').focus();
		}else{	
			$(field+'2').focus();
		}	
			alert(msg);
			return false;
	}else if($(field+'1').value.length < 3 || $(field+'2').value.length < 3 || $(field+'3').value.length < 3){
		if($(field+'1').value.length < 3){
			$(field+'1').focus();
		}else if($(field+'2').value.length < 3){
			$(field+'2').focus();
		}else if($(field+'3').value.length < 3){
			$(field+'3').focus();
		}	
		alert(msg);
		return false;				
	}
}				
}	
// compare Password and  Confirm Password.
function ChkPassword(password1,Password2)
{	
	if(password1 != Password2)
	{
		alert("Password and  Confirm Password should be same");
		$('vConPassword').value = "";
		$('vPassword').focus();
		return false;
	}
	else
	{
		if(frm != '')
		$(frm).submit();
	}
	
}

// check for any Checkbox is selected or not
function isChecked(Id){
	//alert(Id);
	var flag_chadd_eq=0;
  	for(var k=0;k<document.frmadd.elements.length;k++)
  	{
    	if(document.frmadd.elements[k].id==Id)
        {
        	if(document.frmadd.elements[k].checked==true)
          	{
            	flag_chadd_eq=1;
			}        
		}      
	}
	if(flag_chadd_eq=='0'){	return false;}else{	return true;}
}
function chkdate(dEventdate,AddedDate)
{
//alert(dEventdate);
//alert(AddedDate);
	if(dEventdate < AddedDate)
	{//alert("ok1");
		alert("Expire Date must be Greater than Start date.");
		return false;
	}
	else
	{
		$(frm).submit();
	}
	
}
function chkFLV(filestr,msg)
{
	extArr = filestr.split(".");
	if(extArr[0].toLower != 'flv'){
		alert(msg);
		return false;
	}	
}	
function removeHTMLTags(str){
	strInputCode = str.replace(/&(lt|gt);/g, function (strMatch, p1){
	 	return (p1 == "lt")? "<" : ">";
	});
	var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
	var repStr = strTagStrippedText.replace(/^[\s(&nbsp;)]+/g,'').replace(/[\s(&nbsp;)]+$/g,'');
	return repStr;
}
function trim(s)
{
 	return s.replace(/^\s+|\s+$/g, ''); 
}
function chkDuplicate(val,compid,primeid,table,tableprimid,strpars)
{

	var view = $('view').value;	
	val = val.replace("?","hhdd");
	var pars="";
	var url = SITE_URL+"index.php?file=mem-chkDuplicate";
	//alert(tableprimid);
	//alert($(tableprimid).value);
	if(strpars != '')
	{
	   if($(tableprimid))
		var primeval = $(tableprimid).value;
		pars += strpars;	
		pars+= '&mode='+view+'&val='+val+'&compid='+compid+'&table='+table;
		pars+= '&primeval='+primeval;
		//alert(url+pars);
	}else{
	 if($(primeid))
		var primeval = $(primeid).value;
		pars+= '&mode='+view+'&val='+val+'&compid='+compid+'&table='+table+'&tableprimid='+tableprimid;
		if(primeval){
			pars+= '&primeid='+primeid+'&primeval='+primeval;
		}		
	}
  	 //alert(url+pars);
	/*return false; */
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: getDupl
			});
}

function getDupl(originalRequest){
	//alert(originalRequest.responseText);	
  if(originalRequest.responseText.indexOf('invalid') == -1){
		var xmlDocument = originalRequest.responseXML; 
		var exist	=	xmlDocument.getElementsByTagName('exist').item(0).firstChild.data;		
		var field	=	xmlDocument.getElementsByTagName('field').item(0).firstChild.data;	
		//alert(exist);
		if(exist > 0){
				alert( "Record already exists.");
			$(field).focus();
			return false;
		}else
		{
			$(frm).submit();	
		}
	}	
}

