var iterations = 20;
var tabRotateInterval = 6000;
var fadeOutTime = 500;
var fadeInTime = 500;
var tabCtl = null;

function tabControlObj(d){
	this.div = d;
	this.iterationIndex = 0;
	this.frames = new Array();
	this.tabSetDiv = null;
	this.isHovering=false;	
	this.cancelRotate = false;
	this.curTab=0;
	if(this.div==null ){
		alert("tabmenu.js: tabControlObj(div): div==null");
	}
	else this.init(this.div);
}

tabControlObj.prototype.init = function(){
	
	var divs=this.div.getElementsByTagName("div");
	var obj ;
	for(var i=0;i<divs.length;i++){
		
		var tabFrameDiv = divs[i];
		if(tabFrameDiv.id.substring(0,8)=="tabframe" && tabFrameDiv.id.length==9){
			
			var idx = tabFrameDiv.id.substring(8);
			idx--;
			obj = new tabFrameObj(tabFrameDiv,idx,this);
			this.frames[idx]=obj;
			if(obj.isDefaultTabFrame)this.curTab = idx;
		}
		else if(tabFrameDiv.id.substring(0,5)=="tabset" && tabFrameDiv.id.length==6){
			this.tabSetDiv = tabFrameDiv;
		}
    }
	
}

function tabFrameObj(d,idx,parent){
	this.tabControl = parent;
	this.div = d;
	this.isDefaultTabFrame = false;
	this.frameIndex = idx;
	this.isHidden = false;
	this.imageDiv = null;
	this.leftImageDiv = null;
	this.tabDiv = null;
	if(this.div==null ){
		alert("tabmenu.js: tabFrameObj(div): div==null");
	}
	else this.init();
}

tabFrameObj.prototype.init = function(){
	this.div.tabFrameObj = this;
	if(this.div.className.indexOf("default-tab")>-1)
		this.isDefaultTabFrame = true;
	
		
	var divs=this.div.getElementsByTagName("div");
	var obj ;
	
	for(var i=0;i<divs.length;i++){
	    
		var frameImageDiv = divs[i];
		if(frameImageDiv.id.substring(0,10)=="frameimage" && frameImageDiv.id.length==11){
			this.imageDiv = frameImageDiv;
			var tabid = "tab"+(this.frameIndex+1);
			this.tabDiv = new tabObj(document.getElementById(tabid),this);
			if(this.isDefaultTabFrame)
				this.show();
			else
				this.hide();
		}	
    }
	this.div.onmouseover = this.tabMouseOver;
	this.div.onmouseout = this.tabMouseLeave;
	this.div.onmouseclick = this.tabMouseClick;
}

tabFrameObj.prototype.tabMouseOver = function(){
	this.tabFrameObj.tabControl.isHovering = true;
	this.tabFrameObj.tabControl.cancelRotate = true;
}

tabFrameObj.prototype.tabMouseLeave = function(){
	this.tabFrameObj.tabControl.isHovering = false;
}

tabFrameObj.prototype.tabMouseClick = function(){
	
}

function tabObj(d,parent){
   this.div = d;
   this.div.tabObj = this;
   this.tabFrameObj = parent;
   this.tabControl = parent.tabControl;

   if(this.div==null ){
     alert("tabmenu.js: tabControlObj(div): div==null");
   }
   this.init();
} 

tabObj.prototype.init = function(){
	this.div.onmouseover = this.tabMouseOver;
	this.div.onmouseout = this.tabMouseLeave;
	this.div.onmouseclick = this.tabMouseClick;
}

tabObj.prototype.tabMouseOver = function(){
	this.tabObj.tabControl.isHovering = true;
	this.tabObj.tabControl.cancelRotate = true;
	this.tabObj.tabControl.showFrameAtIndex(this.tabObj.tabFrameObj.frameIndex);
}

tabObj.prototype.tabMouseLeave = function(){
	this.tabObj.tabControl.isHovering = false;
}

tabObj.prototype.tabMouseClick = function(){
	this.tabObj.tabControl.isHovering = false;
}

tabFrameObj.prototype.hide = function(){
	if(!this.isHidden){
		this.imageDiv.style.zIndex=0;
		setOpacity(this.imageDiv.id,0);
		this.isHidden = true;
	}
}

tabFrameObj.prototype.show = function(){
	if(this.isHidden){
		this.imageDiv.style.zIndex=this.frameIndex+1;
		setOpacity(this.imageDiv.id,100);
		this.isHidden = false;
	}
}

tabFrameObj.prototype.fadeOut = function(){
	if(!this.isHidden){
		opacityFade(this.imageDiv.id,100,0,fadeOutTime);
		this.imageDiv.style.zIndex=0;
		this.isHidden = true;
	}
}

tabFrameObj.prototype.fadeIn = function(){
	if(this.isHidden){
		this.imageDiv.style.zIndex=this.frameIndex+1;
		opacityFade(this.imageDiv.id,0,100,fadeInTime);
		this.isHidden = false;
	}
}

tabControlObj.prototype.showFrameAtIndex = function(idx){
	var obj = this.frames[this.curTab];
	obj.hide();
	obj = this.frames[idx];
	obj.show();
	this.curTab = idx;
}

tabControlObj.prototype.rotateProcess = function(){

	if(this.isHovering || this.cancelRotate)
		return;
		
	var o = this.frames[this.curTab];
	o.fadeOut();
	
	this.curTab++;
	
	if(this.curTab == this.frames.length ){
		this.curTab = 0;
		this.iterationIndex++;
	}
	
	o = this.frames[this.curTab];
	o.fadeIn();
		
	if(this.iterationIndex < iterations )
		this.startRotate();
}

tabControlObj.prototype.startRotate = function(){
	if(document.all){
		gs[this.div.id] = this;
		setTimeout("msFix('"+this.div.id+"','rotateProcess')", tabRotateInterval );
	}else{
		setTimeout('tabCtl.rotateProcess()', tabRotateInterval );
	}
		
}

tabControlObj.prototype.cancelRotate = function(){
    this.cancelRotate = true;
}

function opacityFade(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speedw = Math.round(millisec / 100);
    var timerw = 0;
	
	var ii = 0;
	
    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(ii = opacStart; ii >= opacEnd; ii--) {
			
			if(document.all){
				gs[id] = this;
				setTimeout("msFix('" + id + "','setOpacity','"+id+"','"+ii+"')",(timerw * speedw));
			}else{
            	setTimeout("setOpacity('" + id + "'," + ii + ")",(timerw * speedw));
			}
            timerw++;
        }
		
    } else if(opacStart < opacEnd) {
	
        for(ii = opacStart; ii <= opacEnd; ii++){
			
			if(document.all){
				gs[id] = this; 
				setTimeout("msFix('" + id + "','setOpacity','"+ id+"','"+ii+"')",(timerw * speedw));
			}else{
            	setTimeout("setOpacity('" + id + "'," + ii + ")",(timerw * speedw));
			}
            timerw++;
        }		
    }	
}

//change the opacity for different browsers
function setOpacity (id,opacity) {
	var obj = document.getElementById(id);
    obj.style.opacity = (opacity / 100);
    obj.style.MozOpacity = (opacity / 100);
    obj.style.KhtmlOpacity = (opacity / 100);
	if(opacity==undefined || opacity==null || opacity<0 || opacity>100)
		;//alert("setOpacity:"+id+":"+opacity);
	else
	if(id==undefined || id==null )
		;//alert("setOpacity:"+id+":"+opacity);
    obj.style.filter = "alpha(opacity=" + opacity + ")";
}

function cancelTabRotate(){
    this.tabCtl.cancelRotate();
}

function initTabCtl(){
	var tabctldiv = document.getElementById("tabcontrol1")
	this.tabCtl = new tabControlObj(tabctldiv);
	this.tabCtl.startRotate();
}


//////////////////////ROTATE///////////////////////////////////
var gs = [];

function msFix(id, f, p1,p2){
	var s = gs[id];
	var param1 = "";
	if(p1)param1="'"+p1+"'";
	var param2="";
	if(p2)param2=","+p2+"";
	
	eval( "s." + f + "(" + param1 +param2+")" );
}


/////////////////////////////////////////////////////////
try {
  document.execCommand('BackgroundImageCache', false, true);
} catch(e) {}





