var jlib={
	$:function(qid){
		return document.getElementById(qid);
	},
	//create new element
	$CE:function(qel,qchild){
		var el;
		if ('string'==typeof qel) {
			el=document.createTextNode(qel);
		} else {
			el=document.createElement(qel.tag);
			delete(qel.tag);
	
			if ('undefined'!=typeof qchild) {
				for(var i=0; i<qchild.length; i++) {
					el.appendChild(qchild[i]);
				}
			}
			delete(qchild);
			for (attr in qel) {
				el[attr]=qel[attr];
			}
		}
		return el;
	},
	//delete element
	$DE:function(qid){
		var el=jlib.$(qid);
		if(el!=null){
			el.parentNode.removeChild(el);
		}
		el=null;
	},
	addClassName:function(qel,qclass){
		var el=jlib.$(qel);
		el.className=jlib.String.addOnce(el.className, qclass);
		el=null;
	},
	removeClassName:function(qel,qclass){
		var el=jlib.$(qel);
		el.className=jlib.String.remove(el.className, qclass);
		el=null;
	},
	$PreviousSibling:function(qel){
		var sibling=qel.previousSibling
		if(sibling.nodeType==3){
			sibling=jlib.$PreviousSibling(sibling);
		}
		return sibling
	},
	$NextSibling:function(qel){
		var sibling=qel.nextSibling
		if(sibling.nodeType==3){
			sibling=jlib.$NextSibling(sibling);
		}
		return sibling
	}
}
jlib.String={
	
	addOnce:function(qel,str){
		qel=(qel==undefined)?'':qel;
		if (qel.indexOf(str)!=-1) return qel;
		
		if (qel==''){
			return qel.concat(str);
		}else{
			return qel.concat(' '+str);
		}
	},
	remove:function(qel,str){
		
		if (qel.indexOf(str)==-1) return qel;
		return qel.split(' '+str).join('').split(str).join('');
	}
}
jlib.utils={
	str2Obj:function(str){
		if(str!=''){
			return eval('('+str+')');
		}else{
			return null;
		}
	},
	obj2Str:function(obj){
		//support for strings and numbers
		var result="";
		var resultArray=[];
		var value;
		for(var key in obj){
			value=null;
			switch(typeof(obj[key])){
				case 'string':
					value="\""+obj[key].replace(/\"/g,"\\\"")+"\"";
				break;
				case 'number':
					value="\""+obj[key]+"\"";
				break;
				case 'boolean':
					value=String(obj[key]);
				break;
				default:
					value="null";
				break;
			}
			if(value!=null){
				resultArray.push("\""+key+"\":"+value);
			}
			
			
		}
		result=('{'+resultArray.join(',')+'}');
		return result;
	}
}
jlib.cookie={
	create:function(key, value, expire){
		if(typeof(value)=='object') value=jlib.utils.obj2Str(value);
		var expires='';
		if (expire) {
			var now=new Date();
			now.setTime(now.getTime()+(expire*24*3600*1000));
			expires="; expires="+now.toGMTString();
		}
		document.cookie = key+"="+escape(value)+expires+";path=/";
	},
	read:function(key){
		var dc=document.cookie;
		if(dc.length>0){
  			strStart=dc.indexOf(key + "=")
  			if(strStart!=-1){
				strStart=strStart + key.length+1 
			    strEnd=dc.indexOf(";",strStart)
			    if (strEnd==-1) strEnd=dc.length
			    return unescape(dc.substring(strStart,strEnd))
			}
		}
		return null;
	},
	remove:function(key){
		jlib.cookie.create(key,'',-1);
	}
}