function trim ( str ) {
	return str.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
}

function obtainNmscXmlHttpRequest () {
	if ( window.XMLHttpRequest && !(window.ActiveXObject) ) { // for firefox & safari
		try {
			window.nmscXmlHttpReq = new XMLHttpRequest();
		} catch(e) {
			window.nmscXmlHttpReq = false;
		}
	} else if ( window.ActiveXObject ) { // for IE
		try {
			window.nmscXmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				window.nmscXmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				window.nmscXmlHttpReq = false;
			}
		}
	}
}

function validateInt ( value ) {
	var re = /^[0-9]+$/;
	return re.test(value);
}

function validateUsername ( usr ) {
	var re = /^[a-zA-Z0-9]+$/;
	return re.test(usr);
}

function validateEmail ( str ) {
	return (str.indexOf("@") >= 1) && (str.indexOf(".") >= 3);
}

function validateZipCode ( code ) {
	var re = /^\d{5}$|^\d{5}-\d{4}$/;
	return re.test(code);
}

function validatePhone ( phone ) {
	var re = /^(\(\d{3}\)\s*|\d{3}\-)?\d{3}\-\d{4}/;
	return re.test(phone);
}

function validatePin ( pin ) {
	var re = /\d{4,6}/;
	return re.test(pin);
}

// base64 encoding
function base64encode ( input ) {
	var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var output = "";
	var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
	var i = 0;

	//input = Base64._utf8_encode(input);

	while ( i < input.length ) {

		chr1 = input.charCodeAt(i++);
		chr2 = input.charCodeAt(i++);
		chr3 = input.charCodeAt(i++);

		enc1 = chr1 >> 2;
		enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		enc4 = chr3 & 63;

		if ( isNaN(chr2) ) {
			enc3 = enc4 = 64;
		} else if ( isNaN(chr3) ) {
			enc4 = 64;
		}

		output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);

	}

	return output;
}
