if (Prototype.Browser.IE) {
  Prototype.Browser.IEVersion = parseFloat(navigator.appVersion.split(';')[1].strip().split(' ')[1]);
  Prototype.Browser.IE6 =  Prototype.Browser.IEVersion == 6;
  Prototype.Browser.IE7 =  Prototype.Browser.IEVersion == 7;
}

var tabsList = Class.create();
tabsList.prototype = {

	field:null,
	list:null,
	menu:null,
	nbitems:null,
	scroll:false,
	single:false,
	nohash:false,
	tabs:true,
	selectedIndex:-1,
	currentElement:null,
	
	initialize: function(el) {
		this.list = el;
		this.scroll = this.list.hasClassName('scroll');
		this.nohash = this.list.hasClassName('nohash');
		this.single = this.list.hasClassName('single');
		this.tabs = !this.list.hasClassName('notabs');
		if(this.tabs) {
			var index = 0;
			var hash = location.hash.substr(1);
			this.menu = new Element("ul");
			var classes = $w(this.list.className);
			for(var c=0;c<classes.length;c++) this.menu.addClassName(classes[c]);
			Element.insert(this.list,{before:this.menu});
			var j=0;
			while(this.list.childNodes[j]) {
				if(this.list.childNodes[j].tagName && this.list.childNodes[j].tagName.toLowerCase() == 'li') {
					var li = this.list.childNodes[j];
					Element.extend(li);
					li.id = this.list.id+index;
					var childs = li.childElements();
					var caption = childs[0];
					var page = childs[1];
					var link = new Element("a", {"href":"#"+li.id});
					li.appendChild(link);
					Element.insert(li, {top:link});
					Element.insert(link,{top:caption});
					li.addClassName('tabsLink');
					page.addClassName('tabsPage');
					page.addClassName('clearfix');
					page.id = li.id;
					if(li.hasClassName('selected') || (hash==li.id)) this.selectedIndex = index;
					li.id = "";
					if(this.list.hasClassName("bottom")) {
						Element.insert(this.menu,{before:page});
					} else {
						Element.insert(this.menu,{after:page});
					}
					this.menu.appendChild(li);
					Event.observe(link, 'click', function(ev) {this.click(ev)}.bind(this), false);
					index++;
				}
				if(!Prototype.Browser.IE) j++;
			}
			Element.remove(this.list);
			this.menu.id = this.list.id;
			this.selectedIndex = (this.selectedIndex==-1) ? 0 : this.selectedIndex;
			this.nbitems = index-1;
			if(this.menu.up('form')) {
				var param = new Element("input", {"type":"hidden", "name":this.menu.id, "id":this.menu.id});
				this.menu.id = "";
				this.menu.up('form').appendChild(param);
				this.field = param;
				this.field.value = (this.selectedIndex>-1) ? this.selectedIndex : 0;
			}
			if(this.scroll) {
				var nextLink = new Element("li",{'class':'next'});
				var nextLinkAnchor = new Element("a", {'href': '#'}).update("&nbsp;");
				nextLink.appendChild(nextLinkAnchor);
				Element.insert(this.menu, {bottom:nextLink});
				var prevLink = new Element("li",{'class':'previous'});
				var prevLinkAnchor = new Element("a", {'href': '#'}).update("&nbsp;");
				prevLink.appendChild(prevLinkAnchor);
				Element.insert(this.menu, {top:prevLink});
				Event.observe(nextLinkAnchor, 'click', function(ev) {this.next(ev)}.bind(this), false);
				Event.observe(prevLinkAnchor, 'click', function(ev) {this.prev(ev)}.bind(this), false);
				
			}
			this.select(this.menu.down('li',this.selectedIndex+(this.scroll ? 1 : 0)));
			if(this.scroll) this.toggleScroll();
		}
	},
	
	click: function (ev) {
		Event.stop(ev);
		var el = Event.element(ev).up('li');
		this.select(el);
		
	},
	
	next: function (ev) {
		if(Event.element(ev) && !Event.element(ev).up('li').hasClassName('inherit')) {
			this.selectedIndex++;
			this.toggleScroll();
			this.select(this.menu.down('li',this.selectedIndex+1));
		}
		Event.stop(ev);
	},
	
	prev: function (ev) {
		if(Event.element(ev) && !Event.element(ev).up('li').hasClassName('inherit')) {
			this.selectedIndex--;
			this.toggleScroll();
			this.select(this.menu.down('li',this.selectedIndex+1));
		}
		Event.stop(ev);
	},
	
	select: function (el) {
		var page = el.down('a').getAttribute('href').match(/[-_\w]+$/i)[0];
		Element.removeClassName(this.currentElement, 'selected');
		$$('.tabsPage[id^='+this.menu.id+']').each(function(el) {Element.hide(el);});
		if(this.single) {
			$$('#'+this.menu.id+' .tabsLink').each(function(el) {Element.hide(el);}.bind(this));
			Element.show(el);
		}
		Element.addClassName(el,"selected");
		Element.show(page);
		if(!this.nohash && location.hash!="") location.hash = "#"+page;
		if(this.field) this.field.value = page.replace(this.field.id,"");
		this.currentElement = el;
	},
	
	toggleScroll: function() {
		if(this.selectedIndex>0) {
			Element.removeClassName(this.menu.down('.previous'),"inherit");
		} else {
			Element.addClassName(this.menu.down('.previous'),"inherit");
		}
		if(this.selectedIndex<this.nbitems) {
			Element.removeClassName(this.menu.down('.next'),"inherit");
		} else {
			Element.addClassName(this.menu.down('.next'),"inherit");
		}
	
	
	},
	
	dispose: function () {
	
	}
	
}
