
function $(id){
	return document.getElementById(id);
}

function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

/** set or get the element height*/
function elementHeight(element, value) {
	// if you are getting the height then display must be block to return the absolute height
	if( value == undefined ){
		if(element.style.display!='none'&& element.style.display!=''){
			return element.offsetHeight;
		}
		var viz = element.style.visibility;
		element.style.visibility = 'hidden';
		var o = element.style.display;
		element.style.display='block';
		var r = parseInt(element.offsetHeight);
		element.style.display=o;
		element.style.visibility = viz;
		return r;
	} else {
		element.style.height=value+'px';
		return element.style.height;
	}
}

/** set opacity */
function setOpacity(element, value) {
	element.style.opacity = value;
	element.style.filter='alpha(opacity='+Math.round(value*100)+');';
}

/** --------=8 Accordians 8=------------- */

/**
* type: menu, accordian
*/

function Accordian(basicDivId,speed,delay,type, selectedGroup){
	if (!Accordian.instances) {
		Accordian.instances=new Array();
	}
	this.id=Accordian.instances.length;
	Accordian.instances[this.id]=this;
	
	this.speed=speed;
	this.delay=delay;
	this.type=!type?'accordian':type;
	this.selectedGroup=selectedGroup;
	
	this.open=function (headerId) {
		var header=$(headerId);
		var content=header.contentElm;
		var h=elementHeight(content);
		if (h<content.maxH) {
				var v = Math.round((content.maxH-h)/header.accordian.speed);
				v = (v<1) ? 1 :v ;
				elementHeight(content,h+v);
				setOpacity(content,h/content.maxH);
		} else {
			clearInterval(header.thread);
			elementHeight(content,content.maxH);
		}
	}
	
	this.close=function (headerId) {
		var header=$(headerId);
		var content=header.contentElm;
		var h=elementHeight(content);
		if (h>0) {
				var v = Math.round((h)/header.accordian.speed);
				v = (v<1) ? 1 :v ;
				elementHeight(content,h-v);
				setOpacity(content,h/content.maxH);
		} else {
			clearInterval(header.thread);
			elementHeight(content,0);
		}
	}
	
	//get all the elements that have id as content
	var headerElms=[];
	var childs=$(basicDivId).getElementsByTagName('div');
	for(var i=0;i<childs.length;i++){
		var h=childs[i].id;
		if(h.substr(h.indexOf('-')+1,h.length)=='header'){
			var header=childs[i];
			headerElms.push(header);
			header.headerName=h.substr(0,h.indexOf('-'));
			var content=$(header.headerName+'-content');
			content.maxH = elementHeight(content);
			content.style.display='none';
			content.style.overflow='hidden';
			content.accordian=this;
			header.contentElm=content;
			header.accordian=this;
			header.state='close';
			if (header.headerName==this.selectedGroup) {
				content.style.display='block';
				header.state='open';
			}
			header.onclick=function () {
				var header=this;
				if (header.accordian.type=='menu') {
					if (header.state=='close') {
						header.open();
					} else {
						header.close();
					}
				} else {
					for(var j=0;j<headerElms.length;j++) {
						if (headerElms[j].id==header.id && header.state!='open') {
							header.open();
						} else {
							headerElms[j].close();
						}
					}
				}
			}
			header.open=function() {
				var self=this;
				self.contentElm.style.display='block';
				self.contentElm.style.height='0px';
				if(self.thread) {
					clearInterval(self.thread);
				}
				self.thread=setInterval('Accordian.instances['+self.accordian.id+'].open("'+self.id+'")',self.accordian.delay);
				self.state='open';
			}
			header.close=function() {
				var self=this;
				if(self.thread) {
					clearInterval(self.thread);
				}
				self.thread=setInterval('Accordian.instances['+self.accordian.id+'].close("'+self.id+'")',self.accordian.delay);
				self.state='close';
			}
		}
	}
	
}
var onloaders=new Array();
function addOnLoader(id,onloader) {
    onloaders[id]=onloader;
}

function startOnLoaders() {
    for(var id in onloaders) {
        onloaders[id]();
    }
}

