item_opener_global_timeout = new Array;

function ItemOpenerEngine() {
	this._counter = 0;
	this._standard_settings = new Array();
	
	this._standard_settings["min_height"] = 25;
	this._standard_settings["standard_height"] = 100;
	this._standard_settings["pixel_per_action"] = 10;
	this._standard_settings["speed"] = 1000;
	this._standard_settings["mouse_over_timeout"] = 300;
}

ItemOpenerEngine.prototype = {
	init : function () {
		if (this._elements) {
			item_opener.addLoadEvent(ItemOpenerEngine.prototype.onload);
		}
	},
	addElement : function (element) {
		
		if (!this._elements) { 
			this._elements = new Array();
		}
		
		new_array_key = this._elements.length;
		
		this._elements[new_array_key] = new ItemOpenerElement();
		
		this._elements[new_array_key].reference_id = new_array_key;
		
		this._elements[new_array_key].id = "item_opener_element_" + this._counter;	
		this._elements[new_array_key].counter = this._counter;	
		this._elements[new_array_key].element_id = element["element"];
		
		if (element["closed_height"] != undefined) {
			this._elements[new_array_key].min_height = element["closed_height"];
		} else {
			this._elements[new_array_key].min_height = this._standard_settings["min_height"];
		}
		
		if (element["opened_height"] != undefined) {
			this._elements[new_array_key].standard_height = element["opened_height"];
		} else {
			this._elements[new_array_key].standard_height = this._standard_settings["standard_height"];
		}
		
		if (element["pixel_per_action"] != undefined) {
			
			this._elements[new_array_key].pixel_per_action = element["pixel_per_action"];
		} else {
			this._elements[new_array_key].pixel_per_action = this._standard_settings["pixel_per_action"];
		}
		
		if (element["speed"] != undefined) {
			this._elements[new_array_key].speed = element["speed"];
			
		} else {
			this._elements[new_array_key].speed = this._standard_settings["speed"];
		}
		
		if (element["mouse_over_timeout"] != undefined) {
			this._elements[new_array_key].mouse_over_timeout = element["mouse_over_timeout"];
			
		} else {
			this._elements[new_array_key].mouse_over_timeout = this._standard_settings["mouse_over_timeout"];
		}
		
		this._counter++;
	},
	
	onload : function() {
		// Generate all circulations
		for (var i=0; i < item_opener._elements.length; i++) {
			if (document.getElementById(item_opener._elements[i].element_id)) {
				item_opener._elements[i].init();				
			}
		}
	},
	
	addLoadEvent : function(func) {
		var oldonload = window.onload;
		
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {
				oldonload();
				func();
			}
		}
	}
}

item_opener = ItemOpenerEngine;
item_opener = new ItemOpenerEngine();

function ItemOpenerElement() {
	this.images = new Array();
}

ItemOpenerElement.prototype = {
	init : function () {
		// EERSTE OPENEN EN MOUSE OVERS REGISTREREN
		
		this.current_item = "";
		this._timeout = "";
		
		item_counter = 0;
		
		element = document.getElementById(this.element_id);
		
		this.items = element.getElementsByTagName('div');
		
		for (i=0; i<this.items.length; i++) {
			if (this.items[i].parentNode.id == this.element_id) {
				this.items[i].id = "item_opener_" + this.counter + "_" + item_counter;
				
				this.items[i].onmouseover = function(use_item) {
					return function() {
						clearTimeout(this._timeout);
						this._timeout = setTimeout ("item_opener_mouse_over('" + this.id + "','" + this.current_item + "','" + use_item + "'," + this.speed + "," + this.pixel_per_action + "," + this.min_height + "," + this.standard_height + "," + this.reference_id + ")", this.mouse_over_timeout)
					}
				}(this.items[i].id).bind(this);
							
				if (item_counter == 0) {
					this.items[0].style.height = this.standard_height + 'px';
					this.current_item = this.items[0].id;
				}
				
				item_counter++;
			}
		}
	}
}

Function.prototype.bind = function(object) { 
	var __method = this; 
	
	return function() { 
		return __method.apply(object, arguments); 
	} 
}

function item_opener_mouse_over(element,opened,toopen,speed,pixels_per_action,min_height,standard_height,reference_id) {
	if (opened != toopen) {
		item_opener._elements[reference_id].current_item = toopen;
		
		if (document.getElementById(opened).style.height != undefined) {
			opened_height = document.getElementById(opened).style.height;
			opened_height=opened_height.replace('px','');
		} else {
			opened_height = standard_height;
		}
		
		if (document.getElementById(toopen).style.height != undefined && document.getElementById(toopen).style.height != "") {
			toopen_height = document.getElementById(toopen).style.height;
			toopen_height=toopen_height.replace('px','');
		} else {
			toopen_height = min_height;
		}
		
		change_height(element,opened,toopen,speed,pixels_per_action,opened_height,min_height,toopen_height,standard_height);
	}
}

function change_height (element,open_item,closed_item,speed,pixels_per_action,open_current_height,open_target_height,closed_current_height,closed_target_height) {
	clearTimeout(item_opener_global_timeout[element]);
	
	restartTimeout = false;
	
	if (open_current_height > open_target_height) {
		new_open_height = (parseInt(open_current_height)-parseInt(pixels_per_action));
		
		if (parseInt(new_open_height) > parseInt(open_target_height)) {
			restartTimeout = true;
		} else {
			new_open_height = open_target_height;
		}
		
		document.getElementById(open_item).style.height = new_open_height + 'px';
	}

	if (closed_current_height < closed_target_height) {
		new_closed_height = (parseInt(closed_current_height)+parseInt(pixels_per_action));
		
		if (parseInt(new_closed_height) < parseInt(closed_target_height)) {
			restartTimeout = true;
		} else {
			new_closed_height = closed_target_height;
		}
		
		document.getElementById(closed_item).style.height = new_closed_height + 'px';
	}
	
	if (restartTimeout) {
		item_opener_global_timeout[element] = setTimeout("change_height('" + element + "','" + open_item + "','" + closed_item + "'," + speed + "," + pixels_per_action + "," + new_open_height + "," + open_target_height + "," + new_closed_height + "," + closed_target_height + ")",(10000/speed))
	}
}