function disableFormFields(frm){
	var needsFocus = true;
	for(var i=0; i<frm.elements.length; i++){
		if(isElementDisabled(frm.elements[i])){
			disableField(frm.elements[i]);
		}else if(needsFocus){
			switch(frm.elements[i].type){
			case 'text':
				frm.elements[i].focus();
				needsFocus = false;			
			}
		
		}
	}
}

function getFormCriteriaData(frm, flds, sep){
	if(frm==null || flds==null || flds.length==null) return null;
	var a = new Array();
	for(var i=0; i<flds.length; i++){
		var f = frm[flds[i]];
		if(f!=null){
			a[a.length]=getFormElementValue(f);
		}
	}
	return a.join(sep);

}

function validateMaildir(maildir){
	if(maildir==""){
		alert("Please enter a value in the mail directory name field.");
		return;
	}
	var w = window.open("/ProfileManager/mailDirectory/lookup/results.do?maildir="+maildir,"","menubar=false,status=false,toolbar=false,top=400,left=300,height=100,width=300");
	if(w==null){
		alert("Please disable pop-up blockers and try again.");
	}

}

function setFieldValue(frm, fld, val){
	for(var i=0; i<frm.elements.length; i++){
		if(frm.elements[i].name==fld){
			var e = frm.elements[i];
			switch(e.type){
				case 'text':
				case 'textarea':
				case 'password':
					e.value=val;
					break;
				case 'select-one':
					e.selectedIndex = 0;
					for(var j=0;j<e.options.length;j++){
						if(e.options[j].value==val){
							e.selectedIndex=j;
						}
					}
					break;
				case 'checkbox':
					e.checked = false;
					if(e.value==val){
						e.checked = true;
					}
					break;
			}
		}
	}
}

function disableField(fld){
	fld.onfocus=forceBlur;
	fld.tabIndex = -1;
}

function initForms(){
	for(var i=0; i< document.forms.length; i++){
		disableFormFields(document.forms[i]);
		highlightInvalidOptions(document.forms[i]);
	}

}

function parseDate(str){
	if(str==null) return null;
	var components = str.split('/');
	if(components.length!=3) return null;
	return new Date(components[2]-0, components[0]-1, components[1]-0); 


}

function highlightInvalidOptions(frm){

	for(var i=0; i<frm.elements.length; i++){
		if(frm.elements[i].type=='select-one'){
			if(isInvalidOption(frm.elements[i].options[frm.elements[i].selectedIndex])){
				highlightSelect(frm.elements[i]);

			}
		}
	}


}

function isInvalidOption(opt){
	return (opt.value=="-1");

}

function highlightSelect(sel){
	sel.style.backgroundColor="yellow";
}

window.onload=initForms;


function clearForm(frm){
	for(var i=0; i<frm.elements.length; i++){
		clearFormElement(frm.elements[i]);
	}
}

function isElementDisabled(el){
	return !(null==el.className.match(/\bdisabled\b/));
}

function clearFormElement(el){
	if(!isElementDisabled(el)){
		switch(el.type){
			case 'text':
			case 'textarea':
				el.value="";
				break;
			case 'select-one':
				el.selectedIndex=0;
				break;
			case 'checkbox':
				el.checked=false;
				break;
		}
	}
}

function getFormElementValue(el){
		switch(el.type){
			case 'text':
			case 'textarea':
			case 'password':
				return el.value;
				break;
			case 'select-one':
				return el.options[el.selectedIndex].value;
				break;
			case 'radio':
				var e = el.form[el.name];
				for(var i=0; i<e.length; i++){
					if(e[i].checked){
						return e[i].value;
					}
				}
			
				break;
			case 'checkbox':
				break;
		}
	

}

function forceBlur(){
	this.blur();
	alert(jsGlobalDisabledMsg);
}

function removeControlCharacters(str){
	var re = /[\n\r\t]/g;
	return str.replace(re, " ");

}

function formatDateElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);
	var el = (e.target) ? e.target : e.srcElement;
	el.value = getDateFromShortDate(el.value);
}

function formatUpperCase(e){
	e = (e) ? e : ((window.event) ? window.event : null);
	var el = (e.target) ? e.target : e.srcElement;
	el.value = translateToUpperCase(el.value);
}

function translateToUpperCase(str){
	return str.toUpperCase();
}

function formatUrlElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	el.value = getUrlFromString(el.value);
	if(el.value != ""){
		openURLVerificationWindow(el.value);
	}
}
function formatEntityListElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	el.value = getEntityListFromString(el.value);
}
function formatCustidListElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	el.value = getCustidListFromString(el.value);
}
function formatMultiLineElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	el.value = removeControlCharacters(el.value);
}

function maintainUserPermissionElement(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	setUserPermissions(el);
}

function manageExtractTypeFormat(e){
	e = (e) ? e : ((window.event) ? window.event : null);	
	var el = (e.target) ? e.target : e.srcElement;
	var e2 = document.getElementById('layout');
	setTransExtractFormat(el, e2);
}


function openURLVerificationWindow(url){
	var w = window.open(url, "url_verification", "menubar1=false,status=false,location=false,titlebar=false,toolbar=false,height=400,width=400");
	if(w==null){
		alert("Unable to open window to verify address.  Please disable any pop-up blockers.");
	}

}

function setTransExtractFormat(exttypeFld, formatFld){

	var t = exttypeFld.options[exttypeFld.selectedIndex].value;
	switch(t){
		case "C":
		case "O":
			formatFld.value = "COMRPV4C";
			break;
		default:
			formatFld.value = "COMRPV4S";
			break;
	}


}

function getEntityListFromString(e){
	var lines = e.split('\n');
	var r = /([\d]{6})[-\t\s,]*([\dA-Z]{2,4})/;
	var rs = /[\S]/;
	var result = "";
	var goodCount = 0;
	var badCount = 0;
	var blankCount = 0;
	

	for(var i=0; i<lines.length; i++){
		var m = lines[i].match(r);
		if(m!=null){
			result+=m[1]+"-"+m[2] + "\n";
			goodCount++;
		}else{
			
			if(lines[i].match(rs)){
				badCount++;
			}else{
				blankCount++;
			}
		}

	}
	if(badCount>0){
		alert(badCount + " lines skipped due to parsing error.");
	}
	return result;
}

function getCustidListFromString(e){
	var lines = e.split('\n');
	var r = /([A-Z]{3}[\d]{2,}[A-Z\d]{2,})[-\t\s,]*/;
	var rs = /[\S]/;
	var result = "";
	var goodCount = 0;
	var badCount = 0;
	var blankCount = 0;
	

	for(var i=0; i<lines.length; i++){
		var m = lines[i].match(r);
		if(m!=null){
			result+=m[1] +"\n";
			goodCount++;
		}else{
			
			if(lines[i].match(rs)){
				badCount++;
			}else{
				blankCount++;
			}
		}

	}
	if(badCount>0){
		alert(badCount + " lines skipped due to parsing error.");
	}
	return result;
}



function getUrlFromString(str){
	if(str==""){
		return "";
	}else if(str.indexOf("http://")==0 || str.indexOf("https://")==0){
		return str;
	}else{
		return "http://" + str;
	}
}

function getDateFromShortDate(str){

	// Pattern for date adjustment strings.
	var d_re = /^[dD]\s*(([+-]\d+)[dD])?\s*(([+-]\d+)[wW])?\s*(([+-]\d+)[mM])?\s*(([+-]\d+)[yY])?\s*$/;
	var d_re_rslt = str.match(d_re);
	

	if(d_re_rslt!=null)
	{
		var curDate = new Date();
		var offsetDays = ((d_re_rslt[2]) ? d_re_rslt[2] : 0) - 0;
		var offsetWeeks = ((d_re_rslt[4]) ? d_re_rslt[4] : 0) - 0;
		var offsetMonths = ((d_re_rslt[6]) ? d_re_rslt[6] : 0) - 0;
		var offsetYears = ((d_re_rslt[8]) ? d_re_rslt[8] : 0) - 0;
		curDate.setDate(curDate.getDate() + offsetDays);
		curDate.setDate(curDate.getDate() + (offsetWeeks*7));
		curDate.setMonth(curDate.getMonth() + offsetMonths);
		curDate.setFullYear(curDate.getFullYear() + offsetYears);
	
		
		str = "" + (curDate.getMonth() + 1 )+ "/" + curDate.getDate() + "/" + curDate.getFullYear();
	}
	if(RegExp)
	{
		var dateRegEx = /^([01]?\d)[\.\-\/\s]?([0123]?\d)[\.\-\/\s]?(\d{4}|\d{2})$/;
		var result = str.match(dateRegEx);
		if(result != null){
			var month = result[1];
			var day = result[2];
			var year = result[3];
			while(month.length < 2)
			{
				month = "0" + month;
			}
			while(day.length < 2)
			{
				day = "0" + day;
			}
			if(year.length==2){
				if(year >= 80){
					year = 1900 + (year - 0)
				}else{
					year = 2000 + (year - 0)
				}
			}
			return month + "/" + day + "/" + year;
		}
	}
	return str;
}

function _isJSDebugMode(){
	return (document.location.indexOf("jsDebugOn=true") >= 0);
}

function _debugJSCharacters(str){
   var chars = new Array();
   for(var i=0; i < str.length; i++){
     var c = str.charCodeAt(i);
	 chars[c] = (chars[c] == null ? 1 : ++chars[c]);
   }
   
   var res = "Characters by character code:";
   for(var i=0; i<chars.length; i++){
      if(chars[i] != null && chars[i] > 0){
	    res += ("\n" + i + ": " + chars[i]);
	  }
   }
   alert(res);
}



function setUserPermissions(fld){
	if(fld.options[fld.options.selectedIndex].value==3){
		if(fld.form){
			if(fld.form.nonCashTranAccess){
				fld.form.nonCashTranAccess.checked = true;
			}
			if(fld.form.cashTranAccess){
				fld.form.cashTranAccess.checked = true;
			}
			if(fld.form.certAccess){
				fld.form.certAccess.checked = true;
			}
		}
	} else {
	
		if(fld.form){
			if(fld.form.nonCashTranAccess){
				fld.form.nonCashTranAccess.checked = false;
			}
			if(fld.form.cashTranAccess){
				fld.form.cashTranAccess.checked = false;
			}
			if(fld.form.certAccess){
				fld.form.certAccess.checked = false;
			}
		}
	}

}
