//misc functions
function basename(path, suffix) {
	var arr=/([^\\\/]+)$/.exec(path);
	if (suffix && (arr[0].lastIndexOf(suffix)==arr[0].length-suffix.length)) {
		arr[0]=arr[0].substring(0,arr[0].lastIndexOf(suffix));
	}
	return arr[0];
}
function str_replace(s_search, s_replace, subject) {
	var pos=-s_replace.length;
	while((pos=subject.indexOf(s_search,pos+s_replace.length))!=-1) {
		subject=subject.substring(0,pos)+s_replace+subject.substring(pos+s_search.length);
	}
	return subject;
}
function xreplace(strname) {
	var str = _STR[strname];
	var numargs = xreplace.arguments.length;
	for (var i = 1; i < numargs; i++) {
		param = xreplace.arguments[i];
		str = str_replace("%"+i, param, str);
	}
	return str;
}

function loadXMLDoc(url,onReady,req) {
	if(typeof req=='undefined' || !req) {
		var req;
		if(window.XMLHttpRequest) {
			try {
				req = new XMLHttpRequest();
			} catch(e) {
				req = false;
			}
		}
		else if(window.ActiveXObject) {
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					req = false;
				}
			}
		}
	} else {
		req.abort();
	}

	if(req) {
		url+=(url.indexOf('?')==-1?'?':'&')+'uniq='+(new Date()).getTime();
		req.onreadystatechange = function (){onReady(req);};
		req.open("GET", url, true);
		req.setRequestHeader("Method", "GET "+url+" HTTP/1.1");
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		req.send("");
	}
	return req;
}

function elLeft(el){
	result=0;
	while(el){
		result+=el.offsetLeft;
		el=el.offsetParent;
	}//while
	return result;
}//elLeft

function elTop(el){
	result=0;
	while(el){
		result+=el.offsetTop;
		el=el.offsetParent;
	}//while
	return result;
}//elTop

function hasClass(el,value){
	var class_re=new RegExp('(^|\\s)('+value+')($|\\s)');
	match=el.className.match(class_re);
	if(match)
		return match[2];
	else
		return null;
}//hasClass

function addClass(el,value){
	if(!hasClass(el,value))
		el.className+=' '+value;
}//addClass

function removeClass(el,value){
	var class_re=new RegExp('(^|\\s)'+value+'($|\\s)','g');
	el.className=el.className.replace(class_re,'$2');
}//removeClass

function getElementsByClass(value,scope,tag_name) {
	if(!scope)
		scope=document;
	if(!tag_name)
		tag_name='*';
	var els = scope.getElementsByTagName(tag_name);
	values=value.split(' ');
	class_res=[];
	for(var i in values)
		class_res[class_res.length]=new RegExp('(^|\\s)'+values[i]+'($|\\s)');
	result=[];
	for(var i=0;i<els.length;i++) {
		var found=true;
		for(var j in class_res)
			if(!els[i].className.match(class_res[j])) {
				found=false;
				break;
			}//if
		if(found)
		result[result.length]=els[i];
	}//for
	return result;
}//getElementsByClass

function addEvent(element,event,handler){
	if(element.addEventListener)
		element.addEventListener(event,handler,false);
	else if(element.attachEvent)
		element.attachEvent('on'+event,handler);
	else
		throw 'Can\'t add event';
}//addEvent

function currentTarget(e) {
	if(e.currentTarget)
		return e.currentTarget;
	return event.srcElement;
}//currentTarget

function getKeyCode(e) {
	if(e && e.keyCode!=undefined)
		return e.keyCode;
	if(e && e.which!=undefined)
		return e.which;
	if(window.event && window.event.charCode!=undefined)
		return window.event.charCode;
	if(window.event && window.event.keyCode!=undefined)
		return window.event.keyCode;
	return null;
}//getKeyCode

function $() {
	var results = [], element;
	for (var i = 0; i < arguments.length; i++) {
		element = arguments[i];
		if (typeof element == 'string')
		element = document.getElementById(element);
		results.push(element);
	}
	return results[0];
}//$

function getHexRGBColor(color) {
	color = color.replace(/\s/g,'');
	var aRGB = color.match(/^rgb\((\d{1,3}[%]?),(\d{1,3}[%]?),(\d{1,3}[%]?)\)$/i);
	if(aRGB) {
		color = '';
		for (var i=1;  i<=3; i++) {
			color+=Math.round((aRGB[i][aRGB[i].length-1]=='%'?2.55:1)*parseInt(aRGB[i])).toString(16).replace(/^(.)$/,'0$1');
		}
	} else {
		color = color.replace(/^#?([\da-f])([\da-f])([\da-f])$/i, '$1$1$2$2$3$3');
	}
	return color;
}

function splitRGB(color) {
	color=getHexRGBColor(color);
	var matches=color.match(/^#?([\dabcdef]{2})([\dabcdef]{2})([\dabcdef]{2})$/i);
	if(!matches)return false;
	for (var i=1, rgb=new Array(3);  i<=3; i++)rgb[i-1]=parseInt(matches[i],16);
	return rgb;
}

insertAfter = function (element, newNode, refNode) {
	if(!refNode.nextSibling) {
		return element.appendChild(newNode);
	} else {
		return element.insertBefore(newNode,refNode.nextSibling);
	}
}//insertAfter

function elRemove(el){
	el.parentNode.removeChild(el);
}//elRemove

function copyContentToClipboard(content) {
	if (window.clipboardData && window.clipboardData.setData) {
		window.clipboardData.setData("Text", content);
		return true;
	} else {
		try {
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		}
		catch (e) {
			//Please set the signed.applets.codebase_principal_support property in your firefox about:config to true
			return false;
		}
		var clipboard = Components.classes["@mozilla.org/widget/clipboard;1"].getService();
		if (clipboard) {
			clipboard = clipboard.QueryInterface(Components.interfaces.nsIClipboard);
		}
		var transferable = Components.classes["@mozilla.org/widget/transferable;1"].createInstance();
		if (transferable) {
			transferable = transferable.QueryInterface(Components.interfaces.nsITransferable);
		}
		if (clipboard && transferable) {
			transferable.addDataFlavor("text/unicode");
			var textObj = new Object();
			var textObj = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
			if (textObj) {
				textObj.data = content;
				transferable.setTransferData("text/unicode", textObj, content.length*2);
				var clipid=Components.interfaces.nsIClipboard;
				clipboard.setData(transferable,null,clipid.kGlobalClipboard);
				return true;
			}
		}
		return false;
	}
}//copyContentToClipboard

function setCookie (name, value, expires, path, domain, secure)
{
	document.cookie = name + "=" + escape(value) +
				((expires) ? "; expires=" + expires : "") +
				((path) ? "; path=" + path : "") +
				((domain) ? "; domain=" + domain : "") +
				((secure) ? "; secure" : "");
}//setCookie

function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else {
		begin += 2;
	}
	var end = dc.indexOf(";", begin);
	if (end == -1) {
		end = dc.length;
	}
	return unescape(dc.substring(begin + prefix.length, end));
}//getCookie

function CopyToClipboard(obj) {
	copyContentToClipboard(obj.innerHTML);
}
function CopyToClipboard1(oname) {
	obj = null;
	if(document.getElementById)
	obj=document.getElementById(oname);
	if (obj) {
		copyContentToClipboard(obj.innerHTML);
	}
}
function switchDisplay(id) {
 	var el = document.getElementById(id);
	if (el.style.display=='none') {
	 	el.style.display = '';
		return true;
	} else {
	 	el.style.display = 'none';
		return false;
	}

}
//////////////////////////////////////////////////////////////////////