/* MAGIC FORMS JS VALIDATION */
var prefix_msg = 'mf_msg_';
var prefix_disp = 'mf_disp_';

/* REG EX COMMONLY USED IN MAGIC FORMS */
var regex_array = Array();
regex_array[0] = 
regex_array[1] = /^[a-zA-Z]+$/im; 
regex_array[2] = /^\w$/im; 
regex_array[3] = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;

function msg_range(min,max) {
	msg = local[18] + ' ' + min + ' ' + local[19] + ' ' + max + ' ' + local[20] + ' ';
	return msg;
}

function msg_min(min) {
	msg = local[21] + ' ' + min + ' ' + local[22] + ' ';
	return msg;
}

function msg_max(max) {
	msg = local[23] + ' ' + max + ' ' + local[24] + ' ';
	return msg;
}

function msg_exact(charlen) {
	msg = local[25] + ' ' + charlen + ' ' + local[22] + ' ';
	return msg;
}

function validate_final(f) {
	// run or rerun all field checks to ensure that they have been run at least once
	count = 0;
	final_func = Array();
	
	for(i = 0; i < f.elements.length; i++) {
		fe = f.elements[i];
		if(fe.onchange && fe.onchange != 'undefined') {
			oldfunc = fe.onchange.toString();
			func = oldfunc.substring(oldfunc.indexOf("{") + 1, oldfunc.lastIndexOf(";") + 1);
			func = func.replace(/this/gi,'document.' + f.id + '.' + fe.name);
			func = func.replace(/    /g, '');
			if(func.lastIndexOf(";")>func.indexOf(";")) {
				mf = func.split(";");
				for(y=0;y<mf.length; y++)
					if(mf[y].length > 0)
						final_func[count++] = mf[y] + ";";
			} else {
				final_func[count++] = func;
			}
		}
	}
	
	for(y = 0; y < final_func.length; y++) {
		//alert(final_func[y]);
		eval(final_func[y]);
	}
	
	// check for any errors
	for(i = 0; i < f.elements.length; i++) {
		fe = f.elements[i];
		if(fe.onchange && fe.onchange != 'undefined') {
			var fep = document.getElementById('mf_disp_' + fe.name);
			//alert('mf_disp_' + fe.name);
			var class_index = fep.className.indexOf('mf_error');
			//alert(class_index);
			
			if(class_index != -1) {
				return false;
			}
		}
	}
}

function set_msg(div,msg,type) {
	if(document.getElementById) {
		msg_div = prefix_msg+div;
		disp_div = prefix_disp+div;
		obj = document.getElementById(msg_div);
		obj2 = document.getElementById(disp_div);
		if(obj) {
			obj.innerHTML = msg;
		}
		if(obj2) {
			newclass = (type==1) ? 'mf_success' : 'mf_error';
			if(obj2.className.indexOf("mf_error")!=-1) {
				obj2.className = obj2.className.replace("mf_error",newclass);
			} else if (obj2.className.indexOf("mf_success")!=-1) {
				obj2.className = obj2.className.replace("mf_success",newclass);
			} else {
				obj2.className = obj2.className + ' ' + newclass;
			}
			
		}
	}
	return (type==1) ? true : false;
}

/* THESE ARE THE FUNCTIONS CALLED FROM THE FUNCTIONS BELOW */

function run_rangechars(f,min,max) {
	if(f.value) {
		if(f.value.length>max) 
			return false;
		if(f.value.length<min) 
			return false;
	} else if (min>0) {
		return false;
	}
	return true;
}

function run_required(f) {
	if ((f.type == 'text' || f.type=='textarea' || f.type=='password') && f.value=='')
		return false;
	
	if (f.type == 'select-one' && f.options[f.selectedIndex].value=='')
		return false;
	
	if (f.type == 'checkbox' && f.checked==false)	
		return false;
	
	return true;
}

function run_unique(f,v,db,table,col) {
	var ajax = new sack();
	
	ajax.setVar('db', db);
	ajax.setVar('table', table);
	ajax.setVar('col', col);
	ajax.setVar('value', f.value);
	ajax.setVar('action', 'check_unique');
	ajax.requestFile = '/listener.html';
	ajax.onLoading = run_unique_loading;
	ajax.onLoaded = run_unique_loading; 
	ajax.onInteractive = run_unique_loading;
	ajax.onCompletion = run_unique_checkcomplete;
	ajax.runAJAX();
	
	function run_unique_checkcomplete() {
		if(ajax.responseStatus) {
			var db_string = ajax.response.toString();
			var orig = v.toString();
			
			if(db_string == orig) {
				set_msg(f.id,local[9999],1);
			} else if(db_string == 'no match') {
				set_msg(f.id,local[9999],1);
			} else {
				set_msg(f.id, local[15], 0);
			}
		} else {
			set_msg(f.id, local[15], 0);
		}
		
		db_string = '';
		ajax.response = '';
	}
		
	function run_unique_loading() {
		f.nextSibling.innerHTML = '<img src="/isol/assets/images/ajax-loader.gif" />';
	}
}

function run_checkqty(f,min,max) {
	if(max==0)
		max=100000;
    
 	var count = 0;
  	for (var j=0; j<f.length; j++)
    	if (f[j].checked) 
    		count++;

  	if (count>=min && count<=max) 
  		return true;
 	
	return false;
}

function run_maxchars(f,max) {
	if(f.value) 
		if(f.value.length>max) 
			return false;
	
	return true;
}

function run_minchars(f,min) {
	if(f.value) {
		if(f.value.length<min) 
			return false;
	} else if (min>0) {
		return false;
	}
	return true;
}

function run_exact(f,charlen) {
	if(f.value)
		if(f.value.length==charlen) 
			return true;
			
	return false;
}

function run_contains(f,s) {
	var string = f.value.toLowerCase();
	
	if(!f.value)
 		return true;
	
	if (string.indexOf(s.toLowerCase())!=-1) {
		return true;
	} else {
		return true;
	}
}

function run_file_type(f,e) {
	var string = f.value.toLowerCase();
	var check = string.substring(string.length-e.length,string.length);
	
	if(!f.value)
 		return true;
	
	if(check.toLowerCase()==e.toLowerCase()) {
		return true;
	} else {
		return false;
	}
}

function run_no_space(f) {
	var goodChars = /^(.*\s.*|.*\s|\s.*|\s)$/im; 
 	
 	if(!f.value)
 		return true;
 	
  	if (goodChars.test(f.value)) {
      return false;
   } else {
      return true;
   } 
}

function run_alpha(f) {
	var goodChars = /^[a-zA-Z ]+$/im;
 	
 	if(!f.value)
 		return true;
 		
  	if (goodChars.test(f.value)) {
      return true;
   } else {
      return false;
   } 
}

function run_alpha_numeric(f) {
   var goodChars = /^[\w ]+$/im;
 	
 	if(!f.value)
 		return true;

  	if(goodChars.test(f.value)) {
      return true;
   } else {
      return false;
   } 
}

function run_numeric(f) {
	var objRegExp = /^([0-9,\-\.\/]*)$/;
  	//var objRegExp = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
  	
	if (objRegExp.test(f.value)) {
      return true;
   } else {
      return false;
   } 
}

function run_integer(f) {
  	var objRegExp  =  /^([0-9]*)$/;
  	
	if (objRegExp.test(f.value)) {
      return true;
   } else {
      return false;
   } 
}

function run_regex(f,r) {
	var objRegExp = new RegExp(r);
	
	if (objRegExp.test(f.value)) {
      return true;
   } else {
      return false;
   }
}

function run_personalemail(f) {
	var objRegExp = /@(gmail\.com|hotmail\.com|yahoo\.com|msn\.com|sfdcglobal\.net|earthlink\.net|aol\.com|comcast\.net|sbcglobal\.net|yahoo\.co\.uk|hotmail\.co\.uk|yahoo\.co\.in|bellsouth\.net|cox\.net|earthlink\.net|verizon\.net|rediffmail\.com|yahoo\.ca|charter\.net|btinternet\.com|ntlworld\.com|yahoo\.fr)/gi
	
	if (objRegExp.test(f.value)) {
      return true;
   } else {
      return false;
   }
}

function run_competitoremail(f) {
	var objRegExp = /(webtrends|coremetrics|googleanalytics|clicktracks|fireclick)\.com/gi
	
	if (objRegExp.test(f.value)) {
      return true;
   } else {
      return false;
   }
}

function run_validemail(f) {
	var objRegExp = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
	
	if (objRegExp.test(f.value)) {
      return false;
   } else {
      return true;
   }
}


/* THESE ARE THE FUNCTIONS CALLED FROM THE FORM */

function validate_alpha_numeric_nospace_range_unique(f,min,max,v,db,table,col,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_no_space(f)) {
			finMsg+=local[12];
		}
		
		if(!run_alpha_numeric(f)) {
			finMsg+=local[6];
		}
		
		if(!run_rangechars(f,min,max)) {
			finMsg+=msg_range(min,max);
		}
		
		if(finMsg.length==0) {
			run_unique(f,v,db,table,col);
		}
		
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_alpha_no_space_range_unique(f,min,max,v,db,table,col,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_no_space(f))						finMsg+=local[12];
		if(!run_alpha(f))							finMsg+=local[9];
		if(!run_rangechars(f,min,max)) 		finMsg+=msg_range(min,max);
		
		if(finMsg.length==0) {
			run_unique(f,v,db,table,col);
		}
		
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_alpha_no_space_range(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,min,max)) 	finMsg+=msg_range(min,max);
		if(!run_no_space(f))					finMsg+=local[12];
		if(!run_alpha(f))						finMsg+=local[9];
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_numeric_no_space_range(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,min,max)) 	finMsg+=msg_range(min,max);
		if(!run_no_space(f))					finMsg+=local[12];
		if(!run_numeric(f))					finMsg+=local[7];
	
		if(finMsg.length==0) {
				return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_alpha_rangechars(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,min,max)) 	finMsg+=msg_range(min,max);
		if(!run_alpha(f))						finMsg+=local[9];
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_numeric_rangechars(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,min,max)) 		finMsg+=msg_range(min,max);
	
		if(f.value.length > 0) {
			if(!run_numeric(f))						finMsg+=local[7];
		}
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_url(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,12,200)) 		finMsg+=msg_range(12,200);
		if(!run_regex(f,'^http:\/\/'))		finMsg+=local[16];
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_minchars_no_space(f,min,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_minchars(f,min))	 			finMsg+=msg_min(min);
		if(!run_no_space(f))						finMsg+=local[12];
		
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_required(f,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_required(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[0],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_unique(f,db,table,col,required) {
	if(required == 1 || f.value.length > 0) {
		run_unique(f,db,table,col)
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_checkqty(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_checkqty(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[14],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_checkqty_msg(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		if(max==0)
			max=100000;
		 
		var count = 0;
		for (var j=0; j<f.length; j++)
			if (f[j].checked) 
				count++;
	
		if (count>=min && count<=max) 
			return set_msg(f.id,local[9999],1);
		
		var suffix='';
		var errorMsg;
	
		if (count>1) 
			suffix='es';
	
		if (count<min) 
			errorMsg = 'Only ' + count + ' box' + suffix + ' checked: ' + min + ' required.';
		if (count>max) 
			errorMsg = '' + count + ' boxes checked: maximum ' + max + ' allowed.';
		if (count==0) 
			errorMsg = 'No boxes checked: ' + min + ' required.';
		return set_msg(f.id,errorMsg,0);
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_rangechars(f,min,max,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_rangechars(f,min,max)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,msg_range(min,max),0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_rangechars_unique(f,min,max,v,db,table,col,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_rangechars(f,min,max)) {
			finMsg+=msg_range(min,max);
		} else {
			run_unique(f,v,db,table,col);
		}
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_maxchars(f,max,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_maxchars(f,max)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,msg_max(max),0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_minchars(f,min,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_minchars(f,min)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,msg_min(min),0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_contains(f,s,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_contains(f,s)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[10],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_file_type(f,e,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_file_type(f,e)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[11],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_no_space(f,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_no_space(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[12],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_alpha(f,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_alpha(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[9],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_alpha_numeric(f,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_alpha_numeric(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[6],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_numeric(f,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_numeric(f)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[7],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_numeric_exactchars_no_space(f,charlen,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_numeric(f))					finMsg+=local[7];
		if(!run_exact(f,charlen))			finMsg+=msg_exact(charlen);
		if(!run_no_space(f))					finMsg+=local[12];
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_integer_exactchars(f,charlen,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(!run_integer(f))					finMsg+=local[7];
		if(!run_exact(f,charlen))			finMsg+=msg_exact(charlen);
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_regex(f,r,required) {
	if(required == 1 || f.value.length > 0) {
		if(run_regex(f,r)) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,local[8],0);
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_email(f,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(run_personalemail(f)) 				finMsg+=local[2];
		if(run_competitoremail(f))				finMsg+=local[3];
		
		if(f.value.length > 0) {
			if(run_validemail(f))				finMsg+=local[1];
		}
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}

function validate_email_unique(f,v,db,table,col,required) {
	if(required == 1 || f.value.length > 0) {
		var finMsg = "";
		
		if(run_personalemail(f)) 				finMsg+=local[2];
		if(run_competitoremail(f))				finMsg+=local[3];
		
		if(f.value.length > 0) {
			if(run_validemail(f))				finMsg+=local[1];
		}
		
		if(finMsg.length==0) {
			run_unique(f,v,db,table,col);
		}
	
		if(finMsg.length==0) {
			return set_msg(f.id,local[9999],1);
		} else {
			return set_msg(f.id,finMsg,0);	
		}
	} else {
		return set_msg(f.id,local[9999],1);
	}
}
