/*--------------------------------------------------------------------------
 *
 *  Hider for Sheem4's JavaScript framework, v0.1 (20090401)
 *
 *  Author: 	sheem4
 *  Contact: 	patrik@sheem4.cz
 *
 *--------------------------------------------------------------------------*/

S4.Plugins.Hider = {
	Bases: {
		Trigger: function(content) {
			this.content = content;
			this.tohide = [];
			
			this.hiderinit = function() {
				this.addListener("mouseup", this.toggleex);
				return this;
			};
			
			this.toggleex = function(e, internal) {
				if (this.hidergroup && !internal) S4.Plugins.Hider.Groups.hide(this.hidergroup);
				
				if (this.content.toggle()) {
					this.removeClassName('collapsed');
					this.addClassName('expanded');
				} else {
					this.removeClassName('expanded');
					this.addClassName('collapsed');
				};
			};
		},
		
		Group: function() {
			this.name = '';
			this.items = [];
			
			this.register = function(elm) {
				this.items.push(elm);
				elm.hidergroup = this.name;
			}
		}
	},
	
	Groups: {
		items: [],
		
		grp: function(group) {
			var ex;
			
			for (var i = 0; i < this.items.length; i++) {
				if (this.items[i].name == group) {
					ex = this.items[i]
					break;
				};
			};
			
			if (!ex) {
				ex = new S4.Plugins.Hider.Bases.Group;
				ex.name = group;
				this.items.push(ex);
			};
			
			return ex;
		},
		
		hide: function(group) {
			var elms = this.grp(group).items;

			for (var i = 0; i < elms.length; i++) {
				if (elms[i].content.visible()) elms[i].toggleex(null, true);
			};
		}
	},
	
	init: function() {
		var elms = $document().$getElementsByAttributeName('s4:trigger');
		var regs = $document().$getElementsByAttributeName('s4:region');
		
		for (var i = 0; i < elms.length; i++) {
			for (var ii = 0; ii < regs.length; ii++) {
				if (regs[ii].$at("s4:region").value == elms[i].$at("s4:trigger").value) {
					var tg = $extend(elms[i], new S4.Plugins.Hider.Bases.Trigger(regs[ii])).hiderinit();

					if (regs[ii].$at("s4:visible")) {
						if (regs[ii].$at("s4:visible").value.toLowerCase() == "false") {
							tg.toggleex(null, true);
						};
					};
					
					if (tg.$at("s4:group")) {
						this.Groups.grp(tg.$atv("s4:group")).register(tg);
					};
				};
			};
		};
	},
	
	add: function(trigger, elm, visible, group) {
		var tg = $extend(trigger, new S4.Plugins.Hider.Bases.Trigger(elm)).hiderinit();
		if (!visible) {
			tg.toggleex(null, true);
		} else {
			tg.addClassName('expanded');
		};
		if (group) {
			this.Groups.grp(group).register(tg);
		};
		return tg;
	}
};

S4.addListener(S4.Events.DOM_READY, S4.Plugins.Hider.init, S4.Plugins.Hider);
