// Entango Core JavaScript
/*jslint browser: true */ /*global window */
if(window.Ent === undefined){var Ent = {};Ent.entango = true;}
if((typeof Ent === "object") && (Ent !== null) && (Ent.entango === true)){
if(Ent.ent_core_included !== true){
// backward compatibility
var ent = Ent;
Ent.ent_core_included = true;
Ent.modules = {};
Ent.modules.ent_core = true;
Ent.defaultCookieLifetimeDays = 30;
Ent.eReadonly = "eFormReadonly";
Ent.clientFieldMaxLength = 512;
Ent.isUndefined = function(item){return typeof item === "undefined";};
Ent.isNull = function(item){return item === null;};
Ent.isNUN = function(item){return (item === undefined) || (item === null);};
Ent.isEmpty = function(item){return Ent.isNUN(item);};
Ent.isNumber = function(item){return !isNaN(item) && ((typeof item === "number") || (item instanceof Number));};
Ent.isString = function(item){return (typeof item === "string") || (item instanceof String);};
Ent.isBoolean = function(item){return (typeof item === "boolean") || (item instanceof Boolean);};
Ent.isFunction = function(item){return typeof item === "function";};
Ent.isObject = function(item){return (typeof item === "object") && (item !== null) && !(item instanceof Array) && !(item instanceof Number) && !(item instanceof String) && !(item instanceof Boolean);};
Ent.isArray = function(item){return (item instanceof Array);};
Ent.getType = function(item){var type = typeof item;if(type === "object"){if(item === null){return "null";}else if(item instanceof Number){return "number";}else if(item instanceof String){return "string";}else if(item instanceof Boolean){return "boolean";}else if(item instanceof Array){return "array";}}return type;};
Ent.isNode = function(item){return (item !== null) && (typeof item === "object") && (typeof item.nodeType === "number");};
Ent.isElement = function(item){return Ent.isNode(item) && (item.nodeType === 1);};
Ent.getElement = function(item){
	var getValue = function(item,defaultValue){
		if(defaultValue === undefined){defaultValue = null;}
		if(typeof item.value === "string"){return item.value;}
		else if(!Ent.isNUN(item.options) && (item.options.length > 0)){return Ent.getSelectValue(item);}
		else{return defaultValue;}
	};
	var setValue = function(item,value){
		var prevValue = null;
		if(value === undefined){value = null;}
		if(typeof item.value === "string"){prevValue = item.value; item.value = (value === null ? "" : value);}
		else if(!Ent.isNUN(item.options)){prevValue = Ent.getSelectValue(item); Ent.setSelectValue(item,value);}
		return prevValue;
	};
	if(Ent.isString(item)){item = document.getElementById(item);}
	if(Ent.isElement(item)){
		item.getValue = function(){return getValue(this);};
		item.setValue = function(value){return setValue(this,value);};
	return item;
	}
	else{return null;}
};
Ent.getInt = function(item,defaultValue){if(defaultValue === undefined){defaultValue = 0;}if(Ent.isNUN(item)){return defaultValue;}if(item instanceof String){item = item.valueOf();}else if(item instanceof Number){item = item.valueOf();}switch(typeof item){case "number":if(isNaN(item)){return defaultValue;}else{item = (item > 0 ? Math.floor(item) : Math.ceil(item));return item;}case "string":return Ent.getInt(parseFloat(Ent.trim(item)),defaultValue);case "object":if(Ent.isNumber(item.value) || Ent.isString(item.value)){return Ent.getInt(item.value,defaultValue);}else{return defaultValue;}default:return defaultValue;}};
Ent.getFloat = function(item,defaultValue){if(defaultValue === undefined){defaultValue = 0;}if(Ent.isNUN(item)){return defaultValue;}if(item instanceof String){item = item.valueOf();}else if(item instanceof Number){item = item.valueOf();}switch(typeof item){case "number":return isNaN(item) ? defaultValue : item;case "string":return Ent.getFloat(parseFloat(Ent.trim(item)),defaultValue);case "object":if(Ent.isNumber(item.value) || Ent.isString(item.value)){return Ent.getFloat(item.value,defaultValue);}else{return defaultValue;}default: return defaultValue;}};
Ent.getNumber = function(item,defaultValue){return Ent.getFloat(item,defaultValue);};
ent.getString = function(item,defaultValue){if(defaultValue === undefined){defaultValue = "";}if(ent.isNUN(item) || ent.isFunction(item)){return defaultValue;}if(ent.isString(item) || ent.isNumber(item) || ent.isBoolean(item)){return item.valueOf().toString();}if(ent.isObject(item) && (ent.isString(item.value) || ent.isNumber(item.value) || ent.isBoolean(item.value))){return item.value.valueOf().toString();}return defaultValue;};
Ent.getElementValue = function(item,defaultValue){item = Ent.getElement(item); return item === null ? null : item.getValue(defaultValue);};
Ent.setElementValue = function(item,value){item = Ent.getElement(item); return item === null ? null : item.setValue(value);};
ent.getMoney = function(item,defaultValue){
if(defaultValue === undefined){defaultValue = 0;}
if(ent.isNUN(item)){return defaultValue;}
if(item instanceof String){item = item.valueOf();}
if(item instanceof Number){item = item.valueOf();}
switch(typeof item){
case "number":return isNaN(item) ? defaultValue : (item > 0 ? Math.floor(100 * item) / 100 : Math.ceil(100 * item) /100);
case "string":item=item.replace(/[\$,]+/g,"");return ent.getMoney(ent.getFloat(item),defaultValue);
case "object":if(ent.isNumber(item.value) || ent.isString(item.value)){return ent.getMoney(item.value,defaultValue);}else{return defaultValue;}
}
return defaultValue;
};
ent.formatFloat = function(num,dec,width){
var cnt, fixed, show;
if(ent.isNUN(dec)){dec = 0;}
fixed = num.toFixed(dec);
if(ent.isNUN(width) || (width <= 0) || (width <= fixed.length)){return fixed;}
show = "";
for(cnt = 0; cnt < width - fixed.length; cnt++){show += " ";}
return show + fixed;
};
ent.formatMoney = function(item){return ent.formatFloat(item,2);};
ent.isVisible = function(item){item=ent.getElement(item);if((item !== null) && (item.style.display !== "none")){return true;}return false;};
ent.setVisible = function(item){
item=ent.getElement(item);
if(item !== null){
item.style.display = "";
}
};
ent.isInvisible = function(item){item=ent.getElement(item);if(item === null || item.style.display === "none"){return true;}return false;};
ent.setInvisible = function(item){item=ent.getElement(item);if(item !== null){item.style.display = "none";}};
ent.flipVisibility = function(item){item=ent.getElement(item);if(ent.isVisible(item)){ent.setInvisible(item);}else{ent.setVisible(item);}};
ent.isEnabled = function(item){item=ent.getElement(item);if(item !== null && item.disabled !== true){return true;}return false;};
ent.setEnabled = function(item){item=ent.getElement(item);if(item !== null){item.disabled = null;}};
ent.isDisabled = function(item){item=ent.getElement(item);if(item !== null && item.disabled === true){return true;}return false;};
ent.setDisabled = function(item){item=ent.getElement(item);if(item !== null){item.disabled = true;}};
ent.isChecked = function(item){item=ent.getElement(item);if(item !== null && item.checked === true){return true;}return false;};
ent.setChecked = function(item){item=ent.getElement(item);if(item !== null){item.checked = true;}};
ent.isUnchecked = function(item){item=ent.getElement(item);if(item !== null && item.checked !== true){return true;}return false;};
ent.setUnchecked = function(item){item=ent.getElement(item);if(item !== null){item.checked = null;}};
ent.isReadonly = function(item){item=ent.getElement(item);if(item !== null && item.readOnly === true){return true;}return false;};
ent.setReadonly = function(item){item=ent.getElement(item);if(item !== null){item.readOnly = true;}};
ent.isNotReadonly = function(item){item=ent.getElement(item);if(item !== null && item.readOnly !== true){return true;}return false;};
ent.setNotReadonly = function(item){item=ent.getElement(item);if(item !== null){item.readOnly = null;}};
ent.setFocus = function(item){item=ent.getElement(item);if(item !== null){item.focus();}};
ent.submitForm = function(formId,formAction,formMethod,formTarget){var form=document.forms[formId];if((form !== undefined) && (form !== null)){if((formAction !== undefined) && (formAction !== null)){form.action=formAction;}if((formMethod !== undefined) && (formMethod !== null)){form.method=formMethod;}if((formTarget !== undefined) && (formTarget !== null)){form.target=formTarget;}return form.submit();}return false;};
ent.isBlankElement = function(item){item = ent.getElement(item);if((item === null) || ent.isBlankString(item.value)){return true;}return false;};
ent.isBlankString = function(item){var pattern = /\S/;if((item === undefined) || (item === null) || (((typeof item === "string") || (item instanceof String)) && !pattern.test(item))){return true;}return false;};
ent.isBlank = function(item){if((typeof item === "string") || (item instanceof String)){return ent.isBlankString(item);}if(ent.isObject(item) && ((typeof item.value === "string") || (item.value instanceof String))){return ent.isBlankString(item.value);}return false;};
ent.setText = function(item,text){item = ent.getElement(item);if(item !== null){if(item.hasChildNodes()){item.replaceChild(document.createTextNode(text),item.firstChild);}else{item.appendChild(document.createTextNode(text));}}};
ent.getText = function(item){item = ent.getElement(item);if((item !== null) && item.hasChildNodes()){return item.firstChild.nodeValue;}return "";};
ent.getOptionValue = function(item){item = ent.getElement(item);if(item !== null){if(!ent.isBlankString(item.value)){return item.value;}else if(!ent.isBlankString(item.text)){return item.text;}else{return "";}}};
ent.getElementsByNameAndTag = function(name,tag,form){
	var block, items, i;
var elements = [];
if(!ent.isBlankString(name) && !ent.isBlankString(tag)){
if(ent.isBlankString(form)){block = document;}
else{block = document.forms[form];}
if(!ent.isNUN(block)){
	items = block.getElementsByTagName(tag);
	for(i = 0; i < items.length; i++){if(items[i].name === name){elements[elements.length] = items[i];}}}}return elements;};
ent.getInputByName = function(inputName,formName){
	var item, inputs, i, input = null;
	if(!ent.isEmpty(inputName)){
		item = document;
		if(!ent.isEmpty(formName)){item = document.forms[formName];}
		if(!ent.isNUN(item)){inputs = item.getElementsByTagName("input");for(i = 0; i < inputs.length; i++){if(inputs[i].name === inputName){input = inputs[i];}}}}return input;};
ent.getSelectByName = function(selectName,formName){
	var item, i, select = null;if(!ent.isEmpty(selectName)){item = document;if(!ent.isEmpty(formName)){item = document.forms[formName];}if(!ent.isNUN(item)){var selects = item.getElementsByTagName("select");for(i = 0; i < selects.length; i++){if(selects[i].name === selectName){select = selects[i];}}}}return select;};
ent.getSelectValue = function(item){item = ent.getElement(item);if((item !== null) && !ent.isNUN(item.options) && (item.options.length > 0)){var selected = item.selectedIndex;if((typeof selected !== "number") || (selected < 0) || (selected >= item.options.length)){selected = 0;}return item.options[selected].value;}else{return null;}};
ent.setSelectValue = function(select,value){
	var selectIndex, index;
	select = ent.getElement(select);
	if((select !== null) && !ent.isNUN(select.options) && (typeof select.options.length === "number") && (select.options.length > 0)){
		if(ent.isNUN(value)){select.selectedIndex = 0;}
		else{value = ent.getString(value);
			selectIndex = 0;for(index = 0; index < select.options.length; index++){if(select.options[index].value === value){selectIndex = index;break;}}select.selectedIndex = selectIndex;}}};
ent.trimStart = function(item){
	if(ent.isNUN(item)){return "";}
if(item instanceof String){item = item.valueOf();}
switch(typeof item){
case "string":return item.replace(/^\s+/,"");
case "object":if(ent.isString(item.value)){return ent.trim(item.value);}else{return "";}
}
return "";
};
ent.trimEnd = function(item){
if(ent.isNUN(item)){return "";}
if(item instanceof String){item = item.valueOf();}
switch(typeof item){
case "string":return item.replace(/\s+$/,"");
case "object":if(ent.isString(item.value)){return ent.trim(item.value);}else{return "";}
}
return "";
};
ent.trim = function(item){
if(ent.isNUN(item)){return "";}
if(item instanceof String){item = item.valueOf();}
switch(typeof item){
case "string":return item.replace(/^\s+|\s+$/g,"");
case "object":if(ent.isString(item.value)){return ent.trim(item.value);}break;
}
return "";
};
ent.cleanUp = function(str){return ent.trim(str).replace(/\s+/g," ");};
ent.parseFloatField = function(str){str = ent.trim("" + str);if(str === ""){return 0;}else{return parseFloat(str);}};
ent.parseIntField = function(str){str = ent.trim("" + str);if(str === ""){return 0;}else{return parseInt(str,10);}};
ent.parseMoneyField = function(str){str = ent.trim("" + str);if(str === ""){return 0;}else{return Math.floor(100.0 * parseFloat(str))/100.0;}};
ent.clientField = function(str){return ent.getElement("clientField." + str);};
ent.tempField = function(str){return ent.getElement("tempField." + str);};
ent.truncate = function(item,limit){
	if(ent.isString(item)){
		item = String(item);
		limit = ent.getInt(limit);
		if(item.length >= limit){return item.substring(0,limit);}
		else{return item;}
	}
	else if(ent.isObject(item) && ent.isString(item.value)){
		var truncated = ent.truncate(item.value,limit);
		if(typeof item.value === "string"){item.value = truncated;}
		if(item.value instanceof String){item.value = Object(truncated);}
		return truncated;
	}
	return "";
};
ent.limit = function(item,limit){item=ent.getElement(item);if((item !== null) && item.value && (typeof item.value === "string")){item.value = ent.trim(item.value);if((typeof limit === "number") && (limit > 0) && (item.value.length > limit)){item.value = item.value.substring(0,limit);}}};
ent.isValidEmailAddress = function(email){if(typeof email === "string"){var pattern = /^.+@.+\..{2,3}$/;return pattern.test(email);}return false;};
ent.isValidEmailField = function(item){item = ent.getElement(item);if((item !== null) && (item.value)){return ent.isValidEmailAddress(item.value);}return false;};
ent.validateEmailField = function(item,showAlert,altMessage){item = ent.getElement(item);if((item !== null) && (typeof item.value === "string")){item.value=ent.trim(item.value);if(ent.isValidEmailAddress(item.value)){return true;}}if(showAlert !== false){window.alert((typeof altMessage === "string")?altMessage:"Please enter a valid email address.");}return false;};
ent.isValidUSZipcode = function(zipcode){if(typeof zipcode === "string"){var pattern = /^\d{5}([\-]\d{4})?$/; return pattern.test(zipcode);}return false;};
ent.isValidUSZipcodeField = function(item){item = ent.getElement(item);if((item !== null) && (item.value)){return ent.isValidUSZipcode(item.value);}return false;};
ent.validateUSZipcodeField = function(item,showAlert,altMessage){item = ent.getElement(item);if((item !== null) && (typeof item.value === "string")){item.value=ent.trim(item.value);var pattern = /^[\d\s\-]{5,}$/;if(pattern.test(item.value)){var test = item.value.replace(/\s+/g,"-").replace(/\-{2,}/g,"-").replace(/\-+$/,"");if(ent.isValidUSZipcode(test)){item.value=test;return true;}}}if(showAlert !== false){window.alert((typeof altMessage === "string")?altMessage:"Please enter a valid ZIP Code.");}return false;};
ent.isValidCAZipcode = function(zipcode){if(typeof zipcode === "string"){var pattern = /^[A-Z]\d[A-Z] \d[A-Z]\d$/; return pattern.test(zipcode);}return false;};
ent.isValidCAZipcodeField = function(item){item = ent.getElement(item);if((item !== null) && (item.value)){return ent.isValidCAZipcode(item.value);}return false;};
ent.validateCAZipcodeField = function(item,showAlert,altMessage){item = ent.getElement(item);if((item !== null) && (typeof item.value === "string")){item.value=ent.trim(item.value);var pattern = /^[\d\s\-a-zA-Z]{6,}$/;if(pattern.test(item.value)){var test = item.value;if(test.length === 6){test = test.substring(0,3) + " " + test.substring(3);}test = test.toUpperCase().replace(/\-+/g," ").replace(/\s{2,}/g," ");if(ent.isValidCAZipcode(test)){item.value=test;return true;}}}if(showAlert !== false){window.alert((typeof altMessage === "string")?altMessage:"Please enter a valid Postal Code.");}return false;};
ent.isValidZipcode = function(zipcode,country){
	var ctry;
if(typeof zipcode === "string"){
if((typeof country === "string") && (country.length === 2)){ctry = country;}
else{ctry="US";}
if(ctry === "US"){return ent.isValidUSZipcode(zipcode);}
else if(ctry === "CA"){return ent.isValidCAZipcode(zipcode);}
}
return false;
};
ent.isValidZipcodeField = function(item,country){item = ent.getElement(item);if((item !== null) && (item.value)){return ent.isValidZipcode(item.value,country);}return false;};
ent.validateZipcodeField = function(item,country,showAlert,altMessage){
item = ent.getElement(item);
var ctry = "US";
if((item !== null) && (typeof item.value === "string")){
if((typeof country === "string") && (country.length === 2)){ctry = country;}
if(ctry === "US"){return ent.validateUSZipcodeField(item,showAlert,altMessage);}
else if(ctry === "CA"){return ent.validateCAZipcodeField(item,showAlert,altMessage);}
else{item.value=ent.trim(item.value);if(item.value.length > 0){return true;}}
/* Note: may be in error. Some countries might not use postal codes */
}
if(showAlert !== false){window.alert((typeof altMessage === "string")?altMessage:((ctry === "US")?"Please enter a valid ZIP Code.":"Please enter a valid Postal Code."));}return false;};
ent.getSimpleCookie = function(name){var index;if(typeof name === "string"){name = ent.trim(name);if((name !== "") && (document.cookie !== "")){var cookies = document.cookie.split(";");for(index = 0; index < cookies.length; index++){cookies[index] = ent.trim(cookies[index]);if(cookies[index].substring(0,name.length + 1) === (name + "=")){return decodeURIComponent(cookies[index].substring(name.length + 1));}}}}return "";};
ent.setSimpleCookie = function(name,val,lifetimeSecs){if(typeof name === "string"){name = ent.trim(name);if(name !== ""){if(ent.isNUN(val) || (typeof val !== "string") || ent.isBlankString(val)){val = ""; lifetimeSecs = 0;}if(ent.isNUN(lifetimeSecs)){lifetimeSecs = ent.defaultCookieLifetimeDays * 24 * 60 * 60;}if((typeof lifetimeSecs !== "number") || (lifetimeSecs < 0)){lifetimeSecs = 0;}document.cookie = name + "=" + encodeURIComponent(ent.trim(val)) + "; max-age=" + lifetimeSecs;}}};
// These are deprecated SH legacy functions here for convenience
ent.convert = function(amount){
	var dollarsAndCents, cents = amount.toString();
	var len = cents.length;
	if(len > 2){dollarsAndCents = cents.substring(0, len - 2) + "." + cents.substring(len - 2, len);}
	else{if(len === 2){dollarsAndCents = "0."  + cents;}else{if(len === 1){dollarsAndCents = "0.0" + cents;}else{ dollarsAndCents = "0.00" ;}}}return dollarsAndCents ;};
// Adapted from 3rd party source
ent.md5 = function(string) {
	/**
	*
	*  MD5 (Message-Digest Algorithm)
	*  http://www.webtoolkit.info/
	*
	**/
	function RotateLeft(lValue, iShiftBits) {
		return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
	}
 
	function AddUnsigned(lX,lY) {
		var lX4,lY4,lX8,lY8,lResult;
		lX8 = (lX & 0x80000000);
		lY8 = (lY & 0x80000000);
		lX4 = (lX & 0x40000000);
		lY4 = (lY & 0x40000000);
		lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
		if (lX4 & lY4) {
			return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
		}
		if (lX4 | lY4) {
			if (lResult & 0x40000000) {
				return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
			} else {
				return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
			}
		} else {
			return (lResult ^ lX8 ^ lY8);
		}
}
	
function F(x,y,z) { return (x & y) | ((~x) & z); }
function G(x,y,z) { return (x & z) | (y & (~z)); }
function H(x,y,z) { return (x ^ y ^ z); }
	function I(x,y,z) { return (y ^ (x | (~z))); }
	
	function FF(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
	
	function GG(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
	
	function HH(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function II(a,b,c,d,x,s,ac) {
		a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
		return AddUnsigned(RotateLeft(a, s), b);
	}
 
	function ConvertToWordArray(string) {
		var lWordCount;
		var lMessageLength = string.length;
		var lNumberOfWords_temp1=lMessageLength + 8;
		var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
		var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
		var lWordArray= new Array(lNumberOfWords-1);
		var lBytePosition = 0;
		var lByteCount = 0;
		while ( lByteCount < lMessageLength ) {
			lWordCount = (lByteCount-(lByteCount % 4))/4;
			lBytePosition = (lByteCount % 4)*8;
			lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
			lByteCount++;
		}
		lWordCount = (lByteCount-(lByteCount % 4))/4;
		lBytePosition = (lByteCount % 4)*8;
		lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
		lWordArray[lNumberOfWords-2] = lMessageLength<<3;
		lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
		return lWordArray;
	}
 
	function WordToHex(lValue) {
		var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
		for (lCount = 0;lCount<=3;lCount++) {
			lByte = (lValue>>>(lCount*8)) & 255;
			WordToHexValue_temp = "0" + lByte.toString(16);
			WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
		}
		return WordToHexValue;
	}
 
	function Utf8Encode(string) {
		var n;
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	}
 
	var x= new Array();
	var k,AA,BB,CC,DD,a,b,c,d;
	var S11=7, S12=12, S13=17, S14=22;
	var S21=5, S22=9 , S23=14, S24=20;
	var S31=4, S32=11, S33=16, S34=23;
	var S41=6, S42=10, S43=15, S44=21;
 
	string = Utf8Encode(string);
 
	x = ConvertToWordArray(string);
 
	a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
 
	for (k=0;k<x.length;k+=16) {
		AA=a; BB=b; CC=c; DD=d;
		a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
		d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
		c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
		b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
		a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
		d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
		c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
		b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
		a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
		d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
		c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
		b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
		a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
		d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
		c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
		b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
		a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
		d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
		c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
		b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
		a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
		d=GG(d,a,b,c,x[k+10],S22,0x2441453);
		c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
		b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
		a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
		d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
		c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
		b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
		a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
		d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
		c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
		b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
		a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
		d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
		c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
		b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
		a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
		d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
		c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
		b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
		a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
		d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
		c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
		b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
		a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
		d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
		c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
		b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
		a=II(a,b,c,d,x[k+0], S41,0xF4292244);
		d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
		c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
		b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
		a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
		d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
		c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
		b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
		a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
		d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
		c=II(c,d,a,b,x[k+6], S43,0xA3014314);
		b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
		a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
		d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
		c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
		b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
		a=AddUnsigned(a,AA);
		b=AddUnsigned(b,BB);
		c=AddUnsigned(c,CC);
		d=AddUnsigned(d,DD);
	}
 
	var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
 
	return temp.toLowerCase();
};
ent.getClasses = function(item){item = ent.getElement(item);if(ent.isNUN(item) || (typeof item.className !== "string") || (ent.trim(item.className) === "")){return [""];}return item.className.split(/\s+/);};
ent.hasClass = function(item,testClass){item = ent.getElement(item);if(ent.isNUN(item) || (typeof item.className !== "string")){return false;}testClass = ent.trim(testClass);if(testClass === ""){return true;}return (item.className.search("\\b" + testClass + "\\b") !== -1);};
ent.addClass = function(item,newClass){item = ent.getElement(item);if(!ent.isNUN(item) && (typeof item.className === "string")){newClass = ent.trim(newClass);if((newClass !== "") && (newClass.search(/\s/) === -1) && !ent.hasClass(item,newClass)){var classes = ent.cleanUp(item.className);item.className = classes + (classes !== "" ? " " : "") + newClass;}}};
ent.removeClass = function(item,oldClass){item = ent.getElement(item);if(!ent.isNUN(item) && (typeof item.className === "string")){oldClass = ent.trim(oldClass);if((oldClass !== "") && (oldClass.search(/\s/) === -1)){item.className = ent.cleanUp(item.className.replace(new RegExp("\\b" + oldClass + "\\b\\s*","g"),""));}}};
ent.addMember = function(memberName,duplicateAlert,memberItem){
	if(ent.isString(memberName) && !ent.isBlank(memberName)){
		if(ent.isBoolean(duplicateAlert) && (duplicateAlert === true) && !ent.isUndefined(this[memberName])){if(!window.confirm(memberName + " already exists. Continue?")){return null;}}
		if(ent.isUndefined(memberItem)){
			this[memberName] = {};
			this[memberName].entango = true;
			this[memberName].addMember = function(moduleMemberName,moduleDuplicateAlert,moduleMemberItem){ent.addMember.call(this,moduleMemberName,moduleDuplicateAlert,moduleMemberItem);};
		}
		else{this[memberName] = memberItem;}
		return this[memberName];
	}
	return null;
};
Ent.stack = (function(){
	var stacks = {};
	return {
		push: function(item,stack){
			if((typeof stack !== "string") || ( Ent.trim(stack) === "")){stack = "default";}
			if(!stacks.hasOwnProperty(stack)){stacks[stack] = [];}
			stacks[stack].push(item);
		},
		pop: function(stack){
			if((typeof stack !== "string") || ( Ent.trim(stack) === "")){stack = "default";}
			if(stacks.hasOwnProperty(stack)){return stacks[stack].pop();}
		}
	};
}());
Ent.equalsIgnoreCase = function(item1,item2){
	return Ent.getString(item1).toLowerCase() === Ent.getString(item2).toLowerCase();
};
Ent.innerHtml = function(item,html){
	item = Ent.getElement(item);if(item){if(!Ent.isString(html)){item.innerHtml = html;}}
};
Ent.dateHelper = {
	months: [{},{full: "January", abbrev: "Jan"},{full: "February", abbrev: "Feb"},{full: "March", abbrev: "Mar"},{full: "April", abbrev: "Apr"},{full: "May", abbrev: "May"},{full: "June", abbrev: "Jun"},{full: "July", abbrev: "Jul"},{full: "August", abbrev: "Aug"},{full: "September", abbrev: "Sep"},{full: "October", abbrev: "Oct"},{full: "November", abbrev: "Nov"},{full: "December", abbrev: "Dec"}],
	standardDatetimePattern: /\b(\d\d\d\d)-(\d\d)-(\d\d) (\d\d)\:(\d\d)\:(\d\d)\b/,
	standardDatePattern: /\b(\d\d\d\d)-(\d\d)-(\d\d)\b/,
	standardTimePattern: /\b(\d\d)\:(\d\d)\:(\d\d)\b/
};
Ent.getFormFieldValue = function(item,form,someWindow){
	var element,index;
	if(Ent.isBlankString(form)){form = "transact";}
	if(Ent.isString(item)){
		if(Ent.isUndefined(someWindow)){item = document.getElementsByName(Ent.trim(item));}
		else{item = someWindow.document.getElementsByName(Ent.trim(item));}
	}
	else if(Ent.isElement(item)){item = [item];}
	else if(!Ent.isNodeList(item) && !Ent.isArray(item)){item = [];}
	for(index = 0; index < item.length; index++){
		element = item[index];
		if(Ent.isElement(element) && element.form && (element.form.name === form)){
			if(typeof element.tagName === "string"){
				switch(element.tagName.toLowerCase()){
					case "input":
						if(typeof element.type === "string"){
							switch(element.type){
								case "checkbox": case "radio": if(Ent.isChecked(element)){return element.value;} break;
								case "hidden": case "text": return element.value;
							}
						}
					break;
					case "select": if(element.options.length > 0){return element.options[element.selectedIndex].value;} break;
					case "textarea": return element.value;
					// TODO: neeed to handle submit / reset type objects
				}
			}
		}
	}
	return null;
};
Ent.isNodeList = function(item){return Ent.isObject(item) && (typeof item.length === "number") && (typeof item.item === "function");};
}}
else{window.alert("Ent already defined outside Entango code.");}


