/*COMMON*/
var isIE = document.all ? 1 : 0;
function getObj(id){
	var o = document.getElementById(id);
	if(o==null || typeof(o)=="undefined"){
		o = document.getElementsByName(id);
		if(o) o = o.item(0);
	}
	return o;
}

function offsetLeft(o){ return getOffsetLeft(o);}
function offsetTop(o){ return getOffsetTop(o);}
function getOffsetLeft(o){
	var i = 0;
	while(o!=null && o.offsetParent!=null){
		i += o.offsetLeft;
		o = o.offsetParent;
	}
	return i + (o ? o.offsetLeft : 0);
}

function getOffsetTop(o){
	var i = 0;
	while (o!=null && o.offsetParent!=null){
		i += o.offsetTop;
		o = o.offsetParent;
	}
	return i + (o ? o.offsetLeft : 0);
}

function setFocus(id){	
	ctrl = getObj(id);
	if(!ctrl)
		return;
	if(ctrl.type=="text"){
		ctrl.value = ctrl.value + "";
		ctrl.select();ctrl.focus();
	}
	else
		ctrl.focus();
}

function setStatus(s){
	try{
		getObj("status_bar").innerHTML = s;
	}catch(e){}
}

/*AJAX prev send & response callbacks*/
function prevSendCB(){
	showBkg(1);
}
function responseCB(){
	showBkg(0);
}

function prevRequestCallback(){	
	prevSendCB();
}

function responseCallback(){
	responseCB();
	getObj("tabContent").innerHTML = Ajax.responseText;
}
function showLoadingBox(){
	prevSendCB();
}
function endDialog(){
	responseCB();
}

/*EVENTS*/
function _addEvent(el, evname, func){
	if(isIE) el.attachEvent("on" + evname, func);
	else el.addEventListener(evname, func, true);
}
function _removeEvent(el, evname, func){
	if(isIE) el.detachEvent("on" + evname, func);
	else el.removeEventListener(evname, func, true);
}
function _stopEvent(e){
	if(isIE){
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}else{
		e.preventDefault();
		e.stopPropagation();
	}
}
/*listview*/
//check-clear all table items
var g_szCheckboxName = "";
function checkAll(theCheckBox, theListItem, fchecked){
	if(!theListItem) return;

	if(theCheckBox && !theCheckBox.disabled){
		g_szCheckboxName = theCheckBox.name;
	}
	
	if(!theListItem.length){
		if(!theListItem.disabled){
			theListItem.checked = fchecked;	
			changeBkground(theListItem);
		}
	}
	else{
		for(i=0; i<theListItem.length; ++i){
			if(!theListItem[i].disabled){
				theListItem[i].checked = fchecked;
				changeBkground(theListItem[i]);
			}
		}
	}
	
	if(theCheckBox && !theCheckBox.disabled){	
		theCheckBox.checked = fchecked;		
	}
}

/*listitem's checkbox has been clicked*/
function itemClicked(theCheckbox){
	obj = document.getElementsByName(g_szCheckboxName);
	if(obj && obj.length) obj[0].checked = false;
	changeBkground(theCheckbox);
}

/*change background property of the list item*/
function changeBkground(theCheckBox){
	if(window.listCfg_PreventChangeBkg){
		if(typeof(listCfg_PreventChangeBkg)!=undefined && listCfg_PreventChangeBkg != null) return;
	}else return;
	
	var pTR = document.all ? theCheckBox.parentElement.parentElement : theCheckBox.parentNode.parentNode;
	if(pTR) pTR.style.backgroundColor = theCheckBox.checked ? "#FAF5F5" : "#ffffff";	
}

/*delete all table items*/
function getCheckedItems(theListItem){
	if(!theListItem) return;	
	var count = 0;
	var lpszListItem = new String("");
	
	if(!theListItem.length){
		if(theListItem.checked){
			lpszListItem = theListItem.value + ";"
			count = 1;
		}
	}
	else{
		for(i=0; i<theListItem.length; ++i){
			if(theListItem[i].checked){
				lpszListItem += theListItem[i].value + ",";
				++count;
			}
		}
	}
	
	if(count) return lpszListItem.substr(0, lpszListItem.length-1);
	return null;
}

function listCheckAll(checkId, listItemId, flag){
	obj = document.getElementsByName(checkId);
	if(!obj) obj = document.getElementById(checkId);
	else obj = obj[0];
	olist = document.getElementsByName(listItemId);
	checkAll(obj, olist, flag);
}

/*STRING UTIL CALSS*/
var CStr = {
	trim : function(str){
		if(!str || typeof str != "string")
			return "";
		return str.replace(/^[\s]+/,'').replace(/[\s]+$/,'').replace(/[\s]{2,}/,' ');
	},
	isEmail : function(s){
		var re = /^([a-zA-Z_]+)([a-zA-Z0-9._%-]+)@[\w0-9.-]+\.[\w]{2,4}$/;
		return s.match(re);
	},
	numberFormat:function (n, sep){
		if(sep==null || typeof(sep)!="string") sep = ",";
		s = String(n);
		if(s.length<=3) return s;
		r = ""; i = s.length;
		while(i>=3){
			r = (s.substr(i-3,3)) + (r.length?sep:"") + r;
			i -= 3;
		}
		if(i<-1) i+=3;
		if(i) r = s.substr(0,i) + sep + r;
		return r;
	},
	encode:function(s){
		return encodeURIComponent(s);
	}
}/*CStr*/;

/*DATETIME*/
var CDateTime = {
	isTime : function(s){
		re = /^[\d]{1,2}[:][\d]{1,2}[:][\d]{1,2}$/;	
		if(!s.match(re)) return false;
		parts = s.split(":");
		if(parts.length==3){
			h = parseInt(parts[0]); m = parseInt(parts[1]); s = parseInt(parts[2]);
			return (h>=0&&h<=23) && (m>=0&&m<=60) && (s>=0&&s<=60);
		}
		return false;
	},
	isLeapYear:function (nYear){
		if((nYear%4) || (nYear%100)==0 && (nYear%400))
			return false;
		return true;
	},	
	validateDate:function (m, d, y){
		m = parseInt(m, 10); d = parseInt(d,10); y = parseInt(y,10);
		switch(m){
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12: return d>=1 && d<=31;
			case 4:
			case 6:
			case 9:
			case 11: return d>=1 && d<=30;
			case 2: return CDateTime.isLeapYear(y) ? (d>=1&&d<=29) : (d>=1&&d<=28);			
		}	
		return false;
	},	
	isDate:function (s){
		re = /^[\d]{1,2}[-\/][\d]{1,2}[-\/][\d]{4}$/;	
		if(!s.match(re)) return false;
		s = s.replace(/\//g, "-");
		parts = s.split("-");
		if(parts.length==3){
			d = parts[0]; m = parts[1]; y = parts[2];
			return CDateTime.validateDate(m, d, y);
		}
		return false;
	},
	getDate:function(s){
		re = /^[\d]{1,2}[-\/][\d]{1,2}[-\/][\d]{4}$/;	
		if(!s.match(re)) return false;
		s = s.replace(/\//g, "-");
		part = s.split("-");
		if(part.length==3){
			part[0] = parseInt(part[0]); part[1] = parseInt(part[1]); part[2] = parseInt(part[2]);
			return part;
		}
		return null;
	},
	compare:function(s1, s2){
		d1 = CDateTime.getDate(s1);
		d2 = CDateTime.getDate(s2);
		if(d1==null || d2==null) return false;
		if(d1[2]>d2[2]) return 1;
		else if(d1[2]<d2[2]) return -1;
		else{
			if(d1[1]>d2[1]) return 1;
			else if(d1[1]<d2[1]) return -1;
			else{
				if(d1[0]>d2[0]) return 1;
				else if(d1[0]<d2[0]) return -1;
				else return 0;
			}
		}
	}
};