function _checkunload(windowname) {
	if (windowname && !windowname.closed) {windowname.close();}
}

function _checkLoggedIn(URLReturn) {	
	if (!eval('top.header')) {top.location=URLReturn;}	
}	
function _add2Favorite(url, who) {
	window.external.AddFavorite(url,who);
}
function _cboValue(strListboxName) {
	objListbox=_getObject(strListboxName);
	return objListbox.options[objListbox.selectedIndex].value;
}

function _fileExist( filepath )
{
	filepath = replace(filepath, "\"", "/")
	var fso=new ActiveXObject("scripting.filesystemobject")
	//return fso.FileExists(filepath);
	return fso.Filesize(filepath);
}

function _getRight(strInput, strSeparator) {
//return tring from 'strInput' from right to left until matches 'strSeparator'
	InputLen=strInput.length;
	strGet="";
	iChar=0;
	aChar = new Array;
	for (iLen=InputLen-1;iLen>=0;iLen--) {
		strChar=strInput.substr(iLen,1);
		if (strChar!=strSeparator) {
			aChar[iChar]=strChar;
			iChar++;
		} else break;
	}
	if (aChar.length>0) {
		for (iChar=aChar.length-1;iChar>=0;iChar--) {
			strGet+=aChar[iChar];
		}
	}
	return strGet;
}

function _getcboDate(strcboDay, strcboMonth, strcboYear) {
	objDay=_getObject(strcboDay);
	objMonth=_getObject(strcboMonth);
	objYear=_getObject(strcboYear);
	vDay=objDay.options[objDay.selectedIndex].value;
	vMonth=objMonth.options[objMonth.selectedIndex].value;
	vYear=objYear.options[objYear.selectedIndex].value;
	vDate=vDay + "/" + vMonth + "/" + vYear;
	return vDate;
}

function _submitform(strURL, strTarget) {
	frmname="document." + document.forms[0].name;
	objform=eval(frmname);
	objform.action=strURL;
	objform.target=strTarget;
	objform.submit();
}

function _changedate(strdate,separatorSource,separatorTarget) {
returnValue="";
if (strdate!="") {
        adate=strdate.split(separatorSource);
        if (adate.length==3) {
                returnValue=adate[2] + separatorTarget + adate[1] + separatorTarget + adate[0];
        }
}
return returnValue;
}

function _checkAll(strCheckboxName, intObjNumber, intvalue) {
	formname="document." + document.forms[0].name;
	if (intObjNumber>=0) {
		for (var i=0;i<intObjNumber;i++) {
			chk=formname + "." + strCheckboxName + i;
			ochk=eval(chk);
			if(ochk){
				if (intvalue==1) ochk.checked=true;
				else ochk.checked=false; 
			}
		}
	}
}

function _ischecked(strCheckboxName, intObjNumber) {
	if (intObjNumber>=0) {  
		for (var i=0;i<intObjNumber ;i++) {	
			formname="document." + document.forms[0].name;
			chk=formname + "." +strCheckboxName + i;
			ochk=eval(chk);
			if (ochk.checked==true) {		
				return true;
				break;
			}
		}		
		return false;
	}		
}

function _isvalidinput(strinput,straccept, fieldname) {
//check each element of 'strinput' is match each element of 'straccept' or not
//straccept string content acceptable characters
	var icut,i;
	inputLen = strinput.length;
	for (i=0;i<inputLen;i++){
		icut=strinput.substr(i,1);
		ipos=straccept.indexOf(icut);
		if (ipos==-1) {
			alert("Invalid " + fieldname + " data, please re-enter.");
			return false;
			break;
		}
	}
	return true;
}
function _strsearch(strsearched,strinput) {
//return true if found strsearched in strinput	
	return (strinput.indexOf(strsearched)!=-1)? true:false;
}
function _isinvalidinput(strinput,strunaccept, fieldname) {
//check each element of 'strinput' is match each element of 'straccept' or not
//straccept string content acceptable characters
	var icut,i;
	unacceptLen = strunaccept.length;
	for (i=0;i<unacceptLen;i++){
		icut=strunaccept.substr(i,1);
		ipos=strinput.indexOf(icut);
		if (ipos!=-1) {
			alert("Invalid " + fieldname + " data, please re-enter.");
			return true;
			break;
		}
	}
	return false;
}

function replace(string,strsearch,replacement) {
        lLen=string.length;
        lCut=strsearch.length;
        newstring="";
        for (i=0;i<lLen;i++) {
                mMidSearch=string.substr(i,lCut);
                mMid=string.substr(i,1);
                if (mMidSearch==strsearch) {
                        mMid = replacement;
                        i = i + (lCut-1);
                }
                newstring+=mMid;
        }
        return newstring;
}

function trim(text) {
	if (text=="" || text==null) return "";	
	pos1=0;
	pos2=text.length;
	for(i=0;i<=text.length-1;i++) {
		if (text.substr(i,1)==" ") pos1=i+1;
		else break;}
	for(i=text.length-1;i>=0;i--) {
		if(text.substr(i,1)==" ") pos2=i;
		else break;}
	if (pos2<pos1) return "";	
	return text.substr(pos1,pos2-pos1);
}

function isdate(s) {
//date format "dd/mm/yyyy"
	if (s =="") return false;
	var atmp,ii;
	atmp = s.split("/");
	if (atmp.length != 3) return false;
	for (ii=0; ii<atmp.length ;ii++) {
		if (isNaN(atmp[ii])) return false;
		else {
			switch (ii) {
				case 0,1: //month
					if (atmp[ii].length <= 0 || atmp[ii].length > 2) {return false;}
					if (parseFloat(atmp[0])<=0 || parseFloat(atmp[1])<=0) {return false;}
					switch (parseFloat(atmp[1])) {
						case 4:
						case 6:
						case 9:
						case 11:
							if (parseFloat(atmp[0]) > 30) return false;
							break;
						case 2:
							if (parseFloat(atmp[2])%4 == 0 )
								{if (parseFloat(atmp[0]) > 29) return false;}
							else
								{if (parseFloat(atmp[0]) > 28) return false;}
							break;
						default:
							if (atmp[1] <=0 || atmp[1]>12) return false;
							if (parseFloat(atmp[0]) > 31) return false;
					}
					break;
				case 2: //year
					if (atmp[ii].length != 4 || parseFloat(atmp[ii])<1900) {return false;}
			}
		}
	}
	return true;
}

function isempty(str, field) {	

	atmp = str.split(String.fromCharCode(32));
	for (ii=0; ii< atmp.length;ii++ ) {
		if (atmp[ii] != "") {
			return false;			
		}
	}
	alert("Please input data into the " + field + " field.");
	return true;
}
function _isnumber(strinput, fieldname) {
	if (isNaN(strinput) == true) {				
		alert("Invalid " + fieldname + " format. Please ensure the data is numeric.");		
		return false;
	} else if (_isvalidinput(strinput,"0123456789.,",fieldname)==false) {
			return false;}
	return true;
}

function isemail(string)
{	
	var pos1,pos2,pos3,pos4;
	var strinvalid = "`~!#$%^&*()+={}[]|\:;'\",<>?/";
	pos1=string.indexOf("@");	
	pos2=string.indexOf(" ");
	pos3=string.indexOf(".");
	
	if ( (pos1 == -1) || (pos2!= -1) || (pos3 == -1))
	{
		alert("Invalid email address.");
		return false;
	}
	
	aassign=string.split("@");
	adoubledot=string.split("..");
	aassigndot=string.split("@.");
	adotassign=string.split(".@");
	if (aassign.length>2 || adoubledot.length>1 || aassigndot.length>1 || adotassign.length>1) {
		alert("Invalid email address");
		return false;
	}
	
	if (_getRight(string, ".")=="") {
		alert("Invalid email address");
		return false;
	}
	
	strinvalidLen = strinvalid.length;
	for (i=0;i<strinvalidLen;i++){
		icut=strinvalid.substr(i,1);
		ipos=string.indexOf(icut);
		if (ipos!=-1) {
			alert("Invalid email address");
			return false;
			break;
		}
	}		
	return true;
}

function _getAction() {
//get action in form
	strAction=document.location.pathname;
	return _getRight(strAction,"/");
}

function MM_nbGroup(event, grpName) { //v3.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : args[i+1];
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    if ((nbArr = document[grpName]) != null)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = args[i+1];
      nbArr[nbArr.length] = img;
  } }
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function norightclick(e)  // This function is used by all others
{
	if (window.Event)  // again, IE or NAV ?
		{
			if (e.which == 2 || e.which == 3)
			return false;
		} else
			if (event.button == 2 || event.button == 3)	{
				event.cancelBubble = true;
				event.returnValue = false;
				return false;}
}

function _getObject(strObject) {
//get an object in form by 'strObject' name
var i, objnum, ielement, frmlen;
var obj=null;
	frmname="document." + document.forms[0].name;
	objform=eval(frmname);
	objnum=objform.length;
	for (ielement=0;ielement<objnum;ielement++) {		
		ElementName=objform.elements[ielement].name;
		if (ElementName==strObject) {
			obj=objform.elements[ielement];
			break;
		}
	}
	return obj;
}
function _SelectAllListbox(strListbox, lbstatus) {
	obj = _getObject(strListbox);
	objLen = obj.options.length;
	if (objLen>0) {
		for (iLen=0; iLen< objLen; iLen++) {
			obj.options[iLen].selected=(lbstatus==0)? false:true;
		}
	}	
}
function _setnulllistbox(objlistbox) {
	listboxlen=objlistbox.options.length;
	if (listboxlen>0) {
		for (ilen=listboxlen-1; ilen>=0; ilen--) {
			objlistbox.options[ilen]=null;
		}
	}
}

function _setvalue2listbox(avalue, objlistbox) {
	listboxlen=objlistbox.options.length;
	nvalue=avalue.length;
	if (nvalue>0) {
		for (ivalue=0;ivalue<nvalue;ivalue++) {
			objlistbox.options[ivalue]=new Option(avalue[ivalue].text,avalue[ivalue].value);
		}
	}	
	objlistbox.options[0].selected=true;
}

function _moveItem(strlistFrom, strlistTo) {
/* 
	this function enable you remove All Item from strlistFrom to strlistTo
	Parameter : strlistFrom, strlistTo
	Format : strlistFrom = "<listboxname>"	(Listbox will be move Item)
	strlistTo = "<listboxname>" (Listbox will receive Item)
*/
var iFrom, nFrom, nextStep;
	var listFrom, listTo;
	var frmname, LbselectedIndex;
	var nItems = -1;
	frmname="document." + document.forms[0].name;
	listFrom=eval(frmname + "." + strlistFrom);
	listTo=eval(frmname + "." + strlistTo);
	nFrom = listFrom.options.length;
	nTo = listTo.options.length;
	LbselectedIndex = listFrom.selectedIndex;
	nextStep=LbselectedIndex;
	if (LbselectedIndex==(nFrom - 1)) {nextStep=LbselectedIndex-1;}
	if (LbselectedIndex==-1) {
		alert("Please select item(s) to move.");
		listFrom.focus();
		listFrom.selectedIndex=0;
		return;
	}
	var aItems = new Array();
	for (iFrom=0;iFrom<nFrom;iFrom++) {
		if (listFrom.options[iFrom].selected==true) {
			nItems++;
			aItems[nItems] = iFrom;
			listFrom.options[iFrom].selected = false;
		}
	}
	if (nItems>=0) {
		for (iItem=0;iItem<=nItems;iItem++) {			
			lbselectedItem = aItems[iItem];
			lbtext = listFrom.options[lbselectedItem].text;
			lbvalue = trim(listFrom.options[lbselectedItem].value);
			nTo = listTo.options.length;
			if (nTo==0) {listTo.options[0] = new Option(lbtext,lbvalue);}
			else {listTo.options[nTo] = new Option(lbtext,lbvalue);}		
		}
		for (iItem=nItems;iItem>=0;iItem--) {
			lbselectedItem = aItems[iItem];
			listFrom.options[lbselectedItem]= null;	
		}
	}	
	if (nFrom>0) {
		listFrom.selectedIndex=nextStep;
		listFrom.focus();}
}


function _moveAllItem(strlistFrom, strlistTo) {
/* 
this function enable you remove All Item from strlistFrom to strlistTo
Parameter : strlistFrom, strlistTo
Format : strlistFrom = "<listboxname>"	(Listbox will be move Item)
strlistTo = "<listboxname>"	(Listbox will receive Item)
*/
	listFrom=_getObject(strlistFrom);
	nFrom = listFrom.options.length;
	listTo=_getObject(strlistTo);
	nTo = listTo.options.length;
	if (nFrom==0) {
		alert("There is no item to move");
		return;}
	for (iFrom=0;iFrom<nFrom;iFrom++) {
		listFrom.selectedIndex=0;
		text = listFrom.options[0].text;
		value=listFrom.options[0].value;
		if (nTo==0) {listTo.options[0] = new Option(text,value);}
		else {listTo.options[nTo] = new Option(text,value);}
		listFrom.options[0]=null;
		nTo = listTo.options.length;
	}
}

function _moveItemsDown(strlistbox) {
	if (_isselected(strlistbox)==false)
	{
		alert("Please select Item(s) to move");
		return;
	}
	select=_getObject(strlistbox);	
	var max;
	var selected = new Array();
	var j = 0;
	max = select.options.length;
	for (i=0; i<max; i++) {
		if (select.options[i].selected == true) {
			selected[j] = i;
			j++;
		}
	}
	if (selected[j-1] < max-1) {
		for (j=selected.length-1; j>=0 ; j--) {_sortItem(select, selected[j],"DOWN");}
	}
}

function _moveItemsUp(strlistbox) {
	if (_isselected(strlistbox)==false)
	{
		alert("Please select Item(s) to move");
		return;
	}
	select=_getObject(strlistbox);
	var selected = new Array();
	var j = 0;
	max = select.options.length;
	for (i=0; i<max; i++) {
		if (select.options[i].selected == true) {
			if (i==0) break;
			if (i > 0) {selected[j] = i;j++;}
		}
	}
	for (j=0 ; j<selected.length ; j++) {_sortItem(select, selected[j],"UP");}
}

function _sortItem(select, index, moveoption) {
	if (moveoption!="" && (moveoption.toUpperCase()=="UP" || moveoption.toUpperCase()=="DOWN")) {
		max = select.options.length;
		if (index == null) index = select.selectedIndex;
		if (moveoption.toUpperCase()=="UP") {
			if ( (max <= 1) || (index <= 0) || (index >= max) ) return;
			var switchindex = index-1;
		}
		if (moveoption.toUpperCase()=="DOWN") {
			if ( (max <= 1) || (index < 0) || (index >= (max-1)) ) return;
			var switchindex = index+1;
		}		
		var tmp=select.options[switchindex].text;
		var val=select.options[switchindex].value;
		select.options[switchindex].text=select.options[index].text;
		select.options[switchindex].value=select.options[index].value;
		select.options[index].text=tmp;
		select.options[index].value=val;
		select.options[index].selected=false;
		select.options[switchindex].selected=true;
	}	
}

function _CF_checknumber(object_value) {
	//Returns true if value is a number or is NULL
	//otherwise returns false	  
	if (object_value.length == 0) return true;
	//Returns true if value is a number defined as  
	//  having an optional leading + or -.  
	//  having at most 1 decimal point.  
	//  otherwise containing only the characters 0-9.	
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;
	//The first character can be + - . blank or a digit.	
	check_char = start_format.indexOf(object_value.charAt(0));
	//Was it a decimal?
	if (check_char == 1) decimal = true;
	else if (check_char < 1) return false;
	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++) {
		check_char = number_format.indexOf(object_value.charAt(i));
		if (check_char < 0) return false;
		else if (check_char == 1) {
				if (decimal)
	// Second decimal.
				return false;
				else decimal = true;}
			else if (check_char == 0)
				{
					if (decimal || digits)	trailing_blank = true;
	//ignore leading blanks
				} else if (trailing_blank) return false;
						else digits = true;
			}
	//All tests passed, so...
	return true;
}

function _CF_checkinteger(object_value) {
	//Returns true if value is a number or is NULL
	//otherwise returns false
		if (object_value.length == 0) return true;
	//Returns true if value is an integer defined as
	//  having an optional leading + or -.
	//  otherwise containing only the characters 0-9.
		var decimal_format = ".";
		var check_char;
	//The first character can be + - blank or a digit.
		check_char = object_value.indexOf(decimal_format);
	//Was it a decimal?
		if (check_char < 1)
			return _CF_checknumber(object_value);
		else return false;
}

function isblank(s)
{
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

function emailCheck(txt) 
{
	if (txt.indexOf("@")<3)
	{
		alert("I'm sorry. This email address seems wrong. Please"
				+" check the prefix and '@' sign.");
		return false;
	}
	if ((txt.indexOf(".com")<5)&&(txt.indexOf(".org")<5)
		&&(txt.indexOf(".gov")<5)&&(txt.indexOf(".net")<5)
		&&(txt.indexOf(".mil")<5)&&(txt.indexOf(".edu")<5))
	{
		alert("I'm sorry. This email address seems wrong. Please"
				+" check the suffix for accuracy. (It should include a "
				+".com, .edu, .net, .org, .gov or .mil)");
		return false;
   }
   return true;
}

