/*
	Create slide horizonal animation	
*/
var SlideHorzClass = new Class({
	initialize: function(className, activeClass) {
		this.arrHeader = $$("." + className);
		
		// make sure we have an element
		if (this.arrHeader.length == 0) {
			return;
		}
		
		// use this to return original state
		this.isMouseIn = false;
		this.container = this.arrHeader[0].getParent().getParent();
		/*
		var _self = this;
		this.container.addEvents({
			mouseover: function(e) {
				e = new Event(e);
				e.stop();
			
				_self.isMouseIn = true;
			},
			
			mouseout: function(e) {
				e = new Event(e);
				e.stop();
				
				_self.isMouseIn = false;
			}
		});
		*/
		
		if (activeClass == null) {
			activeClass = "";
		}
		
		var header, div, body;
		
		this.orgIndex = -1;		
		this.arrFx = new Array(this.arrHeader.length);
		this.arrBody = new Array(this.arrHeader.length);
		
		for (var i = 0; i < this.arrHeader.length; i++) {
			header = this.arrHeader[i];
			body = header.getNext();
			
			if (activeClass != "" && header.hasClass(activeClass)) {
				this.orgIndex = i;
			}
			
			header.manager = this;
			header.index = i;
			body.setStyle('display', 'block');
			header.setProperty('orgWidth', body.getCoordinates().width);
			/*
			header.addEvent('mouseover', function(e){
				e = new Event(e);
				this.manager.doSlide(this);
				e.stop();
			});
			*/
			if (body.getChildren().length > 0) {
				body.getChildren()[0].setStyle('width', body.getSize().size.x);
			}
			
			body.index = i;
			body.setStyles({
				overflow: 'hidden',
				width:  0
			});
			
			body.manager = this;
			body.remove();
			
			this.arrFx[i] = new Fx.Style(body, 'width', {duration: 500, onComplete: this.onCompleteFxHandler});
			this.arrBody[i] = body;
		}
		
		this.curIndex = -1;
		this.isUpdating = false;
		
		if (this.orgIndex != -1) {
			this.doSlide(this.arrHeader[this.orgIndex]);
		}
	},
	
	onCompleteFxHandler: function(obj) {
		obj.manager.isUpdating = false;
		if (parseInt(obj.getStyle('width')) == 0) {
			try {
				obj.remove();
			} catch (e) {}
		}
		
		/*
		var manager = obj.manager;
		if (!manager.isMouseIn && manager.orgIndex != -1) {
			manager.doSlide(manager.arrBody[manager.orgIndex]);
		}
		*/
	},
	
	doSlide: function(obj) {
		if (this.isUpdating) {
			return;
		}
		
		var index = obj.index;
		if (this.curIndex != index) {
			this.isUpdating = true;
			
			this.arrBody[index].injectAfter(obj);
			this.arrFx[index].start(obj.getProperty('orgWidth'));			
			
			if (this.curIndex != -1) {
				this.arrFx[this.curIndex].start(0);
			}
			
			this.curIndex = index;
		}
	}
});



