function addEvent(o,ev,fn){
	(o.attachEvent) ? o.attachEvent("on"+ev, fn) : o.addEventListener(ev, fn, false);
} 
function removeEvent(o,ev,fn,flag){
	(o.removeEvent) ? o.removeEvent("on"+ev, fn) : o.removeEventListener(ev, fn, false);
}

function recalculateLayoutHeight(){
	try{lay.setTallOnLoad();}catch(err){}
}

function redrawIE6(){
	document.body.style.width="100%";
	document.body.style.width="auto";
}
function isArray(o){
   if (o.constructor.toString().indexOf("Array") == -1){
      return false;
   }else{
      return true;
   }
}
/* <applyTemplate> */
function applyTemplate(tmpl,o){
/* 
 * applyTemplate("qwe{rty}uio",{"rty":"RTY"}) -> "qweRTYuio"; 
 */
	var str=tmpl;
	for(var i in o){
		var i2=i.replace(/\\/g,"\\\\").replace(/([\^\$\*\+\?\.\(\)\|\{\}\[\]])/g,"\\$1");
		str=str.replace(RegExp("\\{"+i2+"\\}","g"),o[i]);
	}
	return str;
}
/* </applyTemplate> */

/* <cssManager> */
cssManager = new (function(){
/*
 *	//cssObj
 *	var css = {
 *		"body":"background:#f0f; color:#000;",
 *		"div, p, a":"color:0ff!important;"
 *	}
 *	OR
 *	//cssStr
 *	var css = ""
 *		+"body {background:#f00; color:#000;}"
 *		+"div, p, a {color:0f0!important;}"
 */

	function appendCSS(css) {
		var stl=css2stl(css);
		appendStyle(stl)
		return stl;
	}
	this.appendCSS=appendCSS;

	function appendStyle(stl) {
		var head = document.getElementsByTagName("HEAD")
		head = (head && head.length!=0) ? head[0] : null;
		head.appendChild(stl);
	}
	this.appendStyle=appendStyle;

	function removeStyle(stl) {
		var head = document.getElementsByTagName("HEAD")
		head = (head && head.length!=0) ? head[0] : null;
		head.removeChild(stl);
	}
	this.removeStyle=removeStyle;

	function t(s){
		return (s) ? s.replace(/(^\s*)|(\s*$)/,"") : "";
	};

	function cssStr2obj(cssStr){
		var cObj={};
		if(cssStr!=""){
			var i,cssRowsArr=cssStr.split(/\s*\}\s*/);
			for(i=0;i<cssRowsArr.length;i++){
				var row=cssRowsArr[i].replace(/^\s*([^\{]*)\{/mg,"$1{splitHere}").split("{splitHere}");
				cObj[t(row[0])]=t(row[1]);
			};
		}
		return cObj;
	};

	function cssObj2str(cssObj){
		var i,cssStr=""
		for (i in cssObj) {
			cssStr+=i+"{"+cssObj[i]+"}";
		}
		return cssStr;
	};

	function css2stl(css) {
		var i,stl = document.createElement('style');
		stl.type="text/css";
		if(stl.styleSheet){// IE only
			var cssObj={};
			if(typeof css == "string"){
				cssObj=cssStr2obj(css);
			} else {
				cssObj=css;
			}
			stl.styleSheet.rule=[];
			for (i in cssObj) {
				var arrSelectors=i.split(/\s*,\s*/);
				for(var j=0; j<arrSelectors.length; j++){
					stl.styleSheet.addRule(arrSelectors[j],cssObj[i]||";");
				}
			}
		} else {
			var cssStr="";
			if(typeof css == "string"){
				cssStr=css;
			} else {
				cssStr=cssObj2str(css);
			}
			stl.appendChild(document.createTextNode(cssStr));// don't use innerHTML, Safari don't understand it (for style)
		}
		return stl;
	}

})();
appendCSS=cssManager.appendCSS;

/* </cssManager> */
/** /
var css1 = {
	"body, p":"background:#f0f; color:#000;",
	"div, p, a":"color:0ff!important;"
}
var css2 = ""
	+"body {background:#f00; color:#000;}"
	+"div, p, a {color:0f0!important;}"
 
var stl1 = appendCSS(css1);
var stl2 = appendCSS(css2);
//javascript:var stl1 = cssManager.appendCSS(css1);
//javascript:var stl2 = cssManager.appendCSS(css2);
//javascript:cssManager.removeStyle(stl1);
//javascript:cssManager.removeStyle(stl2);
//javascript:cssManager.appendStyle(stl2);
//javascript:cssManager.appendStyle(stl1);
/* */

function obj2str(o){
	var s="";
	if(!o) return s;
	for(i in o){
		s+="\t"+i+" : "+o[i]+";\n";
	}
	return "obj={\n"+s+"}";
}
function cookie2obj(){
	function t(s){
		return (s) ? s.replace(/(^\s*)|(\s*$)/,"") : "";
	}
	var cObj={};
	if(document.cookie!=""){
		var i,cRowsArr=document.cookie.split(/\s*;\s*/);
		for(i=0;i<cRowsArr.length;i++){
			var row=cRowsArr[i].replace(/^\s*([^=]*)=/mg,"$1{splitHere}").split("{splitHere}");
			cObj[t(row[0])]=t(row[1]);
		}
	}
	return cObj;
};
//var cookieObj=cookie2obj();
//alert(obj2str(cookieObj));
//console.log(cookieObj);
//void(0);

function getFormByNameOrId(formNameOrId){
	var frmByName = document.forms[formNameOrId];
	var frmById = document.getElementById(formNameOrId);
	var frm = frmByName || frmById;
	if(!frm) {
		return null;
	}
	if(frmByName == frmById){
		if(!(frm.getAttribute("id"))){
			frm.setAttribute("id", formNameOrId);
		}
		if(!(frm.getAttribute("name"))){
			frm.setAttribute("name", formNameOrId);
		}
	}
	if(frmByName && !frmById && !(frm.getAttribute("id"))){
		frm.setAttribute("id", formNameOrId);
	}else if(!frmByName && frmById && !(frm.getAttribute("name"))){
		frm.setAttribute("name", formNameOrId);
	}
	return frm;
}

