//Tiny lib (c)Alexander Melanchenko, http://alexnd.com

//return <element id="i">
function $id(i){
	if(document.getElementById && undefined!=document.getElementById(i)) return document.getElementById(i);
	else if(document.all && undefined!=document.all[i]) return document.all[i];
	else if(document.layers && undefined!=document.layers[i]) return document.layers[i];
	else return null;
}

//return <element id="n">
/*function $$(n,d){
	var p,i,r=null;
	if(!d) d=document;
	if((p=n.indexOf("?"))>0&&parent.frames.length){
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}
	if(!(r=d[n])&&d.all) r=d.all[n];
	for(i=0;!r&&i<d.forms.length;i++) r=d.forms[i][n];
	for(i=0;!r&&d.layers&&i<d.layers.length;i++) r=$$(n,d.layers[i].document);
	if(!r && d.getElementById) r=d.getElementById(n);
	return r;
}*/
function $$(n){return $id(n)}

//assign all props from b to a
function $assign(a,b){
	if(!($isobj(a) && $isobj(b))) return;
	for(var p in b)a[p]=b[p];
}

//return <img name="n">
function $img(n){
	if(document.images && undefined!=document.images[i]) return document.images[i];
	return null;
}

//return <element name="n">, optionally by index
function $name(n,i){
	r=new Array();
	if(document.getElementsByName) r=document.getElementsByName(n);
	if(undefined!=i && i>=0 && undefined!=r[i]) return r[i];
	return r;
}

//evaluate Object
function $isobj(e){
	return ("object"==typeof(e)&&null!=e);
}

//return number
function $N(n){
	n=parseInt(n);
	if(isNaN(n))n=0;
	return n;
}

//return browser info
function $browser(){
	var _={
	ids:['Opera','Firefox','MSIE','Netscape','Safari','Konqueror','Camino','OmniWeb','iCab'],
	id:'',
	agent:navigator.userAgent,
	ver:navigator.appVersion,
	ver2:navigator.appVersion,
	major:0,
	minor:0,
	dom:document.getElementById?1:0
	},i,t,s,r;
	_.minor=parseInt(_.ver2);
	if(isNaN(_.major))_.major=0;
	for(i=0; i<_.ids.length; i++){
		r=new RegExp(_.ids[i]+'[/ ][0-9.]*');
		s=_.agent.match(r);
		if(null!=s && undefined!=s[0]){
			_.id=_.ids[i];
			_.ver2=s[0].substr(_.ids[i].length+1,s[0].length);
			_.major=parseInt(_.ver2);
			break;
		}
	}
	if(_.ver2){
		s=String(_.ver2);
		t=s.split('.');
		if(t.length) _.major=parseInt(t[0]);
		if(t.length>1){
			s='0';
			for(i=1; i<t.length; i++){
				if(i==1)s+='.';
				s+=''+t[i];
			}
			_.minor=parseFloat(s);
		}
	}
	_.opera=(_.agent.indexOf("Opera")!=-1)?1:0;
	_.opera5=(_.agent.indexOf("Opera 5")!=-1)?1:0;
	_.opera7=(_.agent.indexOf("Opera 7")!=-1)?1:0;
	_.opera8=(_.agent.indexOf("Opera 8")!=-1)?1:0;
	_.opera9=(_.agent.indexOf("Opera 9")!=-1)?1:0;
	_.opera9=(_.agent.indexOf("Opera 10")!=-1)?1:0;
	_.moz=(_.agent.indexOf("Firefox")!=-1 && _.dom && !_.opera)?1:0;
	_.ie=(!_.opera && (_.dom)?true:document.all);
	_.ie5=(_.ver.indexOf("MSIE 5")!=-1 && _.dom && !_.opera)?1:0;
	_.ie55=(_.ver.indexOf("MSIE 5.5")!=-1 && _.dom && !_.opera)?1:0;
	_.ie6=(_.ver.indexOf("MSIE 6")!=-1 && _.dom && !_.opera)?1:0;
	_.ie7=(_.ver.indexOf("MSIE 7")!=-1 && _.dom && !_.opera)?1:0;
	_.mac=(_.agent.indexOf("Mac")!=-1)?1:0;
	_.ns6=(_.dom && parseInt(_.ver)>=5)?1:0; 
	_.ns4=(!_.ie && !_.moz && !_.dom && document.layers)?1:0;
	_.web2=(_.moz||_.ie7||_.ie6||_.opera9);
	return _;
}

//return object size (w, h) if z - test for non-zero
function $size(i,z){
	var _={w:0,h:0};
	if(undefined==z)z=0;
	if($isobj(i)){
		if('number'==typeof i.clientWidth &&(!z || (z && i.clientWidth!=0 && i.clientHeight!=0))){
			_.w=i.clientWidth;
			_.h=i.clientHeight;
		}else if('number'==typeof i.offsetWidth &&(!z || (z && i.offsetWidth!=0 && i.offsetHeight!=0))){
			_.w=i.offsetWidth;
			_.h=i.offsetHeight;
		}else if('number'==typeof i.scrollWidth &&(!z || (z && i.scrollWidth!=0 && i.scrollHeight!=0))){
			_.w=i.scrollWidth;
			_.h=i.scrollHeight;
		}else if(undefined!=i.style && undefined!=i.style.width &&(!z || (z && i.style.width!=0 && i.style.height!=0))){
			_.w=parseInt(i.style.width);
			_.h=parseInt(i.style.height);
		}else if('number'==typeof i.width &&(!z || (z && i.width!=0 && i.height!=0))){
			_.w=i.width;
			_.h=i.height;
		}else if('number'==typeof i.naturalWidth &&(!z || (z && i.width!=0 && i.height!=0))){
			_.w=i.naturalWidth;
			_.h=i.naturalHeight;
		}
	}
	return _;
}
function $$size(i,z){return $size($$(i),z)}

//return object position (x, y)
function $pos(i){
	var _={x:0,y:0};
	if($isobj(i)){
		if(undefined!=i.offsetParent){
			_.x=i.offsetLeft;
			_.y=i.offsetTop;
			var t=i.offsetParent;
			while(t!=null){
				_.x+=t.offsetLeft;
				_.y+=t.offsetTop;
				t=t.offsetParent;
			}
		}
		else if(undefined!=i.style && undefined!=i.style.left){
			_.x=parseInt(i.style.left);
			_.y=parseInt(i.style.top);
		}
	}
	return _;
}
function $$pos(i){return $pos($$(i))}

//return true if object visibile
function $vis(i){
	if($isobj(i) && undefined!=i.style.visibility && i.style.visibility=='hidden') return false;
	return true;
}
function $$vis(i){return $vis($$(i))}

//return true if object displayed
function $display(i){
	if($isobj(i) && undefined!=i.style.display && i.style.display=='none') return false;
	return true;
}
function $$display(i){return $display($$(i))}

//set style props from given object
function $setstyle(_,s){
	if(!($isobj(_) && $isobj(s))) return;
	if(undefined==_.style) return;
	for(var p in s)_.style[p]=s[p];
}
function $$setstyle(i,s){$setstyle($$(i),s)}

//change visibiblity s=true/false
function $setvis(i,s){
	if($isobj(i)) i.style.visibility=(s)?"visible":"hidden";
}
function $$setvis(i,s){$setvis($$(i),s)}

//change display s=true/false
function $setdisplay(i,s){
	if(!$isobj(i))return;
	if('number'==typeof s) i.style.display=(s)?"block":"none";
	else i.style.display=s;
}
function $$setdisplay(i,s){$setdisplay($$(i),s)}

//resize object height by of offset, optionally not more than m
function $resize_y(i,of,m){
	if(!$isobj(i))return;
	var a=1,y=parseInt($id(i).style.height);
	if(undefined==m)m=0;
	if(m>0 && of>0 && y>m){ a=0; }else if(m>0 && of<0 && y+of<m){ a=0;}
	if(a){ $id(i).style.height=(y+of); }//+'px'
}

//resize element
function $$resize_y(i,of,m){$resize_y($$(i),of,m)}

//set position
function $setpos(i,x,y){
	if(!$isobj(i))return;
	i.style.left=x;//+'px'
	i.style.top=y;//+'px'
}
function $$setpos(i,x,y){$setpos($id(i),x,y)}

//move position by x,y
function $move(i,x,y){
	if(!$isobj(i))return;
	var p=$pos(i);
	x=parseInt(x);y=parseInt(y);
	if(null!=x && x!=0) i.style.left=(p.x+x);//+'px'
	if(null!=y && y!=0) i.style.top=(p.y+y);//+'px'
}
function $$move(i,x,y){$move($$(i),x,y)}

//set width
function $setwidth(i,w){
	if($isobj(i)) i.style.width=w;
}
function $$setwidth(i,w){$setwidth($$(i),w)}

//set height
function $setheight(i,h){
	if($isobj(i)) i.style.height=h;
}
function $$setheight(i,h){$setheight($$(i),h)}

//set color
function $setcolor(i,c){
	if($isobj(i)) i.style.color=color;
}
function $$setcolor(i,c){$setcolor($$(i),c)}

//set background color
function $setbgcolor(i,c){
	if($isobj(i)) i.style.backgroundColor=c;
}
function $$setbgcolor(i,c){$setbgcolor($$(i),c)}

function $setclip(i,x1,y1,x2,y2){
	if(!($isobj(i) && undefined!=i.style))return;
	if(x1!='auto')x1=x1+'px';
	if(x2!='auto')x2=x2+'px';
	if(y1!='auto')y1=y1+'px';
	if(y2!='auto')y2=y2+'px';
	i.style.clip='rect('+y2+' '+x2+' '+y1+' '+x1+')';
}
function $$setclip(i,x1,y1,x2,y2){$setclip($$(i),x1,y1,x2,y2)}

//return window rectangle (w, h, x, y, in_w, in_h, of_x, of_y)
function $window(){
	var _={x:0,y:0,w:0,h:0,in_w:0,in_h:0,of_x:0,of_y:0};
  if('number'==typeof(window.innerWidth)){
    _.in_w=window.innerWidth;
    _.in_h=window.innerHeight;
  }else if(document.documentElement &&(document.documentElement.clientWidth || document.documentElement.clientHeight)){
    _.in_w=document.documentElement.clientWidth;
    _.in_h=document.documentElement.clientHeight;
  }else if(document.body && (document.body.clientWidth || document.body.clientHeight)){
    _.in_w=document.body.clientWidth;
    _.in_h=document.body.clientHeight;
  }
	if('number'==typeof(window.pageYOffset)){
		_.of_x=window.pageXOffset;
		_.of_y=window.pageYOffset;
	}else if(document.body && (document.body.scrollLeft || document.body.scrollTop)){
		_.of_x=document.body.scrollLeft;
		_.of_y=document.body.scrollTop;
	}else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){
		_.of_x=document.documentElement.scrollLeft;
		_.of_y=document.documentElement.scrollTop;
	}
	if('number'==typeof(window.screenLeft)){
		_.x=window.screenLeft;
		_.y=window.screenTop;
	}else if('number'==typeof(window.screenX)){
		_.x=window.screenX;
		_.y=window.screenY;
	}else if('number'==typeof(window.pageXOffset)){
		_.x=window.pageXOffset;
		_.y=window.pageYOffset;
	}else if('number'==typeof(window.left)){
		_.x=window.left;
		_.y=window.top;
	}
	if('number'==typeof(window.outerWidth)){
		_.w=window.outerWidth;
		_.h=window.outerHeight;
	}else if('number'==typeof(window.dialogWidth)){
		_.w=window.dialogWidth;
		_.h=window.dialogHeight;
	}else if('number'==typeof(window.width)){
		_.w=window.width;
		_.h=window.height;
	}else{
		_.w=(((_.in_w+20)<screen.width)?(_.in_w+20):screen.width);
		_.h=(((_.in_h+50)<screen.height)?(_.in_h+50):screen.height);
	}
	return _;
}

//image rollover (name, src, ...)
function $rollover()
{
	var i,r,n=Math.round(arguments.length/2);
	if(undefined==document._rl) document._rl=new Array();
	for(i=0; i<n; i++) if($isobj($$(arguments[i]))){
		r=$$(arguments[i]);
		document._rl[document._rl.length]=r;
		if(!r._s) r._s=r.src;
		r.src=arguments[i+1];
	}
}

//image rollover restore
function $rollout()
{
  var i,x;
  for(i=0; document._rl&&i<document._rl.length&&(x=document._rl[i])&&x._s; i++) x.src=x._s;
}

//images preloader (src, src, ...)
function $preload(){
	var d=document;
	if(d.images){
		if(undefined==d._pr) d._pr=new Array();
		var i,j=d._pr.length;
		for(i=0; i<arguments.length; i++)
			if(arguments[i].indexOf('#')!=0){
				d._pr[j]=new Image();
				d._pr[j++].src=arguments[i];
			}
	}
}

//construct URL string http://domain/path?query
//t controls type of encoding (0-encodeURIComponent,1-escape,2-encodeURI)
function $makeurl(p,a,t){
	var i=0,r='http://';
	if(undefined==p || null==p)p=location.pathname;
	if(undefined==t)t=0;
	if(p.length>0 && p.charAt(0)!='/')p='/'+p;
	if(p=='')p='/';
	r+=location.host+p;
	if(undefined!=a){
		r+='?';
		for(var m in a){
			if(i>0)r+="&";
			r+=m+"=";
			switch(t){
				case 1:r+=escape(a[m]);break;
				case 2:r+=encodeURI(a[m]);break;
				default:r+=encodeURIComponent(a[m]);
			}
			i++;
		}
	}
	return r;
}

//open window (url, name, width, height, tollbar, scrollable, resizible, focused)
function $popup(u,n,w,h,t,s,r,f){
	var x=0,y=0,_s=screen;
	if(undefined!=_s.width){
		x=Math.round((_s.width-w)/2);
		if(x<0){x=0}
		y=Math.round((_s.height-h)/2);
		if(y<0){y=0}
	}
	if(undefined==n || n==''){n='POP'+Date.getMilliseconds()}
	if(undefined==t)t=1;
	if(undefined==s)s=1;
	if(undefined==r)r=1;
	if(undefined==f)f=0;
	if(undefined==document._ws) document._ws=new Array();
	document._ws[document._ws.length]=window.open(u,n,'top='+y+',left='+x+',width='+w+',height='+h+((t)?',menubar=0,status=0':'')+',scrollbars='+s+',resizable='+r+',alwaysRaised=0');
	if(f)document._ws[document._ws.length].focus();
	return document._ws.length;
}

//get window from stack 
function $getpopup(i){
	if(undefined!=document._ws[i]) return document._ws[i];
	return null;
}
