/*
return element object by Id
@param string, object Id
@return element object
*/
function elId(id){return document.getElementById(id);}

/*
return element object by name
@param string, object name
@return element object
*/
function elName(name){return document.getElementByName(name);}

/**
 * trim value
 * @param string strToTrim. value to be trim.
 * @return string
 */
function trim(strToTrim)
{
	return strToTrim.replace(/^\s+|\s+$/g,"");
}

/**
 * set object visibility
 * @param string strObjName. object name.
 * @param boolean blnShow. true=visible | false=collapse
 */
function setObjVisibility(strObjName, blnShow)
{	
	var obj = elId(strObjName);
	if(obj == null) return;

	var strVisibleValue ;
//	if(blnShow == 'true') strVisibleValue = 'visible';
//	else strVisibleValue = 'collapse';
//	obj.style.visibility = strVisibleValue;
	
	if(blnShow == 'true')
	{
		obj.style.display = '';
		obj.style.visibility = 'visible';		
	}
	else obj.style.display = 'none';
}

/**
 * set object Div msg
 * @param string strObjName. regex.
 * @param string strMsg. msg
 * @param string strClassName. css class name
 */
function setDivMsg(strObjName, strMsg, strClassName)
{
	var obj = elId(strObjName);
	if(obj == null) return;
	if(typeof(strClassName) != 'undefined' && strClassName.length > 0) 
	{
		strMsg = "<span class='" + strClassName +"'>" + strMsg + "</span>";
	}
	obj.innerHTML  = strMsg;
}

/*
* Do submit
*/
function doSubmit(objCtrl)
{
	objCtrl.form.submit();
}

/*
* Do Client site language translation
*/
function lang(strKey)
{
	var translation = eval(strKey);
	if(translation == '') return strKey;
	return translation;
}

function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}


/*
* Include a js file in a js file. same as includeJs2 
*/
function includeJs(strUrl)
{
	var str = '<script type="text/javascript" src="' + strUrl + '"></script>';
	document.write(str); 
}

/*
* Include a js file in a js file. same as includeJs 
*/
function includeJs2(strUrl)
{
	var body = document.getElementsByTagName('body').item(0);
	script = document.createElement('script');
	script.src = strUrl;
	script.type = 'text/javascript';
	body.appendChild(script);
}

function popWin(url, h, w) 
{
	var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

	if(typeof(h) == 'undefined') h = 600;
	if(typeof(w) == 'undefined') w = 700;
	
	if (is_chrome)
	{
		w=window.open('about:blank', "W958b6e9ea6bed1f9c5288b15959dad77", "left=150,top=120,menubar=no,height="+h+",width="+w+",scrollbars=yes,resizable=yes");
		w.opener = null;
		w.document.location = url;
	}
	else
	{
		w=window.open(url, "W958b6e9ea6bed1f9c5288b15959dad77", "left=150,top=120,menubar=no,height="+h+",width="+w+",scrollbars=yes,resizable=yes");
	}
	w.focus();
} 

<!--
/*
 * cookie.js - mainly manipulate cookie handling which similar to backend php
 * Secondly manipulate serialize, url, security
 */
//serialize object
//Source from : http://www.coolcode.cn/andot/javascript-php-serialize-unserialize/171
//Source from : http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt
var core_serialize = {
	serialize:function(o){
		var p = 0, sb = [], ht = [], hv = 1;
		var classname = function(o) {
			if (typeof(o) == 'undefined' || typeof(o.constructor) == 'undefined') return '';
			var c = o.constructor.toString();
			c = core_serialize.utf16to8(c.substr(0, c.indexOf('(')).replace(/(^\s*function\s*)|(\s*$)/ig, ''));
			return ((c == '') ? 'Object' : c);
		};
		var is_int = function(n) {
			var s = n.toString(), l = s.length;
			if (l > 11) return false;
			for (var i = (s.charAt(0) == '-') ? 1 : 0; i < l; i++) {
				switch (s.charAt(i)) {
					case '0':
					case '1':
					case '2':
					case '3':
					case '4':
					case '5':
					case '6':
					case '7':
					case '8':
					case '9': break;
					default : return false;
				}
			}
			return !(n < -2147483648 || n > 2147483647);
		};
		var in_ht = function(o) {
			for (var k in ht) if (ht[k] === o) return k;
			return false;
		};
		var ser_null = function() {
			sb[p++] = 'N;';
		};
		var ser_boolean = function(b) {
			sb[p++] = (b ? 'b:1;' : 'b:0;');
		};
		var ser_integer = function(i) {
			sb[p++] = 'i:' + i + ';';
		};
		var ser_double = function(d) {
			if (isNaN(d)) d = 'NAN';
			else if (d == Number.POSITIVE_INFINITY) d = 'INF';
			else if (d == Number.NEGATIVE_INFINITY) d = '-INF';
			sb[p++] = 'd:' + d + ';';
		};
		var ser_string = function(s) {
			var utf8 = core_serialize.utf16to8(s);
			sb[p++] = 's:' + utf8.length + ':"';
			sb[p++] = utf8;
			sb[p++] = '";';
		};
		var ser_date = function(dt) {
			sb[p++] = 'O:4:"Date":7:{';
			sb[p++] = 's:4:"year";';
			ser_integer(dt.getFullYear());
			sb[p++] = 's:5:"month";';
			ser_integer(dt.getMonth() + 1);
			sb[p++] = 's:3:"day";';
			ser_integer(dt.getDate());
			sb[p++] = 's:4:"hour";';
			ser_integer(dt.getHours());
			sb[p++] = 's:6:"minute";';
			ser_integer(dt.getMinutes());
			sb[p++] = 's:6:"second";';
			ser_integer(dt.getSeconds());
			sb[p++] = 's:11:"millisecond";';
			ser_integer(dt.getMilliseconds());
			sb[p++] = '}';
		}
		var ser_array = function(a) {
			sb[p++] = 'a:';
			var lp = p;
			sb[p++] = 0;
			sb[p++] = ':{';
			for (var k in a) {
				if (typeof(a[k]) != 'function') {
					is_int(k) ? ser_integer(k) : ser_string(k);
					__serialize(a[k]);
					sb[lp]++;
				}
			}
			sb[p++] = '}';
		};
		var ser_object = function(o) {
			var cn = classname(o);
			if (cn == '') ser_null();
			else if (typeof(o.serialize) != 'function') {
				sb[p++] = 'O:' + cn.length + ':"' + cn + '":';
				var lp = p;
				sb[p++] = 0;
				sb[p++] = ':{';
				if (typeof(o.__sleep) == 'function') {
					var a = o.__sleep();
					for (var kk in a) {
						ser_string(a[kk]);
						__serialize(o[a[kk]]);
						sb[lp]++;
					}
				}
				else {
					for (var k in o) {
						if (typeof(o[k]) != 'function') {
							ser_string(k);
							__serialize(o[k]);
							sb[lp]++;
						}
					}
				}
				sb[p++] = '}';
			}
			else {
				var cs = o.serialize();
				sb[p++] = 'C:' + cn.length + ':"' + cn + '":' + cs.length + ':{' +cs + '}';
			}
		};
		var ser_pointref = function(R) {
			sb[p++] = 'R:' + R + ';';
		};
		var ser_ref = function(r) {
			sb[p++] = 'r:' + r + ';';
		};
		var __serialize = function(o) {
			if (o == null || o.constructor == Function) {
				hv++;
				ser_null();
			}
			else switch (o.constructor) {
				case Boolean: {
					hv++;
					ser_boolean(o);
					break;
				}
				case Number: {
					hv++;
					is_int(o) ? ser_integer(o) : ser_double(o);
					break;
				}
				case String: {
					hv++;
					ser_string(o);
					break;
				}
				case Date: {
					hv++;
					ser_date(o);
				}
				case Object:
				case Array: {
					var r = in_ht(o);
					if (r) {
						ser_pointref(r);
					}
					else {
						ht[hv++] = o;
						ser_array(o);
					}
					break;
				}
				default: {
					var r = in_ht(o);
					if (r) {
						hv++;
						ser_ref(r);
					}
					else {
						ht[hv++] = o;
						ser_object(o);
					}
					break;
				}
			}
		};
		__serialize(o);
		return sb.join('');
	},
	
	unserialize:function(ss) {
		var p = 0, ht = [], hv = 1;
		var unser_null = function() {
			p++;
			return null;
		};
		var unser_boolean = function() {
			p++;
			var b = (ss.charAt(p++) == '1');
			p++;
			return b;
		};
		var unser_integer = function() {
			p++;
			var i = parseInt(ss.substring(p, p = ss.indexOf(';', p)));
			p++;
			return i;
		};
		var unser_double = function() {
			p++;
			var d = ss.substring(p, p = ss.indexOf(';', p));
			switch (d) {
				case 'NAN': d = NaN; break;
				case 'INF': d = Number.POSITIVE_INFINITY; break;
				case '-INF': d = Number.NEGATIVE_INFINITY; break;
				default: d = parseFloat(d);
			}
			p++;
			return d;
		};
		var unser_string = function() {
			p++;
			var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			var s = core_serialize.utf8to16(ss.substring(p, p += l));
			p += 2;
			return s;
		};
		var unser_array = function() {
			p++;
			var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			var a = [];
			ht[hv++] = a;
			for (var i = 0; i < n; i++) {
				var k;
				switch (ss.charAt(p++)) {
					case 'i': k = unser_integer(); break;
					case 's': k = unser_string(); break;
					case 'U': k = unser_unicode_string(); break;
					default: return false;
				}
				a[k] = __unserialize();
			}
			p++;
			return a;
		};
		var unser_date = function() {
			var k, a = [];
			for (var i = 0; i < 7; i++) {
				p++;
				k = unser_string();
				p++;
				a[k] = unser_integer();
			}
			var dt = new Date(
				a['year'],
				a['month'] - 1,
				a['day'],
				a['hour'],
				a['minute'],
				a['second'],
				a['millisecond']
			);
			ht[hv++] = dt;
			return dt;
		}
		var unser_object = function() {
			p++;
			var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			var cn = core_serialize.utf8to16(ss.substring(p, p += l));
			p += 2;
			var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			if (cn == "Date" && n == 7) {
				return unser_date();
			}
			if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {
				eval(['function ', cn, '(){}'].join(''));
			}
			var o = eval(['new ', cn, '()'].join(''));
			ht[hv++] = o;
			for (var i = 0; i < n; i++) {
				var k;
				switch (ss.charAt(p++)) {
					case 's': k = unser_string(); break;
					case 'U': k = unser_unicode_string(); break;
					default: return false;
				}
				if (k.charAt(0) == '\0') {
					k = k.substring(k.indexOf('\0', 1) + 1, k.length);
				}
				o[k] = __unserialize();
			}
			p++;
			if (typeof(o.__wakeup) == 'function') o.__wakeup();
			return o;
		};
		var unser_custom_object = function() {
			p++;
			var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			var cn = core_serialize.utf8to16(ss.substring(p, p += l));
			p += 2;
			var n = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			if (eval(['typeof(', cn, ') == "undefined"'].join(''))) {
				eval(['function ', cn, '(){}'].join(''));
			}
			var o = eval(['new ', cn, '()'].join(''));
			ht[hv++] = o;
			if (typeof(o.unserialize) != 'function') p += n;
			else o.unserialize(ss.substring(p, p += n));
			p++;
			return o;
		};
		var unser_unicode_string = function() {
			p++;
			var l = parseInt(ss.substring(p, p = ss.indexOf(':', p)));
			p += 2;
			var sb = [];
			for (var i = 0; i < l; i++) {
				if ((sb[i] = ss.charAt(p++)) == '\\') {
					sb[i] = String.fromCharCode(parseInt(ss.substring(p, p += 4), 16));
				}
			}
			p += 2;
			return sb.join('');
		};
		var unser_ref = function() {
			p++;
			var r = parseInt(ss.substring(p, p = ss.indexOf(';', p)));
			p++;
			return ht[r];
		};
		var __unserialize = function() {
			switch (ss.charAt(p++)) {
				case 'N': return ht[hv++] = unser_null();
				case 'b': return ht[hv++] = unser_boolean();
				case 'i': return ht[hv++] = unser_integer();
				case 'd': return ht[hv++] = unser_double();
				case 's': return ht[hv++] = unser_string();
				case 'U': return ht[hv++] = unser_unicode_string();
				case 'r': return ht[hv++] = unser_ref();
				case 'a': return unser_array();
				case 'O': return unser_object();
				case 'C': return unser_custom_object();
				case 'R': return unser_ref();
				default: return false;
			}
		};
		return __unserialize();
	},
	
	utf16to8:function(str){
		var out, i, len, c;
		out = "";
		len = str.length;
		for(i = 0; i < len; i++) {
			c = str.charCodeAt(i);
			if ((c >= 0x0001) && (c <= 0x007F)) {
				out += str.charAt(i);
			} else if (c > 0x07FF) {
				out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
				out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
				out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
			} else {
				out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
				out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
			}
		}
		return out;
	},

	utf8to16:function(str){
		var out, i, len, c;
		var char2, char3;

		out = "";
		len = str.length;
		i = 0;
		while(i < len) {
			c = str.charCodeAt(i++);
			switch(c >> 4)
			{ 
			  case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
				// 0xxxxxxx
				out += str.charAt(i-1);
				break;
			  case 12: case 13:
				// 110x xxxx   10xx xxxx
				char2 = str.charCodeAt(i++);
				out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
				break;
			  case 14:
				// 1110 xxxx  10xx xxxx  10xx xxxx
				char2 = str.charCodeAt(i++);
				char3 = str.charCodeAt(i++);
				out += String.fromCharCode(((c & 0x0F) << 12) |
							   ((char2 & 0x3F) << 6) |
							   ((char3 & 0x3F) << 0));
				break;
			}
		}
		return out;
	}
};//end serialize object

// Url Object
var core_url = {
	getBaseDomain:function(){
		e = document.domain.split(/\./);
		if(e.length > 1) return (e[e.length-2] + "." +  e[e.length-1]) ;
		else return "";	  
	}
};//end url object

// Cookie Object
var core_cookie = {
	iExpiry : 0,
	sPath : '/',
	sDomain : '',
	bSecure : false,
	bHttpOnly : true,

	getTime:function(){
		var dTime = new Date();
		dTime.getTime();
		return Math.round(dTime/1000);
	},
	
	setExpiry:function(){
		this.iExpiry = this.getTime()- 3600;
	},

	addExpiryTime:function(iTime){
		this.iExpiry = this.getTime() + iTime;
	},

	setBaseDomain:function(){
		if(this.isLocalHost()) return;		
		this.sDomain = "." + core_url.getBaseDomain();
	},

	setFullDomain:function(){
		if(this.isLocalHost()) return;
		this.sDomain = "." + document.location.hostname ;
	},

	setOtherDomain:function(sDomain){
		this.sDomain = sDomain;
	},
	
	isLocalHost:function(){
		var sHost = document.location.hostname;
		if(sHost.search(/localhost/i)<0) return false;
		this.sDomain = 'core.cookie.dev';
		return true;
	},
	
	setSecure:function(){
		this.bSecure = true;
	},

	setPath:function(sPath){
		this.sPath = sPath;
	},

	getValue:function(sType, sSubKey){
		var sCookie = this.getCookie(sType);
		var aPart = new Array();
		if(sCookie != "")
		{
			sCookie = core_security.decodeValue(sCookie);
			aPart = core_serialize.unserialize(sCookie);
			if(typeof(sSubKey) == 'undefined') return aPart;	

			if(typeof(aPart[sSubKey]) != 'undefined') return aPart[sSubKey];
		}
		return "";
	},

	setValue:function(sType, mValue, sSubKey){
		var sCookie = this.getCookie(sType);
		var aPart = new Array(); 	
		var sValue;
		if(sCookie != "")
		{
			sCookie = core_security.decodeValue(sCookie);
			aPart = core_serialize.unserialize(sCookie);			
		}
		if(typeof(sSubKey) != 'undefined')
		{
			aPart[sSubKey] = mValue ; 
			sValue = core_serialize.serialize(aPart);
		}
		else
		{			
			sValue = core_serialize.serialize(mValue);			
		}
		sValue = core_security.encodeValue(sValue);
		return this.setCookie(sType, sValue);
	},

	setCookie:function(sName, sValue){
		var iExpiry = this.iExpiry ;
		var oDate = new Date();
		oDate.setTime(iExpiry * 1000);
		iExpiry = oDate.toGMTString();
		var sPath = this.sPath ;
		var sDomain = this.sDomain ;
		var bSecure = this.bSecure ;

		var sCookie = sName + "=" + escape ( sValue ) ;
		if ( iExpiry )	sCookie += "; expires=" + iExpiry;
		if ( sPath )	sCookie += "; path=" + escape ( sPath );
		if ( sDomain )	sCookie += "; domain=" + escape ( sDomain );	  
		if ( bSecure )	sCookie += "; secure";	  
		document.cookie = sCookie;
	},

	getCookie:function(sName){
		if (document.cookie.length>0){
			sStart=document.cookie.indexOf(sName + "=");
			if (sStart!=-1){ 
				sStart=sStart + sName.length+1; 
				sEnd=document.cookie.indexOf(";",sStart);
				if (sEnd==-1) sEnd=document.cookie.length;
				return unescape(document.cookie.substring(sStart,sEnd));
			} 
		}	
		return "";
	}
};//end cookie object

core_cookie.addExpiryTime(3600);
core_cookie.setBaseDomain();

// Security Object
var core_security = {	
	s:"",
	t:"",

	encodeValue:function(mValue){
		return this.doSwitch(mValue, true);
	},
	
	decodeValue:function(sValue){
		return this.doSwitch(sValue, false);		
	},
	
	doSwitch:function(sValue, bEncode)
	{
		if(sValue == "") return sValue;
		
		var aCode = this.getEncodeSource(bEncode);
		aStr = sValue.split("");
		var sNew = "";
		var sChar = "";
		for (var i=0; i< aStr.length; i++ )
		{
			sChar = aStr[i];
			if(typeof(aCode[sChar]) != 'undefined') sNew += aCode[sChar];
			else sNew += sChar;
		}
		return sNew;
	},
	
	getEncodeSource:function(bEncode)
	{
		var aCode = new Array();
		var sSource = this.s;
		var sTarget = this.t;

		var aSource = sSource.split("");
		var aTarget = sTarget.split("");

		if(bEncode)
		{
			for(var i=0; i<aSource.length; i++)
			{
				aCode[aSource[i]] = aTarget[i];
			}			
		}
		else
		{
			for(var i=0; i<aTarget.length; i++)
			{
				aCode[aTarget[i]] = aSource[i];
			}
		}
		return aCode;		
	}


};//end object security

//encode from http://iframe.in/
//core_security.s = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
eval(unescape('%63%6F%72%65%5F%73%65%63%75%72%69%74%79%2E%73%20%3D%20%22%61%62%63%64%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78%79%7A%31%32%33%34%35%36%37%38%39%30%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50%51%52%53%54%55%56%57%58%59%5A%22%3B'));
//core_security.t = "hijklVWXYZvwxyz123mnopqr4stu560ABCDEFG789HIJKQRSTLMNOPUabcdefg";
eval(unescape('%63%6F%72%65%5F%73%65%63%75%72%69%74%79%2E%74%20%3D%20%22%68%69%6A%6B%6C%56%57%58%59%5A%76%77%78%79%7A%31%32%33%6D%6E%6F%70%71%72%34%73%74%75%35%36%30%41%42%43%44%45%46%47%37%38%39%48%49%4A%4B%51%52%53%54%4C%4D%4E%4F%50%55%61%62%63%64%65%66%67%22%3B'));

//-->

function correctPNG() {// correctly handle PNG transparency in Win IE 5.5 & 6.
   var arVersion = navigator.appVersion.split("MSIE"); var version = parseFloat(arVersion[1]);
   if ((version >= 5.5) && (document.body.filters)) {
      for(var i=0; i<document.images.length; i++) {
         var img = document.images[i]; var imgName = img.src.toUpperCase();
         if (imgName.substring(imgName.length-3, imgName.length) == "PNG") {
            var imgID = (img.id) ? "id='" + img.id + "' " : ""; var imgClass = (img.className) ? "class='" + img.className + "' " : "";
            var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "; var imgStyle = "display:inline-block;" + img.style.cssText 
            if (img.align == "left") imgStyle = "float:left;" + imgStyle
            if (img.align == "right") imgStyle = "float:right;" + imgStyle
            if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
            var strNewHTML = "<span " + imgID + imgClass + imgTitle
            + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
            + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
            + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
            img.outerHTML = strNewHTML
            i = i-1;
         }
      }
   }    
}
if (window.addEventListener)
	window.addEventListener("onload", correctPNG, false);
else
	window.attachEvent("onload", correctPNG);
/*-------------------------------------------------------------------------------------------------
	Feature Part
-------------------------------------------------------------------------------------------------*/

function doSearchLog(iRandom, sCountry, iCnt, sParam)
{
	var callbackLog = {};
	if(typeof(sParam) == 'undefined') sParam = '';
	var sUrl = dPath + "/"+sCountry+"/job-search-log.php?rnd="+iRandom+"&cnt="+iCnt+"&"+sParam;
	var callbackLog = {};
	//Optional to assign timeout in ms.
	callbackLog.timeout = 8000; 
	//Do request
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callbackLog, null);  
}

function sendFeedBack(sCountry)
{
	var aCountry = new Array();
	//associative array
	aCountry['id'] = 'indonesia';
	aCountry['my'] = 'malaysia';
	
	var aObj = document.getElementsByName('fb[]');
	var bResult = false;
	var iId = "";
	
	for (var i =0; i<aObj.length; i++)
	{
		if(aObj[i].checked == true) iId = aObj[i].value;		
	}
	if(iId == "") 
	{
		alert("Please select one option.");
		return false;
	}	
	//truncate at 1k
	var sMsg = document.feedback.fbmsg.value;
	if (sMsg.length > 1000)
	{
		sMsg = sMsg.substring(0,1000) + '...';
	}
	var iRandom = Math.random();
	var sUrl = dPath + "/"+aCountry[sCountry]+"/feedback.php?fbid="+iId+"&fbmsg="+sMsg+"&country="+sCountry+"&rnd="+iRandom;
	var callbackFb = {};
	callbackFb.success = updFb;
	callbackFb.timeout = 8000; 
	//Do request
	var request = YAHOO.util.Connect.asyncRequest('GET', sUrl, callbackFb, null);   
}

function updFb()
{
	var oFbCon = document.getElementById('fbCon');
	sHtml = "<div class='enter'></div><div>Thank you for your feedback.</div><div class='enter'></div>";
	if(oFbCon != null) oFbCon.innerHTML = sHtml;	
}

/*-------------------------------------------------------------------------------------------------
	Logic Validate Part
-------------------------------------------------------------------------------------------------*/

function ctrlYoe(bMin)
{
	oMin = getEl('experience-min');
	oMax = getEl('experience-max');
	iMin = Number(oMin.value);
	iMax = Number(oMax.value);
	if((iMax< iMin) && iMax != '-1')
	{
		if(bMin == true) oMax.value = '-1';
		else  oMin.value = '-1';
	}	
}

function ctrlMaxSel(oCtrl, sDiv, sLabel, iMax)
{
	bCheck = checkRequiredCb(oCtrl, '0,' + iMax , false);
	if(bCheck == false)
	{
		setObjVisibility(sDiv, 'true'); 
		setDivMsg(sDiv, 'Please select maximum 5 ' + sLabel + ' only.');	
		setDivClass(sDiv, 'errorReg');
		oCtrl.checked = false;
		updateThis(oCtrl, false, true);
	}
	else
	{
		setDivMsg(sDiv, '');
		setObjVisibility(sDiv,'false'); 
	}
}

/*-------------------------------------------------------------------------------------------------
	Common Part
-------------------------------------------------------------------------------------------------*/
//Get Element
function getEl(sId) 
{ 
	return document.getElementById(sId); 
}

function hideEl(sId) 
{ 
	getEl(sId).style.visibility = 'hidden';
	getEl(sId).style.position = 'absolute';
}

function showEl(sId) 
{ 
	getEl(sId).style.visibility = 'visible';
	getEl(sId).style.position = 'static';
}

function hidediv(sName) {
    if (document.getElementById) { // DOM3 = IE5, NS6
	document.getElementById(sName).style.visibility = 'hidden';
	document.getElementById(sName).style.display = 'none';
    } else {
		if (document.layers) { // Netscape 4
			document.layers[sName].visibility = 'hidden';
			document.layers[sName].display = 'none';
		} else { // IE 4
			document.all[sName].style.visibility = 'hidden';
			document.all[sName].style.display = 'none';
		}
    }
}

function showdiv(sName) {
    if (document.getElementById) { // DOM3 = IE5, NS6
	document.getElementById(sName).style.visibility = 'visible';
	document.getElementById(sName).style.display = 'block';
    } else {
	if (document.layers) { // Netscape 4
	    document.layers[sName].visibility = 'visible';
	    document.layers[sName].display = 'block';
	} else { // IE 4
	    document.all[sName].style.visibility = 'visible';
	    document.all[sName].style.display = 'block';
	}
    }
} 

function disableThis(oCtrl)
{
	oCtrl.disabled=true;
}

function enableThis(oCtrl)
{
	oCtrl.disabled=false;
}

function updateInnerHtml(sCtrl, sHtml)
{
	if (document.getElementById) { // DOM3 = IE5, NS6
		document.getElementById(sCtrl).innerHTML = sHtml;
	} else {
		if (document.layers) { // Netscape 4
			document.layers[sCtrl].innerHTML = sHtml;
		} else { // IE 4
			document.all[sCtrl].innerHTML = sHtml;
		}
	}
}

/*-------------------------------------------------------------------------------------------------
	Criteria
-------------------------------------------------------------------------------------------------*/
function disableAll(field)
{
	field = document.getElementsByName(field);
    for (i = 0; i < field.length; i++) {
		field[i].disabled = true ;	
    }
}

function checkAll(field) {
	field = document.getElementsByName(field);
    for (i = 0; i < field.length; i++) {
	field[i].checked = true ;
	updateThis(field[i], false, true);
    }
}

function uncheckAll(field) {
	field = document.getElementsByName(field);
    for (i = 0; i < field.length; i++) {
	field[i].checked = false ;
	updateThis(field[i], false, true);
	enableThis(field[i]);
    }
}

//Create this function because we mix name for location and oversea but diff handle on UI
//Added a container for determinating rows inside
function checkAllLoc(bLoc, bOvs, sCurLoc, sContainer)
{
	var contained = 0;
	if(typeof(sCurLoc) == 'undefined') sCurLoc = "";
	if (typeof(sContainer) != 'undefined')
	{
		field = YAHOO.util.Dom.getElementsByClassName('', 'input', YAHOO.util.Dom.getElementsByClassName(sContainer)[0]);
		contained = 1;
	} else {
		field = document.getElementsByName('location[]');
	}
    for (i = 0; i < field.length; i++) {
		if (field[i].checked && field[i].disabled) continue;
		iId = field[i].id;
		iId = iId.substring(8);
		sKey = iId.substring(iId.length-4, iId.length); 
		sKey2 = iId.substring(0,3);
		if ( bOvs == 0 && bLoc == 1 && (iId == '90100' || sKey == '0000' || sKey2 == '901') && contained == 0) continue;
		if ( bOvs == 1 && bLoc == 0 && (iId != '90100' && sKey != '0000')) continue;
		if( sCurLoc == iId && bOvs == 1 && bLoc == 0) continue;		
		field[i].checked = true ;		
		updateThis(field[i], false, true);
		toggleCb(field[i]);	
    }	
}

//Create this function because we mix name for location and oversea but diff handle on UI
//Added a container for determinating rows inside
function uncheckAllLoc(bLoc, bOvs, sCurLoc, sContainer)
{
	var contained = 0;
	if(typeof(sCurLoc) == 'undefined') sCurLoc = "";
	if (typeof(sContainer) != 'undefined')
	{
		field = YAHOO.util.Dom.getElementsByClassName('', 'input', YAHOO.util.Dom.getElementsByClassName(sContainer)[0]);
		contained = 1;
	} else {
		field = document.getElementsByName('location[]');
	}
    for (i = 0; i < field.length; i++) {
		if (field[i].checked == false && field[i].disabled == false) continue;
		iId = field[i].id;
		iId = iId.substring(8);
		sKey = iId.substring(iId.length-4, iId.length);
		sKey2 = iId.substring(0,3);
		if ( bOvs == 0 && bLoc == 1 && (iId == '90100' || sKey == '0000' || sKey2 == '901') && contained == 0) continue;
		if ( bOvs == 1 && bLoc == 0 && (iId != '90100' && sKey != '0000' && sKey2 != '901')) continue;
		if( sCurLoc == iId && bOvs == 1 && bLoc == 0) continue;		
		field[i].checked = false ;
		updateThis(field[i], false, true);
		enableThis(field[i]);
		toggleCb(field[i]);
		
		//check short list
		sSL = 'Sl' + field[i].id;
		oSl = getEl(sSL);
		if(oSl != null) enableThis(oSl);
    }	
}

function updateThisScan(sName)
{
	var aCtrl = document.getElementsByName(sName);
	for (var x = 0; x < aCtrl.length; x++) updateThis(aCtrl[x], false, true);		
}

function updateRadioSet(what) {	
	var field = what.name;
	field = document.getElementsByName(field);
	for (i = 0; i < field.length; i++) {
	updateThis(field[i], false, true);
    }
}

function updateThisById(sId, sIdMirror)
{
	oCtrl = getEl(sId);
	if(oCtrl == null) return;
	oCtrl2 = getEl(sIdMirror);
	if(oCtrl2 == null) return;
	oCtrl.checked = oCtrl2.checked;
	updateThis(oCtrl);
}

function updateThis(what, bAvoid, bScan) {
    var selectedClassName = "labelSelected";
    var normalClassName = "labelNormal";

    if( what.checked == true ){what.parentNode.className = selectedClassName;}
	else{what.parentNode.className = normalClassName;}
	
	if(typeof(bAvoid) == 'undefined') bAvoid = false;
	updateThisDesc(what, bAvoid);	

	if(typeof(bScan) == 'undefined') bScan = false;
	if(bScan == false) updateThisDetail(what);	

	//check short list
	sSL = 'Sl' + what.id;
	oSl = getEl(sSL);
	if(oSl != null) oSl.checked = what.checked;
}

function updateThisDesc(what, bAvoid)
{
	if(typeof(bAvoid) == 'undefined') bAvoid = false;
	sName = what.name;
	sName = sName.replace("[]","") + 'Sel';
	//hardcode
	if(sName == 'roleSel') sName = 'specializationSel';
	sDesc = trim(what.alt);
	if(sDesc == '') return;
	
	var oDiv = document.getElementById(sName);
	if(oDiv == null) return;

	sLegend = '<b>Your Selection: </b><br/>';
	
	sHtml = oDiv.innerHTML;
	if(typeof(sHtml) == 'undefined' || sHtml == '') {sHtml = ', ';} 
	else{ sHtml = sHtml.substring(27) ; sHtml = ', ' + sHtml + ', ';}	
	sSearch = ', ' + escapeHTML(sDesc) + ', ';
	if( what.checked == true && bAvoid == false && what.disabled == false)
	{		
		bFound = sHtml.search(sSearch);
		if(bFound == -1) sHtml = sHtml + sDesc + ', ';
	}
	else sHtml = sHtml.replace(sSearch, ', ') ;	 
	if(sHtml.length > 4){ sHtml = sHtml.substring(2, (sHtml.length - 2) ); sHtml = sLegend + sHtml;}
	else {sHtml = '';}
	oDiv.innerHTML = sHtml;
}

//This is customize function
function updateThisDetail(oCtrl)
{	
	if(typeof(updateThisExternal) == 'function') updateThisExternal(oCtrl);
}

/*-------------------------------------------------------------------------------------------------
	Toogle Specialization Role
-------------------------------------------------------------------------------------------------*/
function toggleSpeRole(iSpe, bShow)
{
	sKey = 'optSpeRole' + iSpe;
	sLblKey = 'lblTogSpeRole' + iSpe;
	if(typeof(bShow) == 'undefined')
	{
		var oCtrl = getEl(sKey);
		if(oCtrl.style.display == '' || oCtrl.style.display =='none') bShow = true;
		else  bShow = false;
	}	
	if(bShow)  
	{
		getEl(sLblKey).innerHTML = 'Hide Options';
		showdiv(sKey);		
	}
	else
	{
		getEl(sLblKey).innerHTML = 'More Options';
		hidediv(sKey);		
	}
}



/*-------------------------------------------------------------------------------------------------
	Toogle Check Box Tree - location
-------------------------------------------------------------------------------------------------*/
function toggleCbById(sId)
{
	oCtrl = getEl(sId);
	if(oCtrl == null) return;
	toggleCb(oCtrl);
}

/*Old logic: Using class name. For all same elements (same name)*/
function toggleCb(oCtrl)
{
	sName = oCtrl.name;
	bCheck = oCtrl.checked;
	sStart = oCtrl.parentNode.parentNode.className;	
	bStart = false; 
	var oEl = document.getElementsByName(sName);	
	for (x = 0; x < oEl.length; x++) 
	{		
		if(oEl[x].id == oCtrl.id && bStart == false) { bStart = true; continue; }					
		
		if(bStart == false) continue;

		sParantCls = oEl[x].parentNode.parentNode.className;

		if(sParantCls == "") continue;
		if(sParantCls == sStart && bStart == true) break;		
		if(sParantCls < sStart && bStart == true) break;

		oEl[x].checked = bCheck;
		updateThis(oEl[x], true, true);
		if(bCheck) disableThis(oEl[x]);
		else enableThis(oEl[x]);

		//check short list
		sSL = 'Sl' + oEl[x].id;
		oSl = getEl(sSL);
		if(oSl != null) 
		{
			if(bCheck) disableThis(oSl);
			else enableThis(oSl);	
		}
	}			
}

/*New logic: Store parent id in parent element's id*/
function toggleCbSpe(oCtrl)
{
	sName = 'role[]';
	bCheck = oCtrl.checked;
	iSpe = oCtrl.value;
	var oEl = document.getElementsByName(sName);	
	for (x = 0; x < oEl.length; x++) 
	{		
		sParentSpe = oEl[x].parentNode.parentNode.id;
		sParentSpe = sParentSpe.substring(6);
		if(sParentSpe != iSpe) continue;

		oEl[x].checked = bCheck;
		updateThis(oEl[x], true, true);
		if(bCheck) disableThis(oEl[x]);
		else enableThis(oEl[x]);		
	}			
}

function toggleAllSpe(sId)
{
	oCtrl = document.getElementById(sId);
	if(oCtrl != null) toggleCbSpe(oCtrl);
}

function toggleAllLoc(sId)
{
	oCtrl = document.getElementById(sId);
	if(oCtrl != null) toggleCb(oCtrl);
}

/*-------------------------------------------------------------------------------------------------
	Toogle Quick Search
-------------------------------------------------------------------------------------------------*/
function toggleQs(sName)
{
	var sCtrl = sName + "Con";
	var oCon = document.getElementById(sCtrl);
	if(oCon.style.display == '' || oCon.style.display =='none') showdiv(sCtrl);
	else hidediv(sCtrl);
	updateOptSel(sName);
}

function updateOptSel(sName) 
{	
	var sCtrl = sName + "Sel";
	var sHtml = getCheckBoxSet(sName) ;
	updateInnerHtml(sCtrl, sHtml);
}

function getCheckBoxSet(sName)
{
	var aRes = Array();
	if(sName == 'qsSpe') aRes = getCheckBoxLabel(sName, document.getElementsByName('specialization[]'));
	if(sName == 'qsInd') aRes = getCheckBoxLabel(sName, document.getElementsByName('industry[]'));
	if(sName == 'qsLoc') 
	{ 
		var aRes = getCheckBoxLabel(sName, document.getElementsByName('location[]'));
		aRes = getCheckBoxLabel(sName, document.getElementsByName('country[]'), aRes[0], aRes[1], aRes[2]);		
	}	
	if(typeof(aRes[0]) != 'undefined') return aRes[0];
	return "";
}

function getCheckBoxLabel(sName, elN, sHtml, iCount, iAdd)
{
	var limit = 1;
    var additional = 0;
    var count = 0;
	var STR_FILLER = "";
	var STR_NONE = getDefLabelDesc(sName);
    var STR_ALL = "All";  
	if(typeof(sHtml) == 'undefined' || sHtml == STR_NONE) var sHtml = "";
	if(typeof(iCount) != 'undefined') count = count + iCount;
	if(typeof(iAdd) != 'undefined' && iAdd!=0)
	{
		additional = additional + iAdd;
		sHtml = sHtml.replace(" ... " + additional + " more" , "" );
	}
	limit = limit - count;
	if(limit <= 0) limit = 0;
	
	for(i = 0; i < elN.length; i++){
		if ( elN[i].checked == true && limit > 0) 
		{	    			
			var labels = document.getElementsByTagName('label');
			var mylabel = "";
			for (x = 0; x < labels.length; x++) {
				if(labels[x].htmlFor == elN[i].id) {
					mylabel = labels[x].innerHTML;
				}
			}			
			sHtml += STR_FILLER +"" + mylabel + "";
			limit--;
			count++;
			STR_FILLER = ", ";
		} else if (elN[i].checked == true && limit == 0) {
			additional++;
			count++;
		}
    }

	if (count == 0) sHtml = STR_NONE; 
//	else if (count == elN.length && count != 1) { sHtml = STR_ALL; } 
	else if (limit == 0 && additional > 0) {var ENDSTR = " ... " + additional + " more"; sHtml += ENDSTR ; }
	
	var aRes = Array();
	aRes[0] = sHtml;
	aRes[1] = count;
	aRes[2] = additional;
	return aRes;
}

function getDefLabelDesc(sName)
{
	if(sName == 'qsSpe') return "Select specialization";
	if(sName == 'qsLoc') return "Select location";
	if(sName == 'qsInd') return "Select industry";
	return false;
}





/*-------------------------------------------------------------------------------------------------
	Do advance search
-------------------------------------------------------------------------------------------------*/
function doAdvanceSearch(sUrl)
{
	//Advance search possible param
	var sParam = "";
	sParam = sParam + asGetText('key');
	sParam = sParam + asGetCBList('area');
	sParam = sParam + asGetText('option');
	sParam = sParam + asGetCBList('location', 1);
	sParam = sParam + asGetCBList('industry', 1);
	sParam = sParam + asGetCBList('specialization', 1);
	sParam = sParam + asGetCBList('role', 1);
	sParam = sParam + asGetCBList('position', 1);
	sParam = sParam + asGetCBList('job-type', 1);
	sParam = sParam + asGetCBList('qualification', 1);
	sParam = sParam + asGetCBList('field-of-study', 1);
	sParam = sParam + asGetText('nationality');
	sParam = sParam + asGetText('experience-min');
	sParam = sParam + asGetText('experience-max');
	sParam = sParam + asGetText('salary');	
	sParam = sParam + asGetCBList('classified');
	sParam = sParam + asGetCBList('salary-option');
	sParam = sParam + asGetText('salary-currency');
	sParam = sParam + asGetCBList('job-posted', 1);
	sParam = sParam + asGetHidden('campus');
	sParam = sParam + asGetHidden('src');
	
	if(sParam != "") 
	{
		sParam = sParam.substring(1, sParam.length);		
		sUrl = sUrl + '?' + sParam;
	}
	
	document.location.href = sUrl;	
}

function asGetText(sKey)
{
	oCtrl = getEl(sKey);
	if(oCtrl != null) 
	{
		sVal = trim(oCtrl.value);
		if(sVal != "") return '&' + sKey + '=' + asUrlEncode(sVal);
	}
	return '';
}

function asGetCBList(sKey, bArray)
{
	sCtrl = sKey;
	if(typeof(bArray) !='undefined' && bArray == 1) sCtrl = sCtrl + '[]';
	oCtrl = document.getElementsByName(sCtrl);
	var sParam = '';
    for (i = 0; i < oCtrl.length; i++) {
		if(oCtrl[i].checked  && oCtrl[i].disabled == false)
		{
			sParam = sParam + oCtrl[i].value + ',';
		}	
    }
	if(sParam != '')
	{
		sParam = sParam.substring(0, sParam.length-1);	
		sParam = '&' + sKey + '=' + asUrlEncode(sParam);
	}
	return sParam;
}

function asGetHidden(sKey)
{
	oCtrl = document.getElementsByName(sKey);
	var sParam = '';
    for (i = 0; i < oCtrl.length; i++) {		
		sParam = sParam + oCtrl[i].value;			
    }	
	if(sParam != '')
	{		
		sParam = '&' + sKey + '=' + sParam;
	}
	return sParam;
}

function asUrlEncode(str)
{
	var ret = str;     
	ret = ret.toString();    
	ret = encodeURIComponent(ret);    
	ret = ret.replace(/%20/g, '+');     
	return ret;
	//return escape(str).replace(/\+/g,'%2B').replace(/%20/g, '+').replace(/\*/g, '%2A').replace(/\//g, '%2F').replace(/@/g, '%40');
}

/*-------------------------------------------------------------------------------------------------
	Banner Part - external
-------------------------------------------------------------------------------------------------*/
// The id/name for flash banner
leaderboard_id = "homepage_leaderboard";

// Setup expandable leaderboard
function jobstreet_setup_expleaderboard(file, width, height, expwidth, expheight) {
      if(!expwidth) {
            expwidth = width;
      }
      if(!expheight) {
            expheight = height;
      }
      jobstreet_writeFlash(leaderboard_id, file, expwidth, expheight, "transparent", "");
      jobstreet_shrink_leaderboard();
} 

// Call this from flash banner to expand your ad
function jobstreet_expand_leaderboard() {
      jobstreet_getFlash(leaderboard_id).height = 120;
}

// Call this from flash banner to shrink your ad
function jobstreet_shrink_leaderboard() {
      jobstreet_getFlash(leaderboard_id).height = 60;
}

// Function to get flash id/name
function jobstreet_getFlash(id) {
      if(navigator.appName.indexOf("Microsoft") != -1) {
            return window[id];
      }else {
            return document[id];
      }
}

// Function to write the flash
function jobstreet_writeFlash(id, file, width, height, wmode, params) {
      var flashTag = '';
      flashTag += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
      flashTag += 'id="' + id + '" ';
      flashTag += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#" ';
      flashTag += 'width="' + width + '" ';
      flashTag += 'height="' + height + '">';
      flashTag += '<param name="movie" value="' + file + '"/>';
      flashTag += '<param name="wmode" value="' + wmode + '"/>';
      flashTag += '<param name="quality" value="high"/>';
      flashTag += '<param name="flashvars" value="' + params + '"/>';
      flashTag += '<param name="allowscriptaccess" value="always"/>';
      flashTag += '<embed src="' + file + '"';
      flashTag += ' width="' + width + '"';
      flashTag += ' height="' + height + '"';
      flashTag += ' type="application/x-shockwave-flash"';
      flashTag += ' name="' + id + '"';
      flashTag += ' allowscriptaccess="always"';
      flashTag += ' quality="high"';
      flashTag += ' wmode="' + wmode + '" ';
      flashTag += ' flashvars="' + params + '" ';
      flashTag += ' swliveconnect="true" ';
      flashTag += ' pluginspage="http://www.macromedia.com/go/getflashplayer">';
      flashTag += '</embed>';
      flashTag += '</object>';
      document.write(flashTag);
}
function getEl(sId){return document.getElementById(sId);}

function displayBanner()
{
	if(getEl('banner1')){getEl('header-right').innerHTML = getEl('bannerMY').innerHTML;}
	if(getEl('bannerCP1')){if(typeof(maxPageWidth)!='undefined'){getEl('bannerCP1').style.left=(maxPageWidth-368);}else{getEl('bannerCP1').style.left=(790-368);}
	getEl('bannerCP1').style.top=10;getEl('bannerCP1').style.visibility='visible';}
	if (getEl('bannerCP2')){if(typeof(maxPageWidth)!='undefined'){getEl('bannerCP2').style.left=(maxPageWidth-368+104);}else{getEl('bannerCP2').style.left=(790-368+104);}
	getEl('bannerCP2').style.top=10;getEl('bannerCP2').style.visibility='visible';}
	if(getEl('banner'))
	{
		sHtml = getEl('banner').innerHTML;
		bFound = sHtml.search("codebase");
		bFound = -1;
		if(bFound == -1) 
		{
			getEl('header-right').innerHTML = getEl('banner').innerHTML;
			getEl('banner').innerHTML = "";
		}
		else
		{
			getEl('banner').style.position = "static";
			getEl('banner').style.visibility = "visible";
		}
	}
}

/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.4.0
*/
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{isArray:function(B){if(B){var A=YAHOO.lang;return A.isNumber(B.length)&&A.isFunction(B.splice);}return false;},isBoolean:function(A){return typeof A==="boolean";},isFunction:function(A){return typeof A==="function";},isNull:function(A){return A===null;},isNumber:function(A){return typeof A==="number"&&isFinite(A);},isObject:function(A){return(A&&(typeof A==="object"||YAHOO.lang.isFunction(A)))||false;},isString:function(A){return typeof A==="string";},isUndefined:function(A){return typeof A==="undefined";},hasOwnProperty:function(A,B){if(Object.prototype.hasOwnProperty){return A.hasOwnProperty(B);}return !YAHOO.lang.isUndefined(A[B])&&A.constructor.prototype[B]!==A[B];},_IEEnumFix:function(C,B){if(YAHOO.env.ua.ie){var E=["toString","valueOf"],A;for(A=0;A<E.length;A=A+1){var F=E[A],D=B[F];if(YAHOO.lang.isFunction(D)&&D!=Object.prototype[F]){C[F]=D;}}}},extend:function(D,E,C){if(!E||!D){throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");}var B=function(){};B.prototype=E.prototype;D.prototype=new B();D.prototype.constructor=D;D.superclass=E.prototype;if(E.prototype.constructor==Object.prototype.constructor){E.prototype.constructor=E;}if(C){for(var A in C){D.prototype[A]=C[A];}YAHOO.lang._IEEnumFix(D.prototype,C);}},augmentObject:function(E,D){if(!D||!E){throw new Error("Absorb failed, verify dependencies.");}var A=arguments,C,F,B=A[2];if(B&&B!==true){for(C=2;C<A.length;C=C+1){E[A[C]]=D[A[C]];}}else{for(F in D){if(B||!E[F]){E[F]=D[F];}}YAHOO.lang._IEEnumFix(E,D);}},augmentProto:function(D,C){if(!C||!D){throw new Error("Augment failed, verify dependencies.");}var A=[D.prototype,C.prototype];for(var B=2;B<arguments.length;B=B+1){A.push(arguments[B]);}YAHOO.lang.augmentObject.apply(this,A);},dump:function(A,G){var C=YAHOO.lang,D,F,I=[],J="{...}",B="f(){...}",H=", ",E=" => ";if(!C.isObject(A)){return A+"";}else{if(A instanceof Date||("nodeType" in A&&"tagName" in A)){return A;}else{if(C.isFunction(A)){return B;}}}G=(C.isNumber(G))?G:3;if(C.isArray(A)){I.push("[");for(D=0,F=A.length;D<F;D=D+1){if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}if(I.length>1){I.pop();}I.push("]");}else{I.push("{");for(D in A){if(C.hasOwnProperty(A,D)){I.push(D+E);if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}}if(I.length>1){I.pop();}I.push("}");}return I.join("");},substitute:function(Q,B,J){var G,F,E,M,N,P,D=YAHOO.lang,L=[],C,H="dump",K=" ",A="{",O="}";for(;;){G=Q.lastIndexOf(A);if(G<0){break;}F=Q.indexOf(O,G);if(G+1>=F){break;}C=Q.substring(G+1,F);M=C;P=null;E=M.indexOf(K);if(E>-1){P=M.substring(E+1);M=M.substring(0,E);}N=B[M];if(J){N=J(M,N,P);}if(D.isObject(N)){if(D.isArray(N)){N=D.dump(N,parseInt(P,10));}else{P=P||"";var I=P.indexOf(H);if(I>-1){P=P.substring(4);}if(N.toString===Object.prototype.toString||I>-1){N=D.dump(N,parseInt(P,10));}else{N=N.toString();}}}else{if(!D.isString(N)&&!D.isNumber(N)){N="~-"+L.length+"-~";L[L.length]=C;}}Q=Q.substring(0,G)+N+Q.substring(F+1);}for(G=L.length-1;G>=0;G=G-1){Q=Q.replace(new RegExp("~-"+G+"-~"),"{"+L[G]+"}","g");}return Q;},trim:function(A){try{return A.replace(/^\s+|\s+$/g,"");}catch(B){return A;}},merge:function(){var D={},B=arguments;for(var C=0,A=B.length;C<A;C=C+1){YAHOO.lang.augmentObject(D,B[C],true);}return D;},later:function(H,B,I,D,E){H=H||0;B=B||{};var C=I,G=D,F,A;if(YAHOO.lang.isString(I)){C=B[I];}if(!C){throw new TypeError("method undefined");}if(!YAHOO.lang.isArray(G)){G=[D];}F=function(){C.apply(B,G);};A=(E)?setInterval(F,H):setTimeout(F,H);return{interval:E,cancel:function(){if(this.interval){clearInterval(A);}else{clearTimeout(A);}}};},isValue:function(B){var A=YAHOO.lang;return(A.isObject(B)||A.isString(B)||A.isNumber(B)||A.isBoolean(B));}};YAHOO.util.Lang=YAHOO.lang;YAHOO.lang.augment=YAHOO.lang.augmentProto;YAHOO.augment=YAHOO.lang.augmentProto;YAHOO.extend=YAHOO.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.4.0",build:"733"});
/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.4.0
*/
YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){var D=this.subscribers.length;if(!D&&this.silent){return true;}var G=[],F=true,C,H=false;for(C=0;C<arguments.length;++C){G.push(arguments[C]);}if(!this.silent){}for(C=0;C<D;++C){var K=this.subscribers[C];if(!K){H=true;}else{if(!this.silent){}var J=K.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var A=null;if(G.length>0){A=G[0];}try{F=K.fn.call(J,A,K.obj);}catch(E){this.lastError=E;}}else{try{F=K.fn.call(J,this.type,G,K.obj);}catch(E){this.lastError=E;}}if(false===F){if(!this.silent){}return false;}}}if(H){var I=[],B=this.subscribers;for(C=0,D=B.length;C<D;C=C+1){I.push(B[C]);}this.subscribers=I;}return true;},unsubscribeAll:function(){for(var B=0,A=this.subscribers.length;B<A;++B){this._delete(A-1-B);}this.subscribers=[];return B;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers[A]=null;},toString:function(){return"CustomEvent: '"+this.type+"', scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};return{POLL_RETRYS:4000,POLL_INTERVAL:10,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,startInterval:function(){if(!this._interval){var K=this;var L=function(){K._tryPreloadAttach();};this._interval=setInterval(L,this.POLL_INTERVAL);}},onAvailable:function(P,M,Q,O,N){var K=(YAHOO.lang.isString(P))?[P]:P;for(var L=0;L<K.length;L=L+1){F.push({id:K[L],fn:M,obj:Q,override:O,checkReady:N});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(M,K,N,L){this.onAvailable(M,K,N,L,true);},onDOMReady:function(K,M,L){if(this.DOMReady){setTimeout(function(){var N=window;if(L){if(L===true){N=M;}else{N=L;}}K.call(N,"DOMReady",[],M);},0);}else{this.DOMReadyEvent.subscribe(K,M,L);}},addListener:function(M,K,V,Q,L){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var R=0,T=M.length;R<T;++R){W=this.on(M[R],K,V,Q,L)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var P=this.getEl(M);if(P){M=P;}else{this.onAvailable(M,function(){YAHOO.util.Event.on(M,K,V,Q,L);});return true;}}}if(!M){return false;}if("unload"==K&&Q!==this){J[J.length]=[M,K,V,Q,L];return true;}var Y=M;if(L){if(L===true){Y=Q;}else{Y=L;}}var N=function(Z){return V.call(Y,YAHOO.util.Event.getEvent(Z,M),Q);};var X=[M,K,V,N,Y,Q,L];var S=I.length;I[S]=X;if(this.useLegacyEvent(M,K)){var O=this.getLegacyIndex(M,K);if(O==-1||M!=G[O][0]){O=G.length;B[M.id+K]=O;G[O]=[M,K,M["on"+K]];E[O]=[];M["on"+K]=function(Z){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(Z),O);};}E[O].push(X);}else{try{this._simpleAdd(M,K,N,false);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}}return true;},fireLegacyEvent:function(O,M){var Q=true,K,S,R,T,P;S=E[M];for(var L=0,N=S.length;L<N;++L){R=S[L];if(R&&R[this.WFN]){T=R[this.ADJ_SCOPE];P=R[this.WFN].call(T,O);Q=(Q&&P);}}K=G[M];if(K&&K[2]){K[2](O);}return Q;},getLegacyIndex:function(L,M){var K=this.generateId(L)+M;if(typeof B[K]=="undefined"){return -1;}else{return B[K];}},useLegacyEvent:function(L,M){if(this.webkit&&("click"==M||"dblclick"==M)){var K=parseInt(this.webkit,10);if(!isNaN(K)&&K<418){return true;}}return false;},removeListener:function(L,K,T){var O,R,V;if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var U=true;for(O=0,R=L.length;O<R;++O){U=(this.removeListener(L[O],K,T)&&U);}return U;}}if(!T||!T.call){return this.purgeElement(L,false,K);}if("unload"==K){for(O=0,R=J.length;O<R;O++){V=J[O];if(V&&V[0]==L&&V[1]==K&&V[2]==T){J[O]=null;return true;}}return false;}var P=null;var Q=arguments[3];if("undefined"===typeof Q){Q=this._getCacheIndex(L,K,T);}if(Q>=0){P=I[Q];}if(!L||!P){return false;}if(this.useLegacyEvent(L,K)){var N=this.getLegacyIndex(L,K);var M=E[N];if(M){for(O=0,R=M.length;O<R;++O){V=M[O];if(V&&V[this.EL]==L&&V[this.TYPE]==K&&V[this.FN]==T){M[O]=null;break;}}}}else{try{this._simpleRemove(L,K,P[this.WFN],false);}catch(S){this.lastError=S;return false;}}delete I[Q][this.WFN];delete I[Q][this.FN];I[Q]=null;return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(K){if(K&&3==K.nodeType){return K.parentNode;}else{return K;}},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];
},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in D)){K=D[K];}return K;},_getCacheIndex:function(O,P,N){for(var M=0,L=I.length;M<L;++M){var K=I[M];if(K&&K[this.FN]==N&&K[this.EL]==O&&K[this.TYPE]==P){return M;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+A;++A;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(L){if(!H){H=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(this.locked){return false;}if(this.isIE){if(!this.DOMReady){this.startInterval();return false;}}this.locked=true;var P=!H;if(!P){P=(C>0);}var O=[];var Q=function(S,T){var R=S;if(T.override){if(T.override===true){R=T.obj;}else{R=T.override;}}T.fn.call(R,T.obj);};var L,K,N,M;for(L=0,K=F.length;L<K;++L){N=F[L];if(N&&!N.checkReady){M=this.getEl(N.id);if(M){Q(M,N);F[L]=null;}else{O.push(N);}}}for(L=0,K=F.length;L<K;++L){N=F[L];if(N&&N.checkReady){M=this.getEl(N.id);if(M){if(H||M.nextSibling){Q(M,N);F[L]=null;}}else{O.push(N);}}}C=(O.length===0)?0:C-1;if(P){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;return true;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=0,K=Q.length;N<K;++N){var L=Q[N];this.removeListener(M,L.type,L.fn,L.index);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[I,J];}else{if(K==="unload"){L=[J];}else{L=[I];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T&&T.length>0){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(R){var Q=YAHOO.util.Event,O,N,L,K,M;for(O=0,K=J.length;O<K;++O){L=J[O];if(L){var P=window;if(L[Q.ADJ_SCOPE]){if(L[Q.ADJ_SCOPE]===true){P=L[Q.UNLOAD_OBJ];}else{P=L[Q.ADJ_SCOPE];}}L[Q.FN].call(P,Q.getEvent(R,L[Q.EL]),L[Q.UNLOAD_OBJ]);J[O]=null;L=null;P=null;}}J=null;if(YAHOO.env.ua.IE&&I&&I.length>0){N=I.length;while(N){M=N-1;L=I[M];if(L){L[Q.EL].clearAttributes();}N=N-1;}L=null;}G=null;Q._simpleRemove(window,"unload",Q._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var A=YAHOO.util.Event;A.on=A.addListener;if(A.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);A._dri=setInterval(function(){var C=document.createElement("p");try{C.doScroll("left");clearInterval(A._dri);A._dri=null;A._ready();C=null;}catch(B){C=null;}},A.POLL_INTERVAL);}else{if(A.webkit){A._dri=setInterval(function(){var B=document.readyState;if("loaded"==B||"complete"==B){clearInterval(A._dri);A._dri=null;A._ready();}},A.POLL_INTERVAL);}else{A._simpleAdd(document,"DOMContentLoaded",A._ready);}}A._simpleAdd(window,"load",A._load);A._simpleAdd(window,"unload",A._unload);A._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};
var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D.fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyCode,J);break;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.4.0",build:"733"});
/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.4.0
*/
YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(B){var A=YAHOO.util.Event.getTarget(B);if(A.type&&A.type.toLowerCase()=="submit"){YAHOO.util.Connect._submitElementValue=encodeURIComponent(A.name)+"="+encodeURIComponent(A.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(E){var D,A;try{A=new XMLHttpRequest();D={conn:A,tId:E};}catch(C){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);D={conn:A,tId:E};break;}catch(C){}}}finally{return D;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()=="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||null);if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){for(var B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(A){if(this._has_default_headers){for(var B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);
}}}if(this._has_http_headers){for(var B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(K,E,B){this.resetFormState();var J;if(typeof K=="string"){J=(document.getElementById(K)||document.forms[K]);}else{if(typeof K=="object"){J=K;}else{return ;}}if(E){var F=this.createFrame(B?B:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=J;return ;}var A,I,G,L;var H=false;for(var D=0;D<J.elements.length;D++){A=J.elements[D];L=A.disabled;I=A.name;G=A.value;if(!L&&I){switch(A.type){case"select-one":case"select-multiple":for(var C=0;C<A.options.length;C++){if(A.options[C].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(A.options[C].attributes["value"].specified?A.options[C].value:A.options[C].text)+"&";}else{this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(A.options[C].hasAttribute("value")?A.options[C].value:A.options[C].text)+"&";}}}break;case"radio":case"checkbox":if(A.checked){this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(H===false){if(this._hasSubmitListener&&this._submitElementValue){this._sFormData+=this._submitElementValue+"&";}else{this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}H=true;}break;default:this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}}}this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(A){var B="yuiIO"+this._transaction_id;var C;if(window.ActiveXObject){C=document.createElement("<iframe id=\""+B+"\" name=\""+B+"\" />");if(typeof A=="boolean"){C.src="javascript:false";}else{if(typeof secureURI=="string"){C.src=A;}}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[];var B=A.split("&");for(var C=0;C<B.length;C++){var E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=B[C].substring(0,E);D[C].value=B[C].substring(E+1);this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,M,E,C){var N=this;var H="yuiIO"+D.tId;var I="multipart/form-data";var K=document.getElementById(H);var J=(M&&M.argument)?M.argument:null;var B={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",H);if(this._formNode.encoding){this._formNode.setAttribute("encoding",I);}else{this._formNode.setAttribute("enctype",I);}if(C){var L=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,J);if(D.startEvent){D.startEvent.fire(D,J);}if(M&&M.timeout){this._timeOut[D.tId]=window.setTimeout(function(){N.abort(D,M,true);},M.timeout);}if(L&&L.length>0){for(var G=0;G<L.length;G++){this._formNode.removeChild(L[G]);}}for(var A in B){if(YAHOO.lang.hasOwnProperty(B,A)){if(B[A]){this._formNode.setAttribute(A,B[A]);}else{this._formNode.removeAttribute(A);}}}this.resetFormState();var F=function(){if(M&&M.timeout){window.clearTimeout(N._timeOut[D.tId]);delete N._timeOut[D.tId];}N.completeEvent.fire(D,J);if(D.completeEvent){D.completeEvent.fire(D,J);}var P={};P.tId=D.tId;P.argument=M.argument;try{P.responseText=K.contentWindow.document.body?K.contentWindow.document.body.innerHTML:K.contentWindow.document.documentElement.textContent;P.responseXML=K.contentWindow.document.XMLDocument?K.contentWindow.document.XMLDocument:K.contentWindow.document;}catch(O){}if(M&&M.upload){if(!M.scope){M.upload(P);}else{M.upload.apply(M.scope,[P]);}}N.uploadEvent.fire(P);if(D.uploadEvent){D.uploadEvent.fire(P);}YAHOO.util.Event.removeListener(K,"load",F);setTimeout(function(){document.body.removeChild(K);N.releaseObject(D);},100);};YAHOO.util.Event.addListener(K,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.4.0",build:"733"});
 /**
 * Validator Javascript set use fo:	
 *	1.	Form Javascript validation set
 * File: validator.js
 *
 * @Created clloke <chenlin@jobstreet.com>
 */

/**
 * Casting Data Type
 * @param string sText. value to be cast.
 * @param string sType. data type
 * @return mix cast data type.
 */
function typeCasting(sText, sType)
{
	sType = sType.toLowerCase();
	switch(sType)
	{
		case 'int': 
		case 'integer': 
			sText = parseInt(sText);	
			break;		
		case 'float':
		case 'double':			
			sText = parseFloat(sText);	
			break;		
		case 'boolean': sText = Boolean(sText);	break;
		case 'date': break;
		case 'string': 
		default : 
			sText = sText.toString();	
			break;
	}
	return sText;
}

function changeDate(oCtrl, sName, bHandle)
{
	var oDate = document.getElementsByName(sName);	
	if(typeof(oDate) == 'undefined') return false;

	var bComplete = true;

	var oDay = document.getElementsByName(sName + '_day');	
	sDay = oDay[0].selectedIndex;
	if(typeof(sDay) == 'undefined' || sDay == 0) bComplete = false;
	
	var oMonth = document.getElementsByName(sName + '_month');	
	sMonth = oMonth[0].selectedIndex;
	if(typeof(sMonth) == 'undefined' || sMonth == 0) bComplete = false;

	var oYear = document.getElementsByName(sName + '_year');	
	sYear = oYear[0].selectedIndex;
	if(typeof(sYear) == 'undefined' || sYear == 0) bComplete = false;
		
	if(bComplete == false)	
	{
		oDate[0].value = '' ;
		return;
	}
	var sDate = oDay[0].value + '-' + oMonth[0].value + '-' + oYear[0].value ;
	oDate[0].value = sDate;	
	
	if(typeof(bHandle) != 'undefined' && bHandle == true) core_validator.onCheckComponent(oDate[0]);
}
	/*---------------------------------------------------------------------------------------------
		Validation Component Part
	---------------------------------------------------------------------------------------------*/

/**
 * Check Empty/Required
 * @param string sText. value to be check.
 * @return boolean. true = pass | false = fail
 */
function isRequired(sText)
{
	if(trim(sText) == '') return false;
	return true;
}

/**
 * Check on regex
 * @param string regex. regex.
 * @param string sText. value to be check.
 * @return boolean. true = pass | false = fail
 */
function checkRegEx(regex, sText)
{
	//no checking for empty value
	if(trim(sText) == '') return true; 

	sText = sText.toString();
	var strRegex = new RegExp(regex);

	if (strRegex.test(sText)) return true; 
	return false;
}

/**
 * Check on valid value like email, date
 * @param string sText. value to be check.
 * @param string sType. data type
 * @return boolean. true = pass | false = fail
 */
function checkValid(sText, sType)
{
	switch (sType)
	{
		case 'date':
			return checkDate(sText);
			break;
	}
	return true;
}

function checkDate(sText)
{
	var sDate = getStrDate(sText, '-');
	var aDate = sDate.split('-');
	var sDay = aDate[2];
	var sMonth = aDate[1];
	var sYear = aDate[0]; 

	if (sDay.charAt(0) == 0) sDay = sDay.substr(1,sDay.length);
	if (sMonth.charAt(0) == 0) sMonth = sMonth.substr(1,sMonth.length);

	var oDate = new Date(sYear, sMonth-1, sDay);
	if ((oDate.getMonth()+1 != sMonth) || (oDate.getDate() != sDay) || (oDate.getFullYear() != sYear))
	{
		return false;
	}
	return true;
}

/**
 * Check on min range
 * @param string minValue. minimum value
 * @param string sText. value to be check.
 * @param string sType. data type
 * @return boolean. true = pass | false = fail
 */
function checkRangeMin(minValue, sText, sType)
{
	//no checking for empty value
	if(trim(sText) == '') return true; 

	sText = typeCasting(sText, sType);
	minValue = typeCasting(minValue, sType);
	if(sType == 'date') 
	{
		sText = getStrDate(sText);
		minValue = getStrDate(minValue);
	}
	if (sText >= minValue) return true; 
	return false;
}

/**
 * Check on max range
 * @param string maxValue. maximum value
 * @param string sText. value to be check.
 * @param string sType. data type
 * @return boolean. true = pass | false = fail
 */
function checkRangeMax(maxValue, sText, sType)
{
	//no checking for empty value
	if(trim(sText) == '') return true; 

	sText = typeCasting(sText, sType);
	maxValue = typeCasting(maxValue, sType);
	if(sType == 'date') 
	{
		sText = getStrDate(sText);
		maxValue = getStrDate(maxValue);
	}
	if (sText <= maxValue) return true; 
	return false;
}

/**
 * Compare value
 * @param string strTag. compare tag
 * @param string strCompare. compare value
 * @param string sText. value to be check.
 * @param string sType. data type
 * @return boolean. true = pass | false = fail
 */
function checkCompare(strTag, strCompare, sText, sType)
{
	//no checking for empty value
	if(trim(sText) == '') return true; 
	if(sType == 'date') 
	{
		var sText = getStrDate(sText);
		var strCompare = getStrDate(strCompare);
		sType = 'integer';
	}
	
	sText = typeCasting(sText, sType);
	strCompare = typeCasting(strCompare, sType);	
	strTag = strTag.toString();	

	switch(strTag)
	{
		case ">"	: if (sText > strCompare) return true; break;
		case ">="	: if (sText >= strCompare) return true; break;
		case "<"	: if (sText < strCompare) return true; break;
		case "<="	: if (sText <= strCompare) return true; break;
		case "="	: if (sText == strCompare) return true; break;
		case "!="	: if (sText != strCompare) return true; break;
	}
	return false;
}

/**
 * recompile date in yyyy-mm-dd format
 * @param string sText. value to be recompiled.
 * @param string strDelimeter. delimeter
 * @return string.
 */
function getStrDate(sText, strDelimeter)
{
	//Support 4 delimeter /- . (slash,dash,dot,space) and year should be 4 char
	//Return server format in yyyy<strDelimeter>mm<strDelimeter>dd

	var arrDate = new Array();
	arrDate = sText.split("/");	
	if(arrDate.length != 3) arrDate = sText.split("-");
	if(arrDate.length != 3) arrDate = sText.split(".");	
	if(arrDate.length != 3) arrDate = sText.split(" ");	
	if(arrDate.length != 3) return false;	
	
	var year;
	var month;
	var day;
	if(arrDate[0].length == 4) 
	{
		year = arrDate[0];
		month = arrDate[1];
		day = arrDate[2];
	}
	else if(arrDate[2].length == 4)
	{
		year = arrDate[2];
		month = arrDate[1];
		day = arrDate[0];
	}
	else return false;	

	if(month.length == 1) month = '0' + month;
	if(day.length == 1) day = '0' + day;
	
	if(typeof(strDelimeter) == 'undefined' || strDelimeter == null) strDelimeter = '';

	var strDate = year + strDelimeter +  month + strDelimeter + day;
	return strDate;
}

/**
 * Check on min length
 * @param string intMin. minimum value
 * @param string sText. value to be check.
 * @return boolean. true = pass | false = fail
 */
function checkLengthMin(intMin, sText)
{
	sText = sText.toString();
	if (sText.length < parseInt(intMin)) return false;	
	return true;
}

/**
 * Check on max length
 * @param string intMax. maximum value
 * @param string sText. value to be check.
 * @return boolean. true = pass | false = fail
 */
function checkLengthMax(intMax, sText)
{
	sText = sText.toString();
	if (sText.length > parseInt(intMax)) return false;	
	return true;
}	

/**
 * Check on Required within a group
 * @param string sText. value to be check.
 * @param array group. other dom object to check
 * @return boolean. true = pass | false = fail
 */
function checkRequired(sText, aGroup)
{
	var bResult = isRequired(sText);
	if(bResult) return true;
	if(aGroup.length > 0)
	{
		for (var i =0; i<aGroup.length; i++)
		{
			var aObjCtrl = document.getElementsByName(aGroup[i]);
			for (var j=0; j<aObjCtrl.length ; j++ )
			{
				if(typeof(aObjCtrl[j].value) == 'undefined') continue;
				if(trim(aObjCtrl[j].value) == "") continue;
				bResult = true;
			}
		}
		return bResult;
	}	
}

/**
 * Check on Required within a group
 * @param string sText. value to be check.
 * @param array param. reserve param
 * @return boolean. true = pass | false = fail
 */
function checkRequiredList(oCtrl, sParam, bCoreValidation)
{
	var aParam = sParam.split(",");
	var intMin = aParam[0];
	var intMax = aParam[1];
	if(oCtrl.multiple == false)
	{
		if(oCtrl.length > 1 && intMin > 0) if(oCtrl.value == "" || oCtrl.value == "00") 
		{
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_SELECT ;
			else return false;
		}
	}
	else
	{
		var iCntSel = 0;
		for(var i=0; i < oCtrl.length ; i++) if(oCtrl.options[i].selected) iCntSel++;
		if(iCntSel < intMin ) 
		{
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_SELECT_MIN;
			else return false;
		}
		if(iCntSel > intMax)
		{
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_SELECT_MAX;
			else return false;
		}
	}
	return true;
}

/**
 * Check on Required within a group
 * @param string sText. value to be check.
 * @param array param. reserve param
 * @return boolean. true = pass | false = fail
 */
function checkRequiredCb(oCtrl, sParam, bCoreValidation)
{
	var aParam = sParam.split(",");
	var intMin = aParam[0];
	var intMax = aParam[1];

	var aCtrl = document.getElementsByName(oCtrl.name);
	if(aCtrl.length == 1)
	{
		if(oCtrl.checked == false)
		{	
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_CHECK;
			return false;
		}
	}
	else
	{
		var iCntSel = 0;
		for(var i=0; i < aCtrl.length ; i++) if(aCtrl[i].checked == true) iCntSel++;

		if(iCntSel < intMin ) 
		{
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_CHECK_MIN;
			else return false;
		}
		if(iCntSel > intMax)
		{
			if(bCoreValidation) return vConfig.error.ERR_REQUIRED_CHECK_MAX;
			else return false;
		}
	}
	return true;
}

/**
 * Check on Required within a group
 * @param string sText. value to be check.
 * @param array param. reserve param
 * @return boolean. true = pass | false = fail
 */
function checkRequiredRadio(oCtrl, aParam)
{ 
	var sName = oCtrl.name;
	var aElement = document.getElementsByName(sName);
	var bResult = false;
	for (var i =0; i<aElement.length; i++)
	{
		var aObjCtrl = aElement[i];
		if(aObjCtrl.checked == true)bResult = true;		
	}
	return bResult;
}

/**
 * Check on Required within a group
 * @param string sText. value to be check.
 * @param array group. other dom object to check
 * @return boolean. true = pass | false = fail
 */
function checkMatch(sText, aMatch)
{
	if(aMatch.length > 0)
	{
		var bResult = true;
		for (var i =0; i<aMatch.length; i++)
		{
			var aObjCtrl = document.getElementsByName(aMatch[i]);
			for (var j=0; j<aObjCtrl.length ; j++ )
			{
				if(typeof(aObjCtrl[j].value) == 'undefined') continue;
				if(trim(aObjCtrl[j].value) == "") continue;
				if(sText != aObjCtrl[j].value) bResult = false;
			}
		}
		return bResult;
	}
}

//sText=file name
//aConf=<max size>,<format seperate by |>
function checkFile(oCtrl, aConf)
{
	if(oCtrl.form.enctype == '')
	{
		// Developer Msg
		var sMsg = "Missing enctype in form tag";
		alert(sMsg);		
	}

	if(typeof(aConf[0]) != 'undefined')
	{
		//browser not allow to check file size
		var iMaxSize = aConf[0];
	}

	if(typeof(aConf[1]) != 'undefined')
	{
		var sFormat = aConf[1];
	}
	//current not yet solution for checking file at client side without activeX
	return true;
}

var vConfig = {
	//Validation Type
	type: {	
		TYP_REQUIRED: "REQUIRED",				//Required validation 
		TYP_REQUIRED_LIST: "REQUIRED_LIST",		//Required validation 
		TYP_REQUIRED_RADIO: "REQUIRED_RADIO",	//Required validation 
		TYP_REQUIRED_CB: "REQUIRED_CB",			//Required validation 
		TYP_FORMAT: "FORMAT",				//Format validation
		TYP_LENGTH_MIN: "LENGTH_MIN",		//Length min value
		TYP_LENGTH_MAX: "LENGTH_MAX",		//Length max value
		TYP_RANGE_MIN: "RANGE_MIN",		//Range min value
		TYP_RANGE_MAX: "RANGE_MAX",			//Range max value
		TYP_COMPARE_TAG: "COMPARE_TAG",		//Comparison tag
		TYP_COMPARE_VALUE: "COMPARE_VALUE",	//Comparison Target value
		TYP_CUSTOM_FUNC: "FUNCTION",			//Customize function 
		TYP_CUSTOM_PARAM: "PARAM",			//Customize function parameter
		TYP_MATCH: "MATCH",					//Matching
		TYP_FILE: "FILE",					//File
		TYP_TYPE: "TYPE",						//data type
		TYP_DIV: "EDIV",						//error msg div		
		TYP_LABEL: "LABEL",						//error msg label
		TYP_DELIMITER: "DELIMITER"						//error msg label
	},
	
	//Validation Expression
	exp: {
		EXP_INT_POSITIVE	: /^\d+$/ ,			//+ integer 
		EXP_INT_NEGATIVE	: /^-\d+$/ ,		//- integer 
		EXP_INT				: /^-{0,1}\d+$/ ,	//+/- integer 
		EXP_NUMBER_POSITIVE	: /^\d*\.{0,1}\d+$/ ,			//+ number
		EXP_NUMBER_NEGATIVE	: /^-\d*\.{0,1}\d+$/ ,		//- number
		EXP_NUMBER			: /^-{0,1}\d*\.{0,1}\d+$/ ,	//+/- number
		EXP_CURRENCY	: /^\d+(\.\d{0,2})?$/ ,		//+ currency with 2 decimal
		EXP_RATE		: /^\d+(\.\d{0,4})?$/ ,		//+ rate with 4 decimal
		EXP_STRING_ALPHA	: /^([a-zA-Z]+)$/ ,		//Alphabet only
		EXP_STRING_ALPHANUM	: /^([0-9A-Za-z]+)$/ ,		//Alphabet & Numeric only
		EXP_STRING			: /^([0-9A-Za-z_]+)$/ ,	//Alphabet & Numeric & _
		EXP_STRING_NAME		: /^([0-9A-Za-z_\.]+)$/ ,	//Alphabet & Numeric & _
		EXP_YEAR		: /^(19|20)[\d]{2,2}$/ ,	//Year From 1900 - 2099
		/* dd/mm/yyyy | dd-mm-yyyy */
		EXP_DATE_DMY	: /^([1-9]|0[1-9]|[12][0-9]|3[01])[\/|-]([1-9]|0[1-9]|1[012])[\/|-](19|20)\d\d$/ ,
		/* yyyy-mm-dd | yyyy/mm/dd */
		EXP_DATE_YMD	: /^(19|20)\d\d[\/|-]([1-9]|0[1-9]|1[012])[\/|-]([1-9]|0[1-9]|[12][0-9]|3[01])$/ , 
		EXP_DOMAIN : /^([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$/ ,				//Domain Name
		EXP_URL	   : /^https?:\/\/([-\w\.]+)+(:\d+)?(\/([\w\/_\.]*(\?\S+)?)?)?$/ ,	//Url
		/* Ip address */
		EXP_IPV4   : /^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$/ ,	
		/* Email */
		EXP_EMAIL  : /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/ 	
	},
	
	//Validation Error Code
	error: {
		ERR_REQUIRED	: "ERR_REQUIRED",	//required field missing
		ERR_REQUIRED_SELECT : "ERR_REQUIRED_SELECT",	//required field missing - select
		ERR_REQUIRED_SELECT_MAX : "ERR_REQUIRED_SELECT_MAX",	//required field at min - select
		ERR_REQUIRED_SELECT_MIN : "ERR_REQUIRED_SELECT_MIN",	//required field at max - select
		ERR_REQUIRED_CHECK :  "ERR_REQUIRED_CHECK",	//required field missing - check
		ERR_REQUIRED_CHECK_MAX : "ERR_REQUIRED_CHECK_MAX",	//required field at min - select
		ERR_REQUIRED_CHECK_MIN : "ERR_REQUIRED_CHECK_MIN",	//required field at max - select
		ERR_FORMAT		: "ERR_FORMAT",		//format error
		ERR_RANGE_MIN	: "ERR_RANGE_MIN",	//min value is required
		ERR_RANGE_MAX	: "ERR_RANGE_MAX",	//max value exceed
		ERR_COMPARE		: "ERR_COMPARE",	//compare error
		ERR_LENGTH_MIN	: "ERR_LENGTH_MIN",	//min length is required
		ERR_LENGTH_MAX	: "ERR_LENGTH_MAX",	//max length exceed
		ERR_CUSTOM		: "ERR_CUSTOM",		//custom function error
		ERR_INVALID		: "ERR_INVALID",		//invalid input
		ERR_MATCH		: "ERR_MATCH",		//match input
		ERR_FILE_MAXSIZE : "ERR_FILE_MAXSIZE",
		ERR_FILE_EXT : "ERR_FILE_EXT",		
		ERR_FILE_INI_SIZE : "ERR_FILE_INI_SIZE",		//STANDARD PHP FILE UPLOAD ERROR
		ERR_FILE_FORM_SIZE : "ERR_FILE_FORM_SIZE",		//STANDARD PHP FILE UPLOAD ERROR
		ERR_FILE_PARTIAL : "ERR_FILE_PARTIAL",			//STANDARD PHP FILE UPLOAD ERROR
		ERR_FILE_NO_TMP_DIR : "ERR_FILE_NO_TMP_DIR",	//STANDARD PHP FILE UPLOAD ERROR
		ERR_FILE_CANT_WRITE : "ERR_FILE_CANT_WRITE",	//STANDARD PHP FILE UPLOAD ERROR
		ERR_FILE_EXTENSION : "ERR_FILE_EXTENSION"		//STANDARD PHP FILE UPLOAD ERROR
	},

	form : "",
	
	key : "",

	getType:function(sType)
	{
		if(this.isKeyExist() == false) return "";
		var sJs = "var sVal = this.oKey." + sType ;
		eval(sJs);
		if(typeof(sVal) == 'undefined') return "";
		return sVal;
	},	
	
	getError:function(sKey)
	{	
		if(this.isFormExist() == false) return "";
		if(typeof(this.oFrom.error) == 'undefined') return "";
		sKey = sKey.replace("[]", "");
		if(typeof(this.oFrom.error[sKey]) == 'undefined') return "";
		return this.oFrom.error[sKey];	
	},

	getErrorInput:function(sKey)
	{	
		if(this.isFormExist() == false) return "";
		if(typeof(this.oFrom.errorInput) == 'undefined') return "";
		sKey = sKey.replace("[]", "");
		if(typeof(this.oFrom.errorInput[sKey]) == 'undefined') return "";
		return this.oFrom.errorInput[sKey];	
	},
	
	addError:function(sKey, sCode, sInput)
	{	
		if(this.isFormExist() == false) return "";
		if(typeof(this.oFrom.error) != 'object') this.oFrom.error = new Array();
		sKey = sKey.replace("[]", "");
		this.oFrom.error[sKey] = sCode;
		if(typeof(sInput) != 'undefined') 
		{
			if(typeof(this.oFrom.errorInput) != 'object') this.oFrom.errorInput = new Array();
			this.oFrom.errorInput[sKey] = sInput;
		}
	},
	
	killError:function(sKey)
	{
		if(typeof(this.oFrom.error) == 'undefined') return "";
		sKey = sKey.replace("[]", "");
		this.oFrom.error[sKey] = 'undefined';
	},

	getRegex:function(regex)
	{	
		var sJs = "var regex = vConfig.exp." + regex + ";";
		eval(sJs);
		return regex;
	},
	
	isKeyExist:function()
	{
		if(this.isFormExist() == false) return false;
		sKey = this.key.replace("[]", "");
		var sJs = "var oKey = vConfig." + this.form + "." + sKey + ";";
		eval(sJs);
		if(typeof(oKey) != 'object') return false;
		this.oKey = oKey;
		return true;
	},

	isFormExist:function()
	{
		var sJs = "var oForm = vConfig." + this.form + ";";
		eval(sJs);		
		if(typeof(oForm) != 'object') return false;
		this.oFrom = oForm;
		return true;
	}
	
	
};//end config object

	/*---------------------------------------------------------------------------------------------
		Core Validation Part
	---------------------------------------------------------------------------------------------*/

var core_validator = {
	onCheckComponent:function(oCtrl) {
		/**
		 * Check Component upon event
		 * @param object oCtrl. component
		 * @return boolean. true = pass | false = fail
		 */
		if(oCtrl == null) return true;
		var sText = trim(oCtrl.value);
		var sForm = oCtrl.form.name;
		var sKey = oCtrl.name; 

		//get js config form object
		vConfig.form = sForm;
		vConfig.key = sKey;
		var sType = vConfig.getType(vConfig.type.TYP_TYPE);
		var bResult = true;

		//check required
		var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED);
		var aRequired = sRequired.split(","); 
		if(aRequired[0] == 1 || aRequired[0] == 'true')
		{				
			aRequired.shift();
			if (!checkRequired( sText, aRequired ))
			{
				vConfig.addError(sKey, vConfig.error.ERR_REQUIRED);
				bResult = false;
			}
		}

		//check list
		var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_LIST);			 
		if(sRequired != "")
		{		
			var sRequired = checkRequiredList(oCtrl, sRequired, true );
			if (!(sRequired == true))
			{
				vConfig.addError(sKey, sRequired);
				bResult = false;
			}
		}

		//check checkbox
		var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_CB);
		if(sRequired != "")
		{		
			var sRequired = checkRequiredCb( oCtrl, sRequired , true);
			if (!(sRequired == true))
			{
				vConfig.addError(sKey, sRequired);
				bResult = false;
				//do uncheck here
				if(sRequired == vConfig.error.ERR_REQUIRED_CHECK_MAX) oCtrl.checked = false;
			}
		}

		//check radio
		var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_RADIO);
		var aRequired = sRequired.split(","); 
		if(aRequired[0] == 1 || aRequired[0] == 'true')
		{		
			aRequired.shift();
			if (!checkRequiredRadio(oCtrl, aRequired ))
			{
				vConfig.addError(sKey, vConfig.error.ERR_REQUIRED_SELECT);
				bResult = false;
			}
		}

		//skip check on empty value
		if(bResult && sText == '') 
		{
			this.isValidInput(sForm,sKey);
			return true;
		}

		var aValue = new Array(sText);
		//Check for delimiter
		var sDelimiter = vConfig.getType(vConfig.type.TYP_DELIMITER);
		if(sDelimiter != "") var aValue = sText.split(sDelimiter);
	
		for (var i=0; i< aValue.length ; i++ )
		{
			var sSubText = trim(aValue[i]);
			//check format
			var strRegex = vConfig.getType(vConfig.type.TYP_FORMAT);
			if(bResult && strRegex != '')
			{
				strRegex = vConfig.getRegex(strRegex);
				if (!checkRegEx(strRegex,sSubText))
				{		
					vConfig.addError(sKey, vConfig.error.ERR_FORMAT, sSubText);
					bResult = false;
				}
			}

			//check min length
			var intLengthMin = vConfig.getType(vConfig.type.TYP_LENGTH_MIN);
			if(bResult && intLengthMin != '')
			{
				if (!checkLengthMin(intLengthMin, sSubText))
				{
					vConfig.addError(sKey, vConfig.error.ERR_LENGTH_MIN, sSubText);
					bResult = false;
				}
			}

			//check max length
			var intLengthMax = vConfig.getType(vConfig.type.TYP_LENGTH_MAX);
			if(bResult && intLengthMax != '')
			{
				if (!checkLengthMax(intLengthMax, sSubText))
				{
					vConfig.addError(sKey, vConfig.error.ERR_LENGTH_MAX, sSubText);
					bResult = false;
				}
			}

			//check valid
			if(bResult)
			{
				if (!checkValid(sSubText, sType))
				{
					vConfig.addError(sKey, vConfig.error.ERR_INVALID, sSubText);
					bResult = false;
				}
			}

			//check min range
			var mixRangeMin = vConfig.getType(vConfig.type.TYP_RANGE_MIN); 
			if(bResult && mixRangeMin != '')
			{
				if (!checkRangeMin(mixRangeMin, sSubText, sType))
				{
					vConfig.addError(sKey, vConfig.error.ERR_RANGE_MIN, sSubText);
					bResult = false;
				}
			}

			//check max range
			var mixRangeMax = vConfig.getType(vConfig.type.TYP_RANGE_MAX); 
			if(bResult && mixRangeMax != '')
			{
				if (!checkRangeMax(mixRangeMax, sSubText, sType))
				{
					vConfig.addError(sKey, vConfig.error.ERR_RANGE_MAX, sSubText);
					bResult = false;
				}
			}
			
			//check compare
			var strCompareTag = vConfig.getType(vConfig.type.TYP_COMPARE_TAG); 
			var strCompareValue = vConfig.getType(vConfig.type.TYP_COMPARE_VALUE);  
			if(bResult && strCompareTag != '' && strCompareValue != '')
			{ 
				if (!checkCompare(strCompareTag, strCompareValue, sSubText, sType))
				{
					vConfig.addError(sKey, vConfig.error.ERR_COMPARE, sSubText);
					bResult = false;
				}
			}
			if (!bResult) break;
		}//end for each delimiter

		//check match
		var sMatch =  vConfig.getType(vConfig.type.TYP_MATCH); 
		if(bResult && sMatch != '')
		{ 
			if (!checkMatch( sText, sMatch.split(",") ))
			{
				vConfig.addError(sKey, vConfig.error.ERR_MATCH);
				bResult = false;
			}
		}

		//check File
		var sFile =  vConfig.getType(vConfig.type.TYP_FILE); 
		if(bResult && sFile != '')
		{ 
			var sRequired = checkFile( oCtrl, sFile.split(",") );
			if (!(sRequired == true))
			{
				vConfig.addError(sKey, sRequired);
				bResult = false;
			}
		}
		
		//check custom
		var strCustomFunc = vConfig.getType(vConfig.type.TYP_CUSTOM_FUNC); 
		var aParam = vConfig.getType(vConfig.type.TYP_CUSTOM_PARAM);
		aParam = aParam.split(',');
		if(bResult && strCustomFunc != '')
		{	
			if (!eval(strCustomFunc + "(oCtrl, aParam)"))
            {
				vConfig.addError(sKey, vConfig.error.ERR_CUSTOM);            
                bResult = false;
            }
		}

		if(bResult) this.isValidInput(sForm, sKey);
		else this.onHandleErrorByKey(sForm, sKey);
	},//end onCheckComponent
	
	onCheckSubmit:function(oCtrl)
	{
		/**
		 * Check Component upon submit
		 * @param object oCtrl. component
		 * @return boolean. true = pass | false = fail
		 */
		if(oCtrl == null) return true;
		var sForm = oCtrl.form.name;
		vConfig.form = sForm;
		var sKey ;
	
		var sErrMsg ;
		var bError = false;

		var aField = oCtrl.form.getElementsByTagName('*');
		for (var i=0; i<aField.length; i++)
		{
			// Allow for multiple values being assigned to the class attribute
			sKey = aField[i].getAttribute('name');
			if(sKey == null) continue;
			if(sKey == '') continue;

			vConfig.key = sKey;
			
			var sText = trim(aField[i].value);
			
			var sType = vConfig.getType(vConfig.type.TYP_TYPE) ;
		
			//check required
			var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED);
			var aRequired = sRequired.split(","); 
			if(aRequired[0] == 1 || aRequired[0] == 'true')
			{		
				aRequired.shift();
				if (!checkRequired( sText, aRequired ))
				{
					vConfig.addError(sKey, vConfig.error.ERR_REQUIRED);
					bError = true;
					continue;
				}
			}

			//check list
			var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_LIST);			 
			if(sRequired != "")
			{		
				var sRequired = checkRequiredList( aField[i], sRequired, true );
				if (!(sRequired == true))
				{
					vConfig.addError(sKey, sRequired);
					bError = true;
					continue;
				}
			}

			//check checkbox
			var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_CB);
			if(sRequired != "")
			{		
				var sRequired = checkRequiredCb( aField[i], sRequired , true);
				if (!(sRequired == true))
				{
					vConfig.addError(sKey, sRequired);
					bError = true;
					continue;
				}
			}

			//check radio
			var sRequired = vConfig.getType(vConfig.type.TYP_REQUIRED_RADIO);
			var aRequired = sRequired.split(","); 
			if(aRequired[0] == 1 || aRequired[0] == 'true')
			{		
				aRequired.shift();
				if (!checkRequiredRadio( aField[i], aRequired ))
				{
					vConfig.addError(sKey, vConfig.error.ERR_REQUIRED_SELECT);
					bError = true;
					continue;
				}
			}

			//skip check on empty value
			if(sText == '') 
			{
				this.isValidInput(sForm,sKey);
				continue;
			}

			var aValue = new Array(sText);
			//Check for delimiter
			var sDelimiter = vConfig.getType(vConfig.type.TYP_DELIMITER);
			if(sDelimiter != "") var aValue = sText.split(sDelimiter);
		
			for (var j=0; j< aValue.length ; j++ )
			{
				var sSubText = trim(aValue[j]);
				var bSubError = false;

				//check format
				var strRegex = vConfig.getType(vConfig.type.TYP_FORMAT);
				if(strRegex != '')
				{
					strRegex = vConfig.getRegex(strRegex);
					if (!checkRegEx(strRegex,sSubText))
					{		
						vConfig.addError(sKey, vConfig.error.ERR_FORMAT, sSubText);
						bSubError = true;
						break;
					}
				}

				//check min length
				var intLengthMin = vConfig.getType(vConfig.type.TYP_LENGTH_MIN); 
				if(intLengthMin != '')
				{
					if (!checkLengthMin(intLengthMin, sSubText))
					{
						vConfig.addError(sKey, vConfig.error.ERR_LENGTH_MIN, sSubText);
						bSubError = true;
						break;
					}
				}

				//check max length
				var intLengthMax = vConfig.getType(vConfig.type.TYP_LENGTH_MAX);
				if(intLengthMax != '')
				{
					if (!checkLengthMax(intLengthMax, sSubText))
					{
						vConfig.addError(sKey, vConfig.error.ERR_LENGTH_MAX, sSubText);
						bSubError = true;
						break;
					}
				}

				//check valid			
				if (!checkValid(sSubText, sType))
				{
					vConfig.addError(sKey, vConfig.error.ERR_INVALID, sSubText);
					bSubError = true;
					break;
				}		

				//check min range
				var mixRangeMin = vConfig.getType(vConfig.type.TYP_RANGE_MIN); 
				if(mixRangeMin != '')
				{
					if (!checkRangeMin(mixRangeMin, sSubText, sType))
					{
						vConfig.addError(sKey, vConfig.error.ERR_RANGE_MIN, sSubText);
						bSubError = true;
						break;
					}
				}

				//check max range
				var mixRangeMax = vConfig.getType(vConfig.type.TYP_RANGE_MAX);
				if(mixRangeMax != '')
				{
					if (!checkRangeMax(mixRangeMax, sSubText, sType))
					{
						vConfig.addError(sKey, vConfig.error.ERR_RANGE_MAX, sSubText);
						bSubError = true;
						break;
					}
				}
				
				//check Compare
				var strCompareTag = vConfig.getType(vConfig.type.TYP_COMPARE_TAG); 
				var strCompareValue = vConfig.getType(vConfig.type.TYP_COMPARE_VALUE);  
				if(strCompareTag != '' && strCompareValue != '')
				{ 
					if (!checkCompare(strCompareTag, strCompareValue, sSubText, sType))
					{
						vConfig.addError(sKey, vConfig.error.ERR_COMPARE, sSubText);
						bSubError = true;
						break;
					}
				}
			}//end foreach delimiter value

			if(bSubError)
			{
				bError = true;
				continue;
			}

			//check match
			var sMatch =  vConfig.getType(vConfig.type.TYP_MATCH); 
			if(sMatch != '')
			{ 
				if (!checkMatch( sText, sMatch.split(",") ))
				{
					vConfig.addError(sKey, vConfig.error.ERR_MATCH);
					bError = true;
					continue;
				}
			}

			//check File
			var sFile =  vConfig.getType(vConfig.type.TYP_FILE); 
			if(sFile != '')
			{ 
				var sRequired = checkFile( aField[i], sFile.split(",") );
				if (!(sRequired == true))
				{
					vConfig.addError(sKey, sRequired);
					bError = true;
					continue;
				}
			}
			
			//check custom
			var strCustomFunc = vConfig.getType(vConfig.type.TYP_CUSTOM_FUNC); 
			var aParam = vConfig.getType(vConfig.type.TYP_CUSTOM_PARAM);
			aParam = aParam.split(',');
			if(strCustomFunc != '')
			{	
				if (!eval(strCustomFunc + "(aField[i], aParam)"))
				{		
					bError = true;
					continue;
				}
			}

			this.isValidInput(sForm, sKey);
		}

		if(bError)
		{
			this.onHandleError(oCtrl.form);
			return false;
		}
		return true;
	}, //end function onCheckSubmit

	isValidInput:function(sForm, sKey)
	{
		/* Public: Clear Error Msg */
		vConfig.form = sForm;
		vConfig.key = sKey;
		sDiv = vConfig.getType(vConfig.type.TYP_DIV);
		setDivMsg(sDiv, '');
		setObjVisibility(sDiv,'false'); 
		vConfig.killError(sKey);
	},
	
	onHandleError:function(oCtrl)
	{
		/* Public: Handle Error By Config */
		var sForm = oCtrl.name; 
		vConfig.form = sForm;

		var sKey;
		var sError;
		var aField = oCtrl.getElementsByTagName('*');
		for (var i=0; i<aField.length; i++)
		{
			// Allow for multiple values being assigned to the class attribute
			sKey = aField[i].getAttribute('name');
			if(sKey == null) continue; 
			sError = vConfig.getError(sKey);
			if(sError == "") continue;		
			this.onHandleErrorByKey(sForm, sKey);
		}		
	},

	onHandleErrorByKey:function(sForm, sKey)
	{
		/* Public: Handle Error By Config */
		vConfig.form = sForm;
		vConfig.key = sKey;

		var sDiv = vConfig.getType(vConfig.type.TYP_DIV);
		var sError = vConfig.getError(sKey);	
		var sMsg = this.getErrorMsg(sError);
		this.showError(sMsg, sDiv);		
	},
	
	getErrorMsg:function(sCode){
		/* Private: Pass Error Code, Handle Msg Variable, Return Error Msg */
		var sMsg = vConfig.getType(sCode) ; 
		if(sMsg == '') 
		{
			var sJs = "var sMsg = validator_error." + sCode + ";";
			eval(sJs);
		}
		if(typeof( sMsg ) == 'undefined') return "";

		var sLbl = vConfig.getType(vConfig.type.TYP_LABEL) ;
		var sVal = "";
		switch (sCode)
		{
			case vConfig.error.ERR_RANGE_MIN:
				sVal = vConfig.getType(vConfig.type.TYP_RANGE_MIN); 
				break;				
			case vConfig.error.ERR_RANGE_MAX:
				sVal = vConfig.getType(vConfig.type.TYP_RANGE_MAX); 
				break;	
			case vConfig.error.ERR_COMPARE:
				var sTag = vConfig.getType(vConfig.type.TYP_COMPARE_TAG); 
				var sValue = vConfig.getType(vConfig.type.TYP_COMPARE_VALUE);  
				sVal = sTag + ' ' + sValue;
				break;	
			case vConfig.error.ERR_LENGTH_MIN:
				sVal = vConfig.getType(vConfig.type.TYP_LENGTH_MIN); 
				break;	
			case vConfig.error.ERR_LENGTH_MAX:	
				sVal = vConfig.getType(vConfig.type.TYP_LENGTH_MAX);
				break;
			case vConfig.error.ERR_MATCH:	
				sVal = vConfig.getType(vConfig.type.TYP_MATCH); 
				sVal = this.getMatchValue(sVal);
				break;	
			case vConfig.error.ERR_REQUIRED_SELECT_MIN:	
				sVal = vConfig.getType(vConfig.type.TYP_REQUIRED_LIST); 
				sVal = sVal.split(",");
				sVal = sVal[0];
				break;
			case vConfig.error.ERR_REQUIRED_SELECT_MAX:	
				sVal = vConfig.getType(vConfig.type.TYP_REQUIRED_LIST); 
				sVal = sVal.split(",");
				sVal = sVal[1];
				break;
			case vConfig.error.ERR_REQUIRED_CHECK_MIN:	
				sVal = vConfig.getType(vConfig.type.TYP_REQUIRED_CB); 
				sVal = sVal.split(",");
				sVal = sVal[0];
				break;
			case vConfig.error.ERR_REQUIRED_CHECK_MAX:	
				sVal = vConfig.getType(vConfig.type.TYP_REQUIRED_CB); 
				sVal = sVal.split(",");
				sVal = sVal[1];
				break;
			case vConfig.error.ERR_FILE_EXT:
				sVal = vConfig.getType(vConfig.type.TYP_FILE); 
				sVal = sVal.split(";");
				sVal = sVal[1];			
				break;
		}
		
		var sKey = vConfig.key;
		var sIpt = vConfig.getErrorInput(sKey);		
		sMsg = sMsg.replace("lbl_label",sLbl);
		sMsg = sMsg.replace("lbl_value",sVal);
		sMsg = sMsg.replace("lbl_input",sIpt);
		return sMsg;
	},

	showError:function (sMsg, sDiv)
	{
		/*Private: Display Error*/ 
		if(sMsg == "") return;
		var oDiv = document.getElementById(sDiv);
		if(oDiv != null) 
		{
			setObjVisibility(sDiv, 'true'); 
			setDivMsg(sDiv, sMsg);			
		}
	},
	
	getMatchValue:function(sVal)
	{
		/*Private: Get Match Value*/ 
		var aVal = sVal.split(",");
		var sValue = "";
		if(aVal.length > 1)
		{
			for(var i=0; i<aVal.length; i++)
			{
				vConfig.key = aVal[i].toString();
				sValue += vConfig.getType(vConfig.type.TYP_LABEL) ;
				if(i < aVal.length -1)  sValue += " , ";
			}
		}
		else
		{
			vConfig.key = aVal.toString();
			sValue += vConfig.getType(vConfig.type.TYP_LABEL) ;
		}		
		return sValue;
	},
	
	unfoundConfig:function()
	{
		var sMsg = validator_error.ERR_TIMEOUT;
		alert(sMsg);
	}
};//end validate object


var validator_error = {
	ERR_TIMEOUT : "Session Timeout. Please re-submit this form",
	ERR_REQUIRED    : "Please fill in lbl_label !" ,
	ERR_REQUIRED_SELECT   : "Please select lbl_label !" ,
	ERR_REQUIRED_SELECT_MAX   : "Please select maximum lbl_value for lbl_label !" ,
	ERR_REQUIRED_SELECT_MIN   : "Please select minimum lbl_value for lbl_label !" ,
	ERR_REQUIRED_CHECK    : "Please check lbl_label !" ,
	ERR_REQUIRED_CHECK_MAX   : "Please check maximum lbl_value for lbl_label !" ,
	ERR_REQUIRED_CHECK_MIN   : "Please check minimum lbl_value for lbl_label !" ,
	ERR_FORMAT      : "Please enter your lbl_label in a valid format!" ,
	ERR_RANGE_MIN   : "Minimum value of lbl_value for lbl_label !" ,
	ERR_RANGE_MAX	: "Exceed maximum range of lbl_value for lbl_label !" ,
	ERR_COMPARE		: "lbl_label must lbl_value !" ,
	ERR_LENGTH_MIN  : "Length should not less then lbl_value for lbl_label !" ,
	ERR_LENGTH_MAX  : "Exceed maximum length of lbl_value for lbl_label !" ,
	ERR_INVALID		: "Invalid value for lbl_label ! ",
	ERR_MATCH		: "lbl_label should match with lbl_value",
	ERR_FILE_MAXSIZE	: "lbl_label exceeds maximum file size lbl_value",
	ERR_FILE_EXT		: "lbl_label do not match format lbl_value",
	ERR_FILE_INI_SIZE : "lbl_label exceeds the upload_max_filesize directive in php.ini.",
	ERR_FILE_FORM_SIZE : "lbl_label exceeds the MAX_FILE_SIZE directive that specified in HTML form.",
	ERR_FILE_PARTIAL : "lbl_label was only partially uploaded.",
	ERR_FILE_NO_TMP_DIR : "lbl_label was missing a temporary folder.",
	ERR_FILE_CANT_WRITE : "lbl_label was failed to write file to disk.",
	ERR_FILE_EXTENSION : "lbl_label was stopped by extension."		
	
};
