var agt=navigator.userAgent.toLowerCase();
var is_ie= ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));

function openNewWindow(url, w, h)
{
	// open a blank window
	w = (w==null) ? 600 : w;
	h = (h==null) ? 400 : h;
	var aWindow = makePopup(url, '_blank', w, h, 'yes', 'yes');
}

function makePopup(pageURL, pageName, w, h, pageScroll, pageCenter)
{
	if(pageCenter == 'no')	{
		LeftPosition = 10;
		TopPosition = 10;
	} else {
		LeftPosition = (screen.width) ? (screen.width-w) / 2 : 0;
		TopPosition = (screen.height) ? (screen.height-h) / 2 : 0;
	}

	var pageConfig = 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=' + pageScroll + ', resizable=yes, width=' + (w + 18) + ', height=' + (h + 18) + ', left=' + LeftPosition + ', top=' + TopPosition;
	var popup = window.open(pageURL+'&popup=1', pageName, pageConfig);
	popup.focus();
	return popup;
}

function swapDisplayM(id)
{
	obj = findObject(id);
	if(obj.style.display=='none'){
		obj.style.display = 'block';
	} else {
		obj.style.display = 'none';
	}		
}

function swapDisplay(obj)
{
	obj = findObject(obj);
	if(obj.style.display=='none'){
		obj.style.display = '';
	} else {
		obj.style.display = 'none';
	}		
}

function showHide(obj1, obj2)
{
	obj1 = findObject(obj1);
	obj2 = findObject(obj2);
	obj1.style.display=='';	
	obj2.style.display=='none';		
}

function setCookie(cName, cValue)
{
	var argv = setCookie.arguments;
	var argc = setCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	document.cookie = cName + "=" + escape (cValue) +
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
	((path == null) ? "" : ("; path=" + path)) +
	((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : "");	
}

function getCookie(keyName)
{
	var nameEQ = keyName + "=";
	var ca = document.cookie.split (';');
	for (var i = 0; i < ca.length; i ++)
	{
		var c = ca [i];
		while (c.charAt (0) == ' ') c = c.substring (1, c.length);
		if (c.indexOf (nameEQ) == 0) return c.substring (nameEQ.length, c.length);
	}
	return null;
}

function deleteCookie(cName)
{
	setCookie(cName, "", -1);
}

function goto(page)
{
	// my paging is page=zzz this is the page number page are start from 1
	q = document.location.href;
	var patern = /^(.*)(\?|\&)page=(\d+)(\&?.*)$/;
	var reg = new RegExp(patern);
	if(!reg.test(q))
	{						// check if n=zzz dose not exists, add n=1 at the end of query
		var reg2 = new RegExp(/.*\?.*/);
		if(reg2.test (q))					// add ?n=zzz or &n=zzz
			q = q + "&page=1"; 
		else
			q = q + "?page=1";				
	}
	if(page == "prev")
	{						// goto previous page
		Page = Number(q.replace (patern, "$3")) - 1;
	}
	else
	{
		if(page=="next")
		{					// goto next page
			Page = Number(q.replace (patern, "$3")) + 1;
		}
		else
		{
			Page = Number(page);				// goto page n
		}
	}	
	q = q.replace(patern, "$1$2page=" + String(Page) + "$4");
	document.location.href = q;
}

function clearSearch()
{
	//document.location.href = document.location.href.replace(/&page=[0-9]*/, '').replace(/&showall=1/, '')+'&showall=1';		
	document.location.href = listModule;		
}

function ajaxDelete(action, objName, sender)
{
	ajax.send(action);
	if(objName && sender) {
		while(sender = sender.parentNode){
			if(sender.className == objName || sender.id == objName || sender.name == objName){
				sender.style.display = 'none';
				if(sender.tagName=="TR") {
					sender.parentNode.deleteRow(sender.sectionRowIndex);
				}
				return true;
			}
		}
	}
	return false;
}

function findPosX(obj)
{
	obj = findObject(obj);
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	obj = findObject(obj);
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function resizeWindow(w,h)
{
	if (parseInt(navigator.appVersion)>3) {
		if (navigator.appName=="Netscape") {
			top.outerWidth=w;
			top.outerHeight=h;
		} else {
			top.resizeTo(w,h);
		}
	}
}

function setSub(source, destination, opts, cnt)
{	
	if(opts) {
		var src = findObject(source);
		var dest = findObject(destination);
		if(!src || !dest) {
			return;	
		}
		var pid = (src.selectedIndex >= 0) ? src.options[src.selectedIndex].value : 0;
		var cnt2= 0;

		while(dest.options.length && dest.options[cnt]) {
			if(dest.options.length==1){
				dest.options[cnt] = new Option('', '');
				break;
			} else  {
				dest.options[cnt] = null;	//remove all options
			}
		}

		if(opts[pid]) {
			while(opts[pid][cnt2]) {
				ar = opts[pid][cnt2++].split("*:-)");
				dest.options[cnt++] = new Option(ar[1], ar[0]);		//add new options
			}
		}
	}
}

function checkBoxes(fmobj)
{
	for(var i = 0; i < fmobj.elements.length; i ++)
	{

		var e = fmobj.elements[i];
		if((e.type == 'checkbox') && (e.type == 'checkbox') && (e.checked == true))
		{
			return true;
		}
	}	
}

function checkAll(fmobj)
{
	for(var i = 0; i < fmobj.elements.length; i ++)
	{
		var e = fmobj.elements[i];
		if((e.name != 'allbox') && (e.type == 'checkbox') && (!e.disabled))
		{
			e.checked = fmobj.allbox.checked;
		}
	}
}

function checkCheckedAll(fmobj)
{	
	var TotalBoxes = 0;
	var TotalOn = 0;
	for(var i = 0; i < fmobj.elements.length; i ++)
	{
		var e = fmobj.elements[i];
		if((e.name != 'allbox') && (e.type == 'checkbox'))
		{
			TotalBoxes ++;
			if(e.checked)
			{
				TotalOn ++;
			}
		}
	}
	
	if (TotalBoxes == TotalOn)
	{
		fmobj.allbox.checked = true;
		return -1;		// all of them checked
	}
	else
	{
		fmobj.allbox.checked = false;
		return TotalOn;	// none of them checked=0 else some of them checked
	}
}

function sortList(sortBy, sortMode, sortByVal, sortModeVal, url)
{
	setCookie(sortBy, sortByVal);
	setCookie(sortMode, sortModeVal);
	document.location.href = document.location.href.replace(/&page=([0-9]*)/g, '&page=1');
}

function getAllChilds(obj) // return all children of an object and all children of them in an array
{
	var res = new Array();
	var cnt = 0;
	if(obj && obj.childNodes){
		for(var i=0; i<obj.childNodes.length; i++){
			res[res.length] = obj.childNodes[i];
			if(obj.childNodes[i].firstChild){
				var tmp = getAllChilds(obj.childNodes[i]);
				if(tmp){
					res = res.concat(tmp);
				}
			}
		}
		return res;
	}
}

function utf8(wide)
{
	var c, s;
	var enc = "";
	var i = 0;
	while(i<wide.length) {
		c= wide.charCodeAt(i++);
		// handle UTF-16 surrogates
		if (c>=0xDC00 && c<0xE000) continue;
		if (c>=0xD800 && c<0xDC00) {
			if (i>=wide.length) continue;
			s= wide.charCodeAt(i++);
			if (s<0xDC00 || c>=0xDE00) continue;
			c= ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
		}
		// output value
		if (c<0x80) enc += String.fromCharCode(c);
		else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
		else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
		else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
	}
	return enc;
}

function toHex(n)
{
	var hexchars = "0123456789ABCDEF";
	return hexchars.charAt(n>>4)+hexchars.charAt(n & 0xF);
}

function clone(what) //clone an object
{
	var res = new Object();
	for (var i in what) {
        if (typeof what[i] == 'object') {
            res[i] = clone(what[i]);
        } else {
            res[i] = what[i];
		}
    }
	return res;
}

function findObject(obj) //find an object from id, name, or its classname 
{
	if(typeof(obj)=='object' && obj) return obj;
	var src = $(obj);
	if(typeof(src)=='object' && src) return src;
	src = _(obj)[0];
	if(typeof(src)=='object' && src) return src;
	var elementList = getAllChilds(document);
	for(var i=0; i<elementList.length; i++){
		if(elementList[i].className == obj) return elementList[i];
	}
	return null;
}

$ = function(id){return document.getElementById(id);}
_ = function(name)
{
	var res = Array();
	if(!is_ie) {
		return document.getElementsByName(name);
	} else {
		// in ie document.getElementsByName just works for form elements. this is the fix up code
		var obj = document.getElementsByName(name);
		if (obj.length) return obj;
		var elementList = getAllChilds(document);
		var cnt = 0;
		for(var i=0; i<elementList.length; i++){
			if(elementList[i].name == name) res[cnt++] = elementList[i];
		}
	}
	return res;
}


//------------ report module ---------
function checkBetween(id)
{
	var sel = findObject('operator['+id+']');
	var val = findObject('value['+id+']');
	var bet = findObject('between'+id);
	if(sel.options[sel.selectedIndex].value=='BETWEEN') {
		bet.style.display='';
		val.style.display='none';
	} else if(sel.options[sel.selectedIndex].value=='IS NOT NULL' || sel.options[sel.selectedIndex].value=='IS NULL') {
		bet.style.display='none';
		val.style.display='none';
	} else {
		bet.style.display='none';
		val.style.display='';		
	}
}
//------------/report module ---------

//------------ mail module ---------
function saveMail(id)
{
	findObject('cmd').value = 'save';
	if(id){		
		findObject('frm_id').value = id;
	}
	findObject('form1').submit();
}

function sendMail(type)
{
	findObject('cmd').value = 'send';
	if(type){		
		findObject('type').value = type;
	}
	findObject('form1').submit();	
}
//------------/mail module ---------