// JavaScript Document
function error_handler(a,b,c)
{
 window.status = (a +"\n" + b + "\n\n" + c + "\n\n" + error_handler.caller);
 return true;
}
window.onerror = error_handler;
String.prototype.trim=function(){return this.replace(/(^\s+)|\s+$/g,"");}


self.WD = {
/*begin of functions==============================*/
browser:new Object(),
dull:function (){},


addEvent:function(obj, evType, fn)
{ 
	if (obj.addEventListener)
	{  
		obj.addEventListener(evType, fn, false);  return true; 
	}
	else if (obj.attachEvent)
	{   
		var r = obj.attachEvent("on"+evType, fn); 	
		WD.EventCache.add(obj, evType, fn);
		return r;
	}
	else 
	{
		//Mac IE5 sucks here
		return false;
	} 
},

removeEvent:function (obj, evType, fn)
{ 
	if (obj.removeEventListener){  obj.removeEventListener(evType, fn, false);  return true; }
	else if (obj.detachEvent){   var r = obj.detachEvent("on"+evType, fn);    return r; }
	else { return false; } 
},

getObjById:function(id)
{
	return document.getElementById(id);
},


getChildByClass:function(el,tagName,className)
{
	var els = el.getElementsByTagName(tagName);
	className = className.split(" ");
	for( var i=0;i<els.length;i++)
	{
		for(var c=0;c<className.length;c++)
		{
			if( els[i].className.trim() == className[c].trim() ){ return els[i] ;}
		}		
	}
	return null;
},




getChildByName:function(el,tagName,Name)
{
	var els = el.getElementsByTagName(tagName);
	className = className.split(" ");
	for( var i=0;i<els.length;i++)
	{
		if( els[i].Name == Name){ return els[i] ;}
	}
	return null;
},


getNextObjByTagName:function(el,tagName)
{
	while(el && el.nextSibling)
	{
		el = el.nextSibling;
		if(el.nodeName.toLowerCase()==tagName.toLowerCase()){return el;}
	}		
	return null;
},


getNextPreviousByTagName:function(el,tagName)
{
	while(el && el.previousSibling)
	{
		el = el.previousSibling;
		if(el.nodeName.toLowerCase()==tagName.toLowerCase()){return el;}
	}		
	return null;
},



getObjByClass:function (el,tagName,className,level)
{
	level = level || 1000;
	var p= 0;
	var exit = function(el){ return ( (p>level) || (el==null) || (el.parentNode==null) || (el.tagName==null) || (el.className==null) || (el==document.body) );}
		
	while( !exit(el)  )
	{			
			if( (el.tagName.toLowerCase() == tagName) )
			{
				var c = el.className.split(" ");
				for(var i=0;i<c.length;i++)
				{
					if( (c[i]==className) || (className==""))
					{
						return el;
					}
				}
				
			}
			el = el.parentNode;
			p++;
	}
	return null;
},



getObjByName:function (el,tagName,Name,level)
{
	level = level || 1000;
	var p= 0;
	var exit = function(el){ return ( (p>level) || (el==null) || (el.parentNode==null) || (el.tagName==null) || (el.name==null) || (el==document.body) );}
		
	while( !exit(el)  )
	{			
			if( (el.tagName.toLowerCase() == tagName) && (el.name == Name) )
			{;return el;};			
			el = el.parentNode;
			p++;
	}
	return null;
},





getDimension:function(el)
{
 var d = new Object();
 if(el.getBoundingClientRect)
	{       
	   d.x = el.getBoundingClientRect().left + Math.max(document.body.scrollLeft, document.documentElement.scrollLeft);
	   d.y = el.getBoundingClientRect().top + Math.max(document.body.scrollTop, document.documentElement.scrollTop);
	   d.w = el.getBoundingClientRect().right - el.getBoundingClientRect().left;
	   d.h =  el.getBoundingClientRect().bottom - el.getBoundingClientRect().top;
	}
	else if(document.getBoxObjectFor)
	{
       d.x = document.getBoxObjectFor(el).x;
	   d.y =  document.getBoxObjectFor(el).y;
	   d.w = document.getBoxObjectFor(el).width;
	   d.h = document.getBoxObjectFor(el).height;
	}
	else
	{
			
			function offsetBy(el, type)
			{
			  if (this===el) return 0;
			  var v=999, owner=this, border='client'+type;
			  type = 'offset'+type;
			  do { v += owner[type];  } while ((owner=owner.offsetParent) && owner!==el && (v+=owner[border]))
			  return v-999;
			}
			
			d.x = offsetBy.call(el, null, 'Left');
			d.y= offsetBy.call(el, null, 'Top');
			d.w = el.offsetWidth;
			d.h = el.offsetHeight;
	
	}
	return d;
},

isTagName:function (el,tagName)
{
 return (el.nodeName.toLowerCase() == tagName.toLowerCase() );
},

hasClass:function (el,className)
{
 var c = el.className.split(" ");
 for(var i=0;i<c.length;i++)
	{
		if(c[i] == className){return true;};
	}
	return false;
},



getEvent:function (e)
{
	e = window.event ||e;
	e.leftButton=false;
	
	if(e.srcElement==null && e.target!=null)
	{	
		e.srcElement = e.target ;
		e.leftButton = ( e.button==1);		
	}
	else if(e.target==null && e.srcElement!=null)
	{ 
		e.target = e.srcElement;
		e.leftButton = ( e.button==0);
	}
	else if(e.srcElement!=null && e.target!=null)
	{
		//opera sucks and have both e.srcElement & e.target.
	}
	else{return null}

	e.mouseX = e.pageX || (e.clientX +  Math.max(document.body.scrollLeft, document.documentElement.scrollLeft));
	e.mouseY = e.pageY || (e.clientY + Math.max(document.body.scrollTop, document.documentElement.scrollTop));
	return e;
},



stopEvent:function(e)
{
	if(e && e.cancelBubble!=null)
	{
		e.cancelBubble = true;
		e.returnValue = false;
	}
	if(e && e.stopPropagation && e.preventDefault)
	{
		e.stopPropagation(); 
		e.preventDefault(); 
	}
	return false;
},


addClass:function(el,className)
{
	var c = el.className.split(" ");
	for(var i=0;i<c.length;i++)
	{
		if(c[i]==className){return;};
	}
	if(c.length>0)
	{
		el.className = (el.className + " " +className).trim();
	}
	else
	{
		el.className = className.trim();
	}
},


removeClass:function(el,className)
{
	var c = el.className.split(" ");
	for(var i=0;i<c.length;i++)
	{
		if(c[i]==className){c[i]="";};
	}
	el.className = c.join(" ").trim();
	
}


/*endof functions==============================*/
}

WD.EventCache = function()
{
	var listEvents = [];
	
	return {
		listEvents : listEvents,
	
		add : function(node, sEventName, fHandler, bCapture){listEvents[listEvents.length] = arguments;},
		
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1)
			{
				item = listEvents[i];				
				if(item[0].removeEventListener){item[0].removeEventListener(item[1], item[2], item[3]);};			
				if(item[1].substring(0, 2) != "on"){	item[1] = "on" + item[1];};				
				if(item[0].detachEvent){item[0].detachEvent(item[1], item[2]);};				
				item[0][item[1]] = null;
			};
		}
	};
}();


WD.addEvent(window,"unload",WD.EventCache.flush);
WD.browser["ie"] =  (document.all!=null)  && (window.opera==null); 
WD.browser["ie4"]  =  WD.browser["ie"] && (document.getElementById==null); 
WD.browser["ie5"]  =   WD.browser["ie"] && (document.namespaces==null) && (!WD.browser["ie4"]) ; 
WD.browser["ie6"]  =  WD.browser["ie"] && (document.implementation!=null) && (document.implementation.hasFeature!=null) 
WD.browser["ie55"]  =  WD.browser["ie"] && (document.namespaces!=null) && (!WD.browser["ie6"]); 
WD.browser["ns4"]  = !WD.browser["ie"] &&  (document.layers !=null) &&  (window.confirm !=null) && (document.createElement ==null); 
WD.browser["opera"] =  (self.opera!=null); 
WD.browser["gecko"] =  (document.getBoxObjectFor!=null); 
WD.browser["khtml"] = (navigator.vendor =="KDE"); 
WD.browser["konq"] =  ((navigator.vendor == 'KDE')||(document.childNodes)&&(!document.all)&&(!navigator.taintEnabled)); 
WD.browser["safari"] = (document.childNodes)&&(!document.all)&&(!navigator.taintEnabled)&&(!navigator.accentColorName); 
WD.browser["safari1.2"] = (parseInt(0).toFixed==null) && (WD.browser["safari"] && (window.XMLHttpRequest!=null)); 
WD.browser["safari2.0"] = (parseInt(0).toFixed!=null) && WD.browser["safari"] && !WD.browser["safari1.2"] ;
WD.browser["safari1.1"] = WD.browser["safari"] && !WD.browser["safari1.2"]  &&!WD.browser["safari2.0"] ;

for(i in self.WD)
{
 if(self[i]==null)
	{
		self[i] = self.WD[i];//synchronize for faster deelopement
	}
}
