// Input validation for every field in application

function initializeRTE() {
	if (typeof tinyMCE != 'undefined') {
		tinyMCE.init({
			mode : "textareas",
			theme : "advanced",
			editor_selector : "mceEditor",
			editor_deselector : "mceNoEditor",
			plugins : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,flash,searchreplace,print,contextmenu",
			theme_advanced_buttons1 : "fontselect,fontsizeselect,bold,italic,underline,separator,justifyleft,justifycenter,justifyright, justifyfull,separator,bullist,numlist,separator,indent,outdent,separator,cut,copy,paste,separator,forecolor,backcolor,separator,image,link,separator,table,fullpage",
			theme_advanced_buttons2 : "",
			theme_advanced_buttons3 : "",
			theme_advanced_toolbar_location : "top",
			theme_advanced_toolbar_align : "left",
			width : "730",
			theme_advanced_fonts : "Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Times Roman=Times New Roman;Verdana=verdana;Symbol=symbol",
			theme_advanced_font_sizes : "2,3,4",
			extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
		});
	}
}


function updateRTE() {
	if (typeof tinyMCE != 'undefined') tinyMCE.triggerSave();
}

function setFocus() {
	if (document.forms.length > 0) {
		var field = document.forms[0];
		for (i = 0; i < field.length; i++) {
			if ((field.elements[i].type == "text") || (field.elements[i].type == "textarea")) {
				document.forms[0].elements[i].focus();
				break;
			}
		}
	}
}

function mask(str,textbox,loc,delim,event){
  var keyCode = event.keyCode ? event.keyCode :
                event.charCode ? event.charCode :
				event.which ? event.which : void 0;
  


  var locs = loc.split(',');
  
  
  
  if (keyCode == 9
  		|| (keyCode >= 37 && keyCode <=40)
		|| keyCode == 8
		|| keyCode == 46) {
  	//tab key just ignore
	return;
  }
  
 

  for (var i = 0; i <= locs.length; i++){
	for (var k = 0; k <= str.length; k++){
	 if (k == locs[i]){
	  if (str.substring(k, k+1) != delim){
	   if (keyCode != 8){ //backspace
	    str = str.substring(0,k) + delim + str.substring(k,str.length);
       }
	  }
	 }
	}
 }
textbox.value = str   
}



function isInteger (s){
	var i;
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (!((c >= "0") && (c <= "9"))) return false;
    }
    return true;
}

function isNumber (s){
	var i;
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
		if(c != "."){
        	if (!((c >= "0") && (c <= "9"))) return false;
		}
    }
    return true;
}

function stripChars (s, chars){
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (chars.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function isEmail(s){
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@")){
		i++;
	}
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != ".")){
		i++;
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}


function checkPassword (strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter a password.\n";
	}
	var illegalChars = /[\W_]/;
	if (strng.length < 6) {
	  	error = "The password needs to be at least 6 alphanumeric characters.\n";
	}
    else if (illegalChars.test(strng)) {
    	error = "The password contains illegal characters.\n";
    }
	else if (!(strng.search(/[a-zA-Z]/)>=0 && strng.search(/[0-9]/)>=0)) {
  		error = "The password must contain at least one letter and one numeral.\n";
	}
	return error;
}


function validateFields(){
	for(i=0;i<document.forms[0].elements.length;i++){
		if((document.forms[0].elements[i].id.indexOf("required") != -1) && (document.forms[0].elements[i].value == '')){
			alert("Please complete all required fields.");
			document.forms[0].elements[i].focus();
			return false;
		}
	}
	
	for(i=0;i<document.forms[0].elements.length;i++){
		if(document.forms[0].elements[i].id.indexOf("number") != -1){
			if(document.forms[0].elements[i].value != ''){
				if(!isNumber(document.forms[0].elements[i].value)){
					alert("Please enter a valid numeric value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("percentage") != -1){
			if(document.forms[0].elements[i].value != ''){
				var percentageValue = stripChars(document.forms[0].elements[i].value, "% ");
				if(!isNumber(percentageValue)){
					alert("Please enter a valid percentage value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("year") != -1){
			if(document.forms[0].elements[i].value != ''){
				if(!isNumber(document.forms[0].elements[i].value) || document.forms[0].elements[i].value.length != 4){
					alert("Please enter a valid 4 digit year.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("email") != -1){
			if(document.forms[0].elements[i].value != ""){
				if(!isEmail(document.forms[0].elements[i].value)){
					alert("Please enter a valid Email Address.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("phone") != -1){
			if(document.forms[0].elements[i].value != ""){
				var normalizedPhone = stripChars(document.forms[0].elements[i].value, "()- ");
				if (isInteger(normalizedPhone) && normalizedPhone.length == 10){
					document.forms[0].elements[i].value = normalizedPhone;
				}
				else{
					alert("Please enter a valid Phone Number.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
		if(document.forms[0].elements[i].id.indexOf("password") != -1){
			if(document.forms[0].elements[i].value != ""){
				error = checkPassword(document.forms[0].elements[i].value);
				if(error != ''){
					alert(error);
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}			

		if(document.forms[0].elements[i].id.indexOf("dollar") != -1){
			var NewFieldValue = "";
			var positive = true;
			if(document.forms[0].elements[i].value != ''){
				var amountValue = stripChars(document.forms[0].elements[i].value, "$, +-");
				 if (amountValue.indexOf("(") != -1 || amountValue.indexOf("-") != -1 ) {
				 	positive = false;
				}
				amountValue = stripChars(amountValue,"()-+");
				if(isNumber(amountValue)){
					if (!positive) {
						amountValue = "-"+amountValue;
					}
					document.forms[0].elements[i].value = amountValue;
				}
				else{
					alert("Please enter a valid dollar value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}

		if(document.forms[0].elements[i].id.indexOf("wholevalue") != -1){
			var NewFieldValue = "";
			if(document.forms[0].elements[i].value != ''){
				var amountValue = stripChars(document.forms[0].elements[i].value, ", ");
				if(isNumber(amountValue) && amountValue.indexOf(".") == -1){
					document.forms[0].elements[i].value = amountValue;
				}
				else{
					alert("Please enter a valid whole number value.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}		
		
		
		if(document.forms[0].elements[i].id.indexOf("zip") != -1){
			var NewFieldValue = "";
			if(document.forms[0].elements[i].value != ''){
				var amountValue = stripChars(document.forms[0].elements[i].value, "-");
				if(isNumber(amountValue) && amountValue.indexOf(".") == -1){
					
				}
				else{
					alert("Please enter a valid postal code.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}			
		
		if(document.forms[0].elements[i].id.indexOf("date") != -1){
			if(document.forms[0].elements[i].value != ""){
				FieldName = document.forms[0].elements[i].name;
				FieldValue = document.forms[0].elements[i].value;
				DateArray = FieldValue.split("/");
				if(DateArray.length != 3){
					alert("Please enter a valid date.");
					document.forms[0].elements[i].focus();
					return false;
				}
				MonthPart = DateArray[0];
				DayPart = DateArray[1];
				YearPart = DateArray[2];
				if(isNaN(Number(MonthPart)) || isNaN(Number(DayPart)) || isNaN(Number(YearPart))){
					alert("Please enter a valid numeric date.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(MonthPart < 0 || Number(MonthPart) > 12){
					alert("Dates must have a month between 1 and 12.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(DayPart < 0 || DayPart > 31){
					alert("Dates must have a day between 1 and 31.");
					document.forms[0].elements[i].focus();
					return false;
				}
				if(YearPart.length != 4){
					alert("Dates must have a four digit numeric year.");
					document.forms[0].elements[i].focus();
					return false;
				}
			}
		}
		
        if((document.forms[0].elements[i].id.indexOf("maxlen") != -1))
        {
            var regexp = /maxlen([0-9]*)/;
            var id = document.forms[0].elements[i].id;
            var match = regexp.exec(id);
            if (match && match.length > 1)
            {
                var val = document.forms[0].elements[i].value;
                val = val.stripHTML();
                var maxlen = match[1];
                if (val != null && val.length > maxlen)
                {
                    alert("Sorry, you are limited to " + maxlen + " characters. Currently there are "+val.length+" characters");
                    document.forms[0].elements[i].focus();
                    return false;
                }
            }
        }
    

	}
	return true;
}

String.prototype.stripHTML = function () {
	var reTag = /<(.|\s)+?>/g;
	return this.replace(reTag,"");
};

function checkDelete(){
	if(confirm("Are you sure you want to Delete this record?"))
		return true;
	else
		return false;
}

function formatCurrency(num) {
	if(num == "") return;
	if(isNaN(num)) return;
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}
function formatCurrency(num,dec) {
	if (dec == 2) return formatCurrency(num);
	//assume dec = 0
	if(num == "") return;
	if(isNaN(num)) return;
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.round(num);
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num);
}
