b64s='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
b64 = [];
f64 =[];
for (var i=0; i<b64s.length ;i++) {
	b64[i] = b64s.charAt(i);
	f64[b64s.charAt(i)] = i;
}

function atobJS(sInput){
	var sOutput=[]; var i=0;
	sInput=sInput.replace(/\n|\r/g,""); sInput=sInput.replace(/=/g,"");
	while (i<sInput.length){
		sOutput += String.fromCharCode((f64[sInput.charAt(i)]<<2) | (f64[sInput.charAt(i+1)]>>4));
		sOutput += String.fromCharCode((((f64[sInput.charAt(i+1)]&15)<<4) | (f64[sInput.charAt(i+2)]>>2)));
		sOutput += String.fromCharCode((((f64[sInput.charAt(i+2)]&3)<<6) | (f64[sInput.charAt(i+3)])));
		i+=4;
	}
	if (sInput.length%4 == 2)
		sOutput = sOutput.substr(0, sOutput.length-2);
	if (sInput.length%4 == 3)
		sOutput = sOutput.substr(0, sOutput.length-1);
	return sOutput;
	
}

function debugAlert(sAlert){

	if (oDiv=document.getElementById('JSDebugDiv'))
		oDiv.innerHTML=sAlert;
}

function compareOptionAsc(oOption1, oOption2) {
	if (oOption1.sText.toLowerCase() > oOption2.sText.toLowerCase())
		return (1);
	else if (oOption1.sText.toLowerCase() < oOption2.sText.toLowerCase())
		return (-1);
	else
		return (0);
}

function sortSelect(oSelect) {

	aOptions = [];
	for (i=0; i < oSelect.options.length; i++) {
		aOptions[i] = { 
			sText:oSelect.options[i].text, 
			sValue:oSelect.options[i].value 
		};
	}

	aOptions.sort(compareOptionAsc);

	for (i=0; i < oSelect.options.length; i++) {
		oSelect.options[i].text = aOptions[i].sText;
		oSelect.options[i].value = aOptions[i].sValue;
	}
}

function ensureNumeric(oInput){
	oInput.value=oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : oInput.value);
	oInput.value=(oInput.value*1).toFixed(2);
}

function ensurePositiveNumeric(oInput){
	oInput.value=oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : oInput.value);
	if (oInput.value <0)
		oInput.value=0;
	oInput.value=(oInput.value*1).toFixed(2);
}

function ensureInteger(oInput){
	oInput.value=oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : parseInt(oInput.value));
}

function ensurePositiveInteger(oInput){
	oInput.value=oInput.value.replace(",",".");
	oInput.value=(isNaN(oInput.value) ? 0 : parseInt(oInput.value));
	if (oInput.value <0)
		oInput.value=0;
}

function ensureDate(oInput){
}

function ensureEmail(oInput){
	if (!(/^\w+([\.-]?\w+)*(\.\w{2,5})+$/.test(oInput.value)))
		oInput.value='invalid.email@nonexistent.domain';
}

function varByName(sName){
	return eval('(window.'+sName+')?'+sName+':null');
}
