// 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,searchreplace,print,contextmenu,paste",
			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,separator,pastetext,pasteword",
			theme_advanced_buttons2 : "",
			theme_advanced_buttons3 : "",
			paste_auto_cleanup_on_paste : true,
			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]",
			strict_loading_mode : false
		});
	}
}


function updateRTE() {
	if (typeof tinyMCE != 'undefined') tinyMCE.triggerSave();
}

function orgPicker() 
{
	window.open("organizationsPicker.do", "Select", "status=no,resizable=yes,scrollbars=1, width=850,height=400");

}

function personPicker() 
{
	window.open("peoplePicker.do", "Select", "status=no,resizable=yes,scrollbars=1, width=850,height=400");

}	
	
function getOptions(element,elementId) {

	  var selectedArray = new Array();
	  var i;
	  var count = 0;
	  for (i=0; i<element.options.length; i++) {
	    if (element.options[i].selected) {
	      selectedArray[count] = element.options[i].value;
	      count++;
	    }
	  }
	  document.getElementById(elementId).value = selectedArray.join('|');
	}	
	

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 checkRadioGroup(element) {
	var radiogroup = document.forms[0].elements[element.name];
	var itemchecked = false;
	for(var j = 0 ; j < radiogroup.length ; ++j) {
		if(radiogroup[j].checked) {
			itemchecked = true;
			break;
		}
	}
	if(!itemchecked) { 
		document.forms[0].elements[element.name][0].focus();
		return false;
	}
	return true;
}

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].type == "radio") {
			if (!checkRadioGroup(document.forms[0].elements[i])) {
				alert("Please complete all required fields.");
				return false;
			}
		} else 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;
				}
				else {
					document.forms[0].elements[i].value = percentageValue;
				}
			}
		}
		
		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){
			var includesTime = false;
			if(document.forms[0].elements[i].id.indexOf("addTime") != -1){
				includesTime = true;
			}
			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];
				timePart = "";
				
				if (includesTime) {
					if(YearPart.length >= 4){ 
						timePart = YearPart.substring(4).trim();
						timeArray = timePart.split(":");
						if(timePart.length != 5 || timeArray.length != 2){ 
							alert("Please enter a valid numeric time using the format hh:mm.");
							return false;
						}
						hourPart = timeArray[0];
						minutePart = timeArray[1];
						if(isNaN(Number(hourPart)) || isNaN(Number(minutePart))){
							alert("Please enter a valid numeric time using the format hh:mm.");
							return false;
						}
						
						YearPart = YearPart.substring(0,4);
					}
				}
					
				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)
            {
				if (document.forms[0].elements[i].className == 'mceEditor') {
					var valLength = getLengthMCE(document.forms[0].elements[i].id);
					var maxlen = match[1];
					if (valLength > maxlen)
	                {
	                    alert("Sorry, you are limited to " + maxlen + " characters. Currently there are "+valLength+" characters");
	                    tinyMCE.execCommand('selectall', false, id);
	                    return false;
	                }
				}
				else {
	                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;
	                }
				}
            }
        }
    
	
        if((document.forms[0].elements[i].id.indexOf("dtpimask") != -1 && !(document.forms[0].elements[i].value == '')))
        {
            var regexp = /dtpimask([\S]*)dtpimask/;
			var id = document.forms[0].elements[i].id;
            var match = regexp.exec(id);
            if (match && match.length > 1)
            {

				var temp1 = '';
				var temp2 = match[1];
				for (j = 0; j < temp2.length; j++){   
					var c = temp2.charAt(j);
					if (c == '?') {
						temp1=temp1+'[\\D\\W]?';
					}
					else if (c == 'x') {
						temp1=temp1+'[\\D\\W]';
					}
					else if (c == 'X') {
						temp1=temp1+'[\\D\\W]';
					}
					else if (c == '@') {
						temp1=temp1+'[\\w]';
					}
					else if (c == '#') {
						temp1=temp1+'[\\d]?';
					}
					else if (c == '0') {
						temp1=temp1+'[\\d]';
					}
					else if (c == '9') {
						temp1=temp1+'[\\d]?';
					}
					else {
						temp1= temp1+c;
					}
				}
				var re = new RegExp(temp1);
				if (document.forms[0].elements[i].value.match(re)) {
					
				} else {
					alert("Sorry, your entry must match the following format: "+temp2+" where:\n\nX is a required charactor\n? is an optional character\n0 is a required digit\n# is an optional digit");
		            document.forms[0].elements[i].focus();
		            return false;
				}
			}
		}
        	

	}
	return true;
}

function getLengthMCE(editorId) {

    // Get the editor instance that we want to interact with.
    var oEditor = tinyMCE.get(editorId) ;

    // Get the Editor Area DOM (Document object).
    var oDOM = oEditor.getDoc() ;

    var iLength ;
    // The are two diffent ways to get the text (without HTML markups).
    // It is browser specific.
    if (document.all) {
        // If Internet Explorer.
        iLength = oDOM.body.innerText.length;
    } else {
        // If Gecko.
        var r = oDOM.createRange() ;
        r.selectNodeContents(oDOM.body);
        iLength = r.toString().length;
    }

    return iLength;
}

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) {
	alert('test');
	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);
}


String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}





function checkAge(objField, minAge)
{
	var regexp = /\d{2}\/\d{2}\/\d{4}/;
	if(!objField.value.match(regexp)){
	  alert('Invalid date - format : MM/DD/YYYY');
	  return false;
	}
 
	/* change "age_form" to whatever your form has for a name="..." */
	var day = parseInt(objField.value.substr(3,2));
	var month = parseInt(objField.value.substr(0,2)) - 1;
	var year = parseInt(objField.value.substr(6,4));
	
	var theirDate = new Date((year + minAge), month, day);
	var today = new Date;

	if ( (today.getTime() - theirDate.getTime()) < 0) {
		return false;
		
	}
	else {
		return true;
		
	}
}


function addOption(selectbox,text,value )
{
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

function removeAllOptions(selectbox)
{
	var i;
	for(i=selectbox.options.length-1;i>=0;i--)
	{
		selectbox.remove(i);
	}
}



