function bind(obj, fun, args) {
  return function() {
    if (obj === true)
      obj = this;
    var f = typeof fun === "string" ? obj[fun] : fun;

    return f.apply(obj, Array.prototype.slice.call(args || [])
        .concat(Array.prototype.slice.call(arguments)));
  };
}

	


if(typeof icom == "undefined"){
	icom = {};
}


icom.rollover = function(data){
	this.data = data;
	this.hoveredItem = 0;
	if(this.data.reverse){
		this.hoveredItem = this.data.items.length - 1;
	}
	this.select(true);
	
	
	//setup hovers
	for(var i = 0; i < this.data.items.length; i++){
		$('#'+this.data.items[i].itemId).bind(
			'mouseover',
			
			{
				rollover: this,
				selected: i
			},
			
			function(event){
				event.data.rollover.hoveredItem = event.data.selected;
				event.data.rollover.select();
			}
						
		);
	}

}

icom.rollover.prototype.select = function(timed){
	
	for(var i = 0; i < this.data.items.length; i++){
		document.getElementById(this.data.items[i].displayBlockId).style.display = "none";
	}

	document.getElementById(this.data.items[this.hoveredItem].displayBlockId).style.display = "block";
	
	if(this.data.reverse){
		this.hoveredItem--;
		if(this.hoveredItem < 0){
			this.hoveredItem = this.data.items.length - 1;
		}
	}else{
		this.hoveredItem++;
		if(this.hoveredItem >= this.data.items.length){
			this.hoveredItem = 0;
		}	
	}
	
	if(timed){
		setTimeout( bind(this, "select", [true]), 5000 );
	}
	
}



icom.rolloverContentViewer = function(data){
	this.data = data;
	this.clickedItem = null;
	this.select();
	
	//on clicks
	for(var i = 0; i < this.data.items.length; i++){
		$('#'+this.data.items[i].itemId).bind(
			'click',
			
			{
				rollover: this,
				selected: i
			},
			
			function(event){
				event.data.rollover.clickedItem = event.data.selected;
				event.data.rollover.select();
			}
						
		);
	}	
}

icom.rolloverContentViewer.prototype.select = function(){
	
	for(var i = 0; i < this.data.items.length; i++){
		document.getElementById(this.data.items[i].displayBlockId).style.display = "none";
	}
	
	if(this.clickedItem != null){
		$("#"+this.data.items[this.clickedItem].displayBlockId).slideDown("slow");
	}

}
