/**
 * Validation Class
 * @version 1.0
 */
//Declaring the class 
var Validator = Class.create();
var frm;
var existMsg='';

//defining the rest of the class implementation
Validator.prototype = {

	//initialize settings for validation
	initialize: function(settings)
	{ 
		//get all settings
		this.settings = 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 = '';
		}
		
		this.btnId.onclick = function()
		{
			opt = window.settings;
			var error = '';
			validationTypes = new Array("isRequired", "isEmail", "isNumeric","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="";
			if($(''+totMulField+''))
			var totmul = $(''+totMulField+'').value;
			
			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]);
						switch (validationTypes[n])
						{
							case "isRequired":
								if(eMailFields != ''){
									for(j=0;j<eMailFields.length;j++){
										
										if(eMailFields[j] == x[i]){
											if(inputField)
											valid =  isEmail(inputField.value);
										}else{
											if(inputField)
											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{
									if(inputField)
									valid = !isRequired(inputField.value);
								}
								break;
							case "isEmail" :
								if(inputField)
								valid =  isEmail(inputField.value);
								break;	
							case "isNumeric":
								if(inputField)
								valid = isNumeric(inputField.value);	
								break;
							case "isChecked":
								if(inputField)
								valid = isChecked(inputField.id);
								break;		
						}
						
						if(!valid)
						{
							if(inputField)
							fid+= inputField.id+",";
							if(inputField)
								validationmsg  = inputField.getAttribute('validationmsg');
							if(validationmsg != "")
							error += " * "+validationmsg +"\n";
							errorMsg = 1;
						}
						
					}
				}
				
			}
			
			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 != ''){
					return chkdate(dEventdate1,AddedDate1);
				}
			}
			
			if(opt['idEqual']){
				
				var firstval 	= 	opt['idEqual'][0];
				var secondval	=	opt['idEqual'][1];
				var reqmsg		=	opt['idEqual'][2];
				if($(firstval).value != $(secondval).value){
					alert(reqmsg);
					$(secondval).value="";
					$(firstval).select();
					return false;
				}	
			}
			if(opt['isSecurity']){
				var scode = $(opt['isSecurity'][0]).value;
				callcheckCode(scode);
				return false;
			}
			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];
				existMsg 		= 	opt['isDuplicate'][4];
				extid = "";
				chkDuplicatefront(fieldval,compId,tablename,primeid,extid)
				return false;
			}
			if(opt['isDuplicate_new']){
			 
				var fieldval 	= 	$(opt['isDuplicate_new'][0]).value;
				var compId		=	opt['isDuplicate_new'][1];
				var tablename 	=	opt['isDuplicate_new'][2];
				var primeid		=	opt['isDuplicate_new'][3];
				existMsg 		= 	opt['isDuplicate_new'][4];
				extid = opt['isDuplicate_new'][5];				
        //alert(extid);		
				chkDuplicatefront(fieldval,compId,tablename,primeid,extid)
				return false;
			} 
			
			//document.frmtrans.submit();
			$(frm).submit();
		}
	}
};

// returns true if the string is not empty
function isRequired(str){
	var nstr = trim(str);
	return (nstr == null) || (nstr.length == 0);
}

// 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;
}
function trim(s)
{
 	return s.replace(/^\s+|\s+$/g, ''); 
};

function chkdate(dEventdate1,AddedDate1)
{
	var startdate = new Date(AddedDate1).getDate();
	var enddate = new Date(dEventdate1).getDate();
	var todaydate = new Date().getDate();	
	if(enddate < startdate)
	{
		alert(LBL_END_DATE_VALID);
		return false;
	}
	else
	{
		//return true;
		$(frm).submit();
	}
}

// check for any Checkbox is selected or not
function isChecked(Id){
	var flag_chadd_eq=0;
  	for(var k=0;k<$(frm).elements.length;k++)
  	{
    	if($(frm).elements[k].id==Id)
        {
        	if($(frm).elements[k].checked==true)
          	{
            	flag_chadd_eq=1;
			}        
		}      
	}
	if(flag_chadd_eq=='0'){	return false;}else{	return true;}
}
function chkDuplicatefront(val,compid,table,primeid,extid){
	var view = $('view').value;
	//alert(val);
	if($(primeid))
		var primeval = $(primeid).value;
	var pars="";
	var url = SITE_URL+"index.php?file=mem-chkDuplicate";
	pars+= '&mode='+view+'&val='+val+'&compid='+compid+'&table='+table;
	if(primeval){
		pars+= '&primeid='+primeid+'&primeval='+primeval;
	}
	if(extid){
     var extval = $(extid).value;
  	pars+= '&extid='+extid+'&extval='+extval;
  }
	/*if(ext !=''){
		pars+= '&ext='+ext;
	}*/
	//alert(url+pars);
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: getResult
			});
}

function getResult(originalRequest){
	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;	
		if(exist == 1){
		  if(existMsg == '' || existMsg == undefined){
        existMsg = LBL_REC_EXISTS;
      }
			alert(existMsg);
			$(field).focus();
			return false;
		}else{
			$(frm).submit();
		}
	}	
}

function callcheckCode(val)
{
	var url = SITE_URL+"index.php?file=mem-ajax_checkCode";
	var pars = '&code='+val;
	var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onSuccess: handleSecurityCodeData
			});
	
}

function handleSecurityCodeData(originalRequest)
{
	var xmlDocument = originalRequest.responseXML;
	var succ = xmlDocument.getElementsByTagName('succ').item(0).firstChild.data;
	if(succ == 0){
		alert(LBL_VALID_SECURITYCODE);
		document.getElementById("security_code").value="";
		document.getElementById("security_code").focus();
		return false;
	}else{
		if(opt['isDuplicate']){
				var fieldval 	= 	$(opt['isDuplicate'][0]).value;
				var compId		=	opt['isDuplicate'][1];
				var tablename 	=	opt['isDuplicate'][2];
				var primeid		=	opt['isDuplicate'][3];
				var extid = "";
				existMsg 		= 	opt['isDuplicate'][4];
				chkDuplicatefront(fieldval,compId,tablename,primeid,extid)
				return false;
		}
	}
}
