
// Common Functions Library ----------------------------------------------------

// Configurations:

// Page navigation
var htmlGoBack = '&lt;&lt;';
var htmlGoNext = '&gt;&gt;';


function leadZero(n, units) {
	var sN = new String(n);
	var i, sRet = sN;
	for (i=sN.length; i<units; i++) {
		sRet = '0' + sRet;
	}
	return sRet;
}

function displayDate(dDate) {
	var today;
	if (dDate)
		today = new Date(dDate);
	else
		today = new Date(); 
	var dow = new Array('Ch&#7911; Nh&#7853;t','Th&#7913; Hai','Th&#7913; Ba','Th&#7913; T&#432;','Th&#7913; N&#259;m','Th&#7913; S&#225;u','Th&#7913; B&#7843;y');
	var months = new Array('01','02','03','04','05','06','07','08','09','10','11','12');
	var year = today.getYear();
	year = (year <= 1888) ? (1900 + year) : year;
	document.write(dow[today.getDay()] + ' ng&#224;y ' + today.getDate() + '/' + months[today.getMonth()] + '/' + year + ', ' + leadZero(today.getHours(), 2) + 'h' + leadZero(today.getMinutes(), 2) + ' GMT+7');
}

function displayPageNavigator(scriptName, queryString, currentOffset, pageCount, recordCount) {
	var previousOffset, nextOffset, offsetBegin, offsetEnd, nPage;
	currentOffset = currentOffset == '' ? 0 : currentOffset/1;
	pageCount = pageCount == '' ? 1 : pageCount/1;
	recordCount = recordCount == '' ? 0 : recordCount/1;
	if (currentOffset - 5 > 1) {
		if (currentOffset + 5 <= pageCount)
			offsetBegin = currentOffset - 5;
		else {
			if (pageCount - 10 >= 1)
				offsetBegin = pageCount - 10;
			else
				offsetBegin = 1;
		}
	} else
		offsetBegin = 1;
	
	if (offsetBegin + 10 < pageCount)
		offsetEnd = offsetBegin + 10;
	else
		offsetEnd = pageCount;
	
	if (currentOffset - 1 > 1)
		previousOffset = currentOffset - 1;
	else
		previousOffset = 1;
	
	if (currentOffset + 1 < pageCount)
		nextOffset = currentOffset + 1;
	else
		nextOffset = pageCount;
	
	
	var html = '';
	
	html += '<span class=SearchNavigation>';
	html += '<a href="' + scriptName + '?' + queryString + '&offs=' + previousOffset + '">' + htmlGoBack + '</a>&nbsp;';
	for (nPage=offsetBegin; nPage<=offsetEnd; nPage++) {
		if (nPage-currentOffset == 0)
			html += '<span class=SearchNavigationOffset>' + nPage + '</span>';
		else
			html += '<a href="' + scriptName + '?' + queryString + '&offs=' + nPage + '">' + nPage + '</a>';
		html += '&nbsp;';
	}
	html += '<a href="' + scriptName + '?' + queryString + '&offs=' + nextOffset + '">' + htmlGoNext + '</a>';
	html += '</span>';
	document.write(html);
}

var ppimgNW;
function popupImage(src, note, title, css, border) {
	if (border==null) border = 0;
	if (note==null) note = '';
	if (ppimgNW != null) ppimgNW.close();

	ppimgNW = window.open('','POPUPIMAGE','width=1,height=1');
	var doc = ppimgNW.document;
	doc.write('<html>');
	doc.write('<head>');

	if (title!=null) doc.write('<title>'+ title +'</title>');
	doc.write('<style> body {'+css+'} #ppImgText{'+ css +'} #ppImg{cursor:hand}</style></head>');
	doc.write('<body leftmargin="0" topmargin="' + border + '" onload="doResize();">');
	doc.write('<div align="center">');
	doc.write('<img src="' + src + '" id="ppImg" onclick="self.close();" title="Close">');
	doc.write('</div>');
	doc.write('<div style="height:1; width:' + border + '; font-size:4pt;">');
	doc.write('</div>');
	doc.write('<div id="ppImgText" align="center">');
	doc.write(note);
	doc.write('</div>');
	doc.write('</body>');
	doc.write('</html>');

	doc.write('<' + 'script>');
	doc.write('function doResize() {');
	doc.write('	var imgW = ppImg.width, imgH = ppImg.height;');		 
	doc.write('	window.resizeTo(imgW + 8 +' + border*2 +', imgH + ppImgText.offsetHeight + 26 + '+ border*2 +');');
	doc.write('	setTimeout(\'doResize()\', 1000);');
	doc.write('}');
	doc.write('doResize(); ');
	doc.write('</' + 'script>');


}

// Restrict input alphabetic letters only ////////////////
// USAGE: onKeyPress="checkAlphabetic();"
function checkAlphabetic() {
	if ((event.keyCode >= 65 && event.keyCode <= 90) || (event.keyCode >= 65+32 && event.keyCode <= 90+32))
		return; 
	else
		event.returnValue = null;
}

// Restrict input numeric letters only /////////////////
// USAGE: onKeyPress="checkNumeric();"
function checkNumeric() {
	if ( (event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 46 )	// 0-9 and "."
		return; 
	else
		event.returnValue = null;
}

// Restrict input numeric letters only /////////////////
// USAGE: onKeyPress="checkPhone();"
function checkPhone() {
	if ( (event.keyCode >= 48 && event.keyCode <= 57) || event.keyCode == 32 || event.keyCode == 45)	// 0-9 and "."
		return; 
	else
		event.returnValue = null;
}

function checkNSX() {
	if ( (event.keyCode >= 44 && event.keyCode <= 47) || event.keyCode == 58 || event.keyCode == 59 || event.keyCode == 92 || event.keyCode == 95 || event.keyCode == 124)	// ",-./:;\_|"
		event.returnValue = null;		
	else
		return;
}

function hasChars(str, charStr) {
	var i;
	for (i=0; i<charStr.length; i++) {
		if (str.indexOf(charStr.charAt(i)) >= 0)
			return true;
	}
	return false;
}

function isEmail(str) {
	iAt = str.indexOf('@');
	iDot = str.lastIndexOf('.');
	return (iAt>=0 && iDot>=0 && iAt<iDot);
}

function isUsername(str) {
	return !hasChars(str, ' ~!@#$%^&*()+|=\\{}[]:";\'<>?,./');
}

function isPassword(str) {
	return !hasChars(str, ' ~!@#$%^&*()+|=\\{}[]:";\'<>?,./');
}



function csv2Array(str, separator) {
	if (!separator) separator = ',';
	return str.split(separator);
}

function items2Array(sItems) {
	var index = 0, aRet = new Array();
	var i, a = sItems.split(';');
	for (i=0; i<a.length; i++) 
		if (a[i] != '') {
			var b = a[i].split('=');
			aRet[index++] = b[0];
			aRet[index++] = b[1];
		}
	return aRet;
}

function searchArray(arr, val) {
	if (arr)
		{
			var i;
			for (i=0; i<arr.length; i++)
				if (arr[i] == val)
					return i;
		}
	return -1;
}

function getName(aArgs, sValue) {
	for (i=0; i<aArgs.length-1; i+=2) {
		if (sValue == aArgs[i+1])
			return aArgs[i];
	}
	return null;
}

function getSelect(sName, args, sSelect, sAttr) {
	var strHTML = '';
	var aArgs;
	if (typeof(args) == 'string')
		aArgs = items2Array(args);
	else
		aArgs = args;
	strHTML += '<select name="' + sName + '" ' + (sAttr==null ? '' : sAttr) + '>';
	for (i=0; i<aArgs.length; i+=2) {
		if (sSelect == aArgs[i+1])
			strHTML += '<option' + (aArgs[i+1]!=null ? ' value="' + aArgs[i+1] + '"' : '') + ' selected>' + aArgs[i] + '</option>\r\n';
		else
			strHTML += '<option' + (aArgs[i+1]!=null ? ' value="' + aArgs[i+1] + '"' : '') + '>' + aArgs[i] + '</option>\r\n';
	}
	strHTML += '</select>';
	return strHTML;
}

function writeSelect(sName, aArgs, sSelect, sAttr) {
	document.write(getSelect(sName, aArgs, sSelect, sAttr));
}

function getSingleChoices(sName, args, selectedValue, sType, sAttr) {
	var html = '';
	var aArgs;
	if (typeof(args) == 'string')
		aArgs = items2Array(args);
	else
		aArgs = args;
	
	if (sType == 'radio') {
		for (i=0; i<aArgs.length; i+=2)
			html += '<input type=radio name="'+ sName +'" ' + (aArgs[i+1]!=null ? ' value="' + aArgs[i+1] + '"' : '') + ' ' + (aArgs[i+1] == selectedValue ? 'checked' : '') + '>' + aArgs[i] + '&nbsp;&nbsp;\r\n';
	} else if (sType == 'select') {
		html = '<select name="' + sName + '" ' + (sAttr==null ? '' : sAttr) + '>';
		for (i=0; i<aArgs.length; i+=2)
			html += '<option value="' + aArgs[i+1] + '" ' + (aArgs[i+1] == selectedValue ? 'selected' : '') + '>' + aArgs[i] + '</option>\r\n';
		html += '</select>';
	}

	return html;
}

function getMultiChoices(sName, args, selectedValues, sType, sAttr) {
	var html = '';
	var aArgs, aSelectedValues;
	if (typeof(args) == 'string')
		aArgs = items2Array(args);
	else
		aArgs = args;
	if (typeof(selectedValues) == 'string')
		aSelectedValues = csv2Array(selectedValues, ';');
	else
		aSelectedValues = selectedValues;
	if (sType == 'checkbox') {
		for (i=0; i<aArgs.length; i+=2)
			html += '<input type=checkbox name="'+ sName +'" ' + (aArgs[i+1]!=null ? ' value="' + aArgs[i+1] + '"' : '') + ' ' + (searchArray(aSelectedValues, aArgs[i+1]) >= 0 ? 'checked' : '') + '>' + aArgs[i] + '&nbsp;&nbsp;\r\n';
	} else if (sType == 'select') {
		html = '<select name="' + sName + '" multiple ' + sAttr + '>';
		for (i=0; i<aArgs.length; i+=2)
			html += '<option value="' + aArgs[i+1] + '" ' + (searchArray(aSelectedValues, aArgs[i+1]) >= 0 ? 'selected' : '') + '>' + aArgs[i] + '</option>\r\n';
		html += '</select>';
	}
	return html;
}

function writeSingleChoices(sName, args, selectedValue, sType, sAttr) {
	document.write(getSingleChoices(sName, args, selectedValue, sType, sAttr));
}

function writeMultiChoices(sName, args, selectedValues, sType, sAttr) {
	document.write(getMultiChoices(sName, args, selectedValues, sType, sAttr));
}

function writeDayMonthYear(name, d, m, y) {
	d = d=='' ? '*' : d;
	m = m=='' ? '*' : m;
	y = y=='' ? '*' : y;
	document.write('<input type="hidden" name="'+ name +'" value="'+m+'/'+d+'/'+y+'">');
	document.write('<input type="hidden" name="'+ name +'_vn" value="'+d+'/'+m+'/'+y+'">');
	writeSelect(name + '_fpt_wdmy_d', new Array('1','1','2','2','3','3','4','4','5','5','6','6','7','7','8','8','9','9','10','10','11','11','12','12','13','13','14','14','15','15','16','16','17','17','18','18','19','19','20','20','21','21','22','22','23','23','24','24','25','25','26','26','27','27','28','28','29','29','30','30','31','31'), d, 
		'onclick="document.all(\''+ name +'\').value = document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"' +
		'onchange="document.all(\''+ name +'_vn\').value = document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"');
	document.write('&nbsp');
	writeSelect(name + '_fpt_wdmy_m', new Array('Jan.','1','Feb.','2','Mar.','3','Apr.','4','May','5','Jun.','6','Jul.','7','Aug.','8','Sep.','9','Oct.','10','Nov.','11','Dec.','12'), m, 
		'onclick="document.all(\''+ name +'\').value = document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"' +
		'onchange="document.all(\''+ name +'_vn\').value = document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"');
	document.write('&nbsp');
	writeSelect(name + '_fpt_wdmy_y', new Array(1960,1960,1961,1961,1962,1962,1963,1963,1964,1964,1965,1965,1966,1966,1967,1967,1968,1968,1969,1969,1970,1970,1971,1971,1972,1972,1973,1973,1974,1974,1975,1975,1976,1976,1977,1977,1978,1978,1979,1979,1980,1980,1981,1981,1982,1982,1983,1983,1984,1984,1985,1985,1986,1986,1987,1987,1988,1988,1989,1989,1990,1990,1991,1991,1992,1992,1993,1993,1994,1994,1995,1995,1996,1996,1997,1997,1998,1998,1999,1999,2000,2000,2001,2001,2002,2002,2003,2003,2004,2004,2005,2005,2006,2006,2007,2007,2008,2008), y, 
		'onclick="document.all(\''+ name +'\').value = document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"' +
		'onchange="document.all(\''+ name +'_vn\').value = document.all(\'' + name + '_fpt_wdmy_d\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_m\').value + \'/\' + document.all(\'' + name + '_fpt_wdmy_y\').value;"');
}

// VanHNN <vanhnn@hcm.fpt.vn>
// End -------------------------------------------------------------------------