function initTabs()
{
	var _fadeSpeed = 200;
	var _switchTime = 4000;
	var sets = document.getElementsByTagName("ul");
	for (var i = 0; i < sets.length; i++)
	{
		if (hasClass(sets[i],"tabset"))
		{
			(function(i){
				var _autoTimer;
				var currentIndex = 0;
				var linkIndex = 0;
				var tabs = [];
				var links = sets[i].getElementsByTagName("a");
				for (var j = 0; j < links.length; j++)
				{
					if (hasClass(links[j],"tab") != -1)
					{
						links[j].ind = linkIndex++;
						tabs.push(links[j]);

						links[j].tabs = tabs;
						var c = document.getElementById(links[j].href.substr(links[j].href.indexOf("#") + 1));

						//reset all tabs on start
						if (c) if (links[j].className.indexOf("active") != -1) {
							c.style.position = "static";
							c.style.top = "0";
						}
						else {
							c.style.position = "absolute";
							c.style.top = "-9999px";
						}

						links[j].onclick = function ()
						{
							if(_autoTimer) clearInterval(_autoTimer);
							currentIndex = this.ind;

							var c = document.getElementById(this.href.substr(this.href.indexOf("#") + 1));
							if (c)
							{
								//reset all tabs before change
								for (var i = 0; i < this.tabs.length; i++)
								{
									var tabblock = document.getElementById(this.tabs[i].href.substr(this.tabs[i].href.indexOf("#") + 1));
									var tlink = this.tabs[i];
									var clink = this;
									removeClass(tlink.parentNode,"active")

									if(tabblock.offsetWidth) {
										fadeBlock(tabblock, false,function(){
											// fade out prev
											tabblock.style.position = "absolute";
											tabblock.style.top = "-9999px";

											// fade in next
											c.style.position = "static";
											c.style.top = "0";
											fadeBlock(c, true,function(){
												addClass(clink.parentNode,"active");
												autoRotate();
											});
										});
									}
								}
								return false;
							}
						}
					}
				}

				// autorotation
				function nextTab() {
					if(currentIndex < tabs.length-1) currentIndex++;
					else currentIndex = 0;
					clickObject(tabs[currentIndex]);
				}
				function autoRotate() {
					if(_autoTimer) clearInterval(_autoTimer);
					if (hasClass(sets[i],"autorotate")) {
						_autoTimer = setInterval(nextTab,_switchTime);
					}
				}
				autoRotate();
			})(i);
		}
	}


	function fadeBlock(block, state, fcallback) {

		if(block) {
			var ie = (window.attachEvent && !window.opera ? 1 : 0);
			var obj = block.style;
			var step = 5;//(ie ? 100 : 5);
			var fade;

			// init object styles
			obj.visibility = "visible";
			obj.display = "block";
			if(state) {
				if(ie) obj.filter="alpha(opacity=0)"; else obj.opacity = "0";
				block.style.display = 'block';
				fade = 0;
			} else {
				if(ie) obj.filter="alpha(opacity=100)"; else obj.opacity = "1";
				fade = 100;
			}

			// fade animation
			function fadeObj()
			{
				if(state) {
					if(fade<100)
					{
						fade+=step;
						if(ie) obj.filter="alpha(opacity="+fade+")";
						else obj.opacity=(fade/100);
					}
					else {
						clearInterval(anim);
						if(ie) obj.filter="none";
						if(fcallback && typeof fcallback === 'function') {
							fcallback();
						}
					}
				} else {
					if(fade>0)
					{
						fade-=step;
						if(ie) obj.filter="alpha(opacity="+fade+")";
						else obj.opacity=(fade/100);
					}
					else {
						clearInterval(anim);
						block.style.display = 'none';
						if(fcallback && typeof fcallback === 'function') {
							fcallback();
						}
					}
				}
			}
			var anim = setInterval(fadeObj,10);
		}
	};
	function clickObject(obj) {
		var target=obj;
		if(document.dispatchEvent) { // W3C
			var oEvent = document.createEvent( "MouseEvents" );
			oEvent.initMouseEvent("click", true, true,window, 1, 1, 1, 1, 1, false, false, false, false, 0, target);
			target.dispatchEvent( oEvent );
		}
		else if(document.fireEvent) { // IE
			target.fireEvent("onclick");
		}
	}
	function hasClass(obj,cname) {
		return (obj.className ? obj.className.match(new RegExp('(\\s|^)'+cname+'(\\s|$)')) : false);
	}
	function addClass(obj,cname) {
		if (!hasClass(obj,cname)) obj.className += " "+cname;
	}
	function removeClass(obj,cname) {
		if (hasClass(obj,cname)) obj.className=obj.className.replace(new RegExp('(\\s|^)'+cname+'(\\s|$)'),' ');
	}
}

if (window.addEventListener) window.addEventListener("load", initTabs, false);
else if (window.attachEvent) window.attachEvent("onload", initTabs);