

/**
 * Tab control.
 *
 * @license GNU General Public License v2
 * @author Towers Planning Co.,Ltd.
 * @version 1.0
 * @see http://www.towers-p.co.jp/
 * @see http://mootools.net
 * @since 2009
 */

var Article;
if (!Article) {Article = {}};

Article.Tab = new Class({

	Implements: [Options, Events],

	options: { "onActivate": null },

	initialize: function(navigations, panels, options) {
		this.setOptions(options);
		this.navigations = navigations;
		this.panels = panels;
		this.currentlyNumber = 0;
		this.currently = this.panels[this.currentlyNumber];
		this._initializeTriggers();
		this.activate(this.currentlyNumber);
	},

	/**
	 * @private
	 */
	_initializeTriggers: function() {
		this.navigations.each(function(trigger,triggerNumber){
			trigger.addEvent("click", function(event) {
				event.stop();
				var navigations = this.navigations;
				var clickNumber = navigations.indexOf(event.target);
				this.activate(clickNumber);
			}.bind(this));
		}.bind(this));
	},

	/**
	 * @public
	 */
	activate:function (panelNumber) {
		this.currentlyNumber = panelNumber;
		this.panels.each(function(panel,key){
			var navi = this.navigations[key];
			if (key == this.currentlyNumber) {
				this.currently = panel;
				panel.setStyles({"opacity": 1, "display": ""});

				navi.addClass("active");
				this.fireEvent("activate", [this.currentlyNumber, this.currently, navi]);
			} else {
				navi.removeClass("active");
				panel.setStyles({"opacity": 0, "display": "none"});
			}
		}.bind(this));
	}

});


/**
 * Combobox
 *
 * @license GNU General Public License v2
 * @author Towers Planning Co.,Ltd.
 * @version 1.0
 * @see http://www.towers-p.co.jp/
 * @see http://mootools.net
 * @since 2009
 */
var Combobox = new Class({

	Implements: [Events, Options],

	"options": {
		"defaultValue": 0,
		"displayItems": 7
	},

	initialize: function(container, options) {
		this.setOptions(options);
		this.c			= $(container);
		this.trigger	= this.c.getElement("p.trigger a")
		this.selectText = this.c.getElement("p.selectText a")
		this.elements	= this.c.getElements("li a");
		this.combobox	= this.c.getElement("ul.selectItems");
		
		var combo  = this.combobox;
		var select = this.selectText;
		combo.setStyle("opacity", 0);

		var s = select.getSize();
		var p = select.getPosition();

		var a = (Browser.Engine.trident) ? this.getMaxWidth() - 22: this.getMaxWidth();
		select.setStyle("width", a);

		combo.setStyle("top", s.y + p.y + 3);
		combo.setStyle("width", (Browser.Engine.trident) ? this.getMaxWidth() : this.getMaxWidth() + 22);
		this.initializeEvent();
		this.index = this.getByText(this.options.defaultValue);
		this.activate(this.index);

		$(document.body).addEvent("click", function() {
			var o = this.combobox.getStyle("opacity").toInt();
			(o == 0) ? false : this.onToggle();
		}.bind(this));
	},

	onSelect: function(e,k) {
		this.activate(k);
		this.selectText.set("html", e.get("html"));
		this.combobox.fade();
	},

	onToggle: function() {
		this.initializeStyle();
		this.combobox.fade();
	},

	getByText: function(text) {
		var findId = 0;
		for (var i = 0; i < this.elements.length; i++) {
			var e		= this.elements[i];
			var name	= e.get("html");
			if (text == name) {
				findId = i;
				break;
			}
		}
		return findId;
	},
	
	initializeEvent: function(){
		this.trigger.addEvent("click", this.onToggle.bind(this));
		this.selectText.addEvent("click", this.onToggle.bind(this));
		this.elements.each(function(e,k){
			e.addEvent("click", this.onSelect.bind(this, [e,k]));
		},this);
	},

	initializeStyle: function(){
		var tx = 0;
		var th = 0;
		var l = (this.elements.length >= this.options.displayItems) ? this.options.displayItems : this.elements.length;
		for (var i = 0; i < l; i++) {
			var e = this.elements[i];
			var p = e.parentNode;
			var y = (Browser.Engine.trident) ? e.getSize().y : p.getSize().y;	
			th += y;
		}
		this.combobox.setStyle("height", th);
	},

	getMaxWidth: function(){
		var tx = 0;
		for (var i = 0; l = this.elements.length, i < l; i++) {
			var e = this.elements[i];
			var p = e.parentNode;
			var x = (Browser.Engine.trident) ? e.getSize().x : p.getSize().x;	
			if (x > tx) {
				tx = x;
			}
		}
		return tx;
	},

	getValue: function() {
		var e = this.elements[this.index];
		var classes = e.getProperty("class");
		var v = classes.match(/(v\d*)/).pop();
		v = v.replace(/v/,"");
		return (v != "") ? v.toInt() : null;
	},

	activate: function(i){
		var elements = this.elements;
		elements.each(function(e,k) {
			(k == i) ? e.addClass("active") : e.removeClass("active"); 
		});
		this.index = i;
		this.selectText.set("html", elements[this.index].get("html"));
	}
});

