function MM_findObj(n, d) { //v4.0
	var p,i,x;  
	if(!d){ 
		d = document; 
	}
	if((p = n.indexOf("?")) > 0 && parent.frames.length){
		d = parent.frames[n.substring(p + 1)].document; 
		n = n.substring(0, p);
	}
	if(!(x = d[n]) && d.all){
		 x = d.all[n]; 
	}
	for(i = 0; !x && i < d.forms.length; i++){
		x = d.forms[i][n];
	}
	for(i = 0; !x && d.layers && i < d.layers.length; i++){
		x = MM_findObj(n, d.layers[i].document);
	}
	if(!x && document.getElementById){
		x = document.getElementById(n); 
	}
	return x;
}

document.getElementsByClassName = function(clsName){
    var retVal = new Array();
	if(document.getElementsByTagName){
	    var elements = document.getElementsByTagName("*");
	    for(var i = 0;i < elements.length;i++){
	        if(elements[i].className.indexOf(" ") >= 0){
	            var classes = elements[i].className.split(" ");
	            for(var j = 0;j < classes.length;j++){
	                if(classes[j] == clsName)
	                    retVal.push(elements[i]);
	            }
	        }
	        else if(elements[i].className == clsName)
	            retVal.push(elements[i]);
	    }
	}
    return retVal;
}

document.getObjectStyle = function(obj){ return obj.style? obj.style:obj; }



var KW_XFADEINTERVAL = 50;

function KW_Xfade(msFadeDuration, msRunningDelay, bIsRunning){

	this.m_nSlideCurrent = -1;	
	this.m_nSlideNew = 0;	
	
	this.m_msDuration = msFadeDuration;
	this.m_msDurationCurrent = 0;
	this.m_nIntervalIdDuration = false;
	
	this.m_msRunningDelay = msRunningDelay;
	this.m_bIsRunning = bIsRunning;
	this.m_nIntervalIdRunning = false;
	
}

KW_Xfade.prototype.initialise = function(){ 
	/* 	----------------------------------------------
		START: Test for function availability 
		----------------------------------------------	*/
	// Need the following functions from PN_Common.js
	this.m_bOpacityCapable = ( 
		typeof document.getObjectStyle(document.getElementsByClassName('kw_head')[0]).opacity != 'undefined'
	|| 	typeof document.getObjectStyle(document.getElementsByClassName('kw_head')[0]).filter != 'undefined'
	);
	
	
	if(!this.m_bOpacityCapable){	
		return;
	}
	
	/* 	----------------------------------------------
		END:   Test for function availability 
		----------------------------------------------	*/
	this.m_slides = [document.getElementsByClassName('kw_head')[0]];
	var aItem = document.getElementsByClassName('kw_item');
	if(0 < aItem.length) for(var i = 0; i < aItem.length; i++) this.m_slides[i + 1] = aItem[i];
	for(var i = 0; i < this.m_slides.length; i++){
		document.getObjectStyle(this.m_slides[i]).opacity = 0;
		document.getObjectStyle(this.m_slides[i]).filter = 'alpha(opacity=0)';
		document.getObjectStyle(this.m_slides[i]).display = 'block'; 
	}
	//if(this.m_bIsRunning){
		this.fadeToNextSlide();
	//}
}

KW_Xfade.prototype.isRunning = function(){ return this.m_bIsRunning; }
KW_Xfade.prototype.onOff = function(){ 
	if(this.m_bIsRunning){
		this.pause();
	} else {
		this.play();
	}
}
KW_Xfade.prototype.play = function(){
	this.m_bIsRunning = true;
	this.fadeToNextSlide();
}
KW_Xfade.prototype.pause = function(){
	this.m_bIsRunning = false;
	this._clearIntervalRunning();
}

KW_Xfade.prototype.fadeToPreviousSlide = function(){
	if(this.m_nSlideCurrent == -1) return; 
	var nSlideNew = this.m_nSlideCurrent - 1;
	if(nSlideNew == -1){
		nSlideNew = this.m_slides.length - 1;
	}
	this.fadeToSlide(nSlideNew);
}

KW_Xfade.prototype.fadeToNextSlide = function(){
	var nSlideNew = this.m_nSlideCurrent + 1;
	if(nSlideNew == this.m_slides.length){
		nSlideNew = 0;
	}
	this.fadeToSlide(nSlideNew);
}

KW_Xfade.prototype.fadeToSlide = function(nSlideNew){
	this._clearIntervalRunning();
	if(this.m_nIntervalIdDuration == false){
		this.m_nSlideNew = nSlideNew;
		this.m_msDurationCurrent = 0;
		var _this_ = this;
		this.m_nIntervalIdDuration = setInterval(function(){ _this_._fade(); }, KW_XFADEINTERVAL);
	}
}

KW_Xfade.prototype._fade = function(){
	this.m_msDurationCurrent += KW_XFADEINTERVAL;
	if(this.m_msDurationCurrent >= this.m_msDuration){
		this.m_msDurationCurrent = this.m_msDuration;
	}
	// Use Ease
	var dOpacity = this._easeInOut(this.m_msDurationCurrent, this.m_msDuration);
	this._setOpacity(this.m_nSlideNew, dOpacity); 
	if(this.m_nSlideCurrent != -1){
		this._setOpacity(this.m_nSlideCurrent, 1 - dOpacity); 
	}
	if(this.m_msDurationCurrent == this.m_msDuration){
		this._clearIntervalDuration();
		this.m_nSlideCurrent = this.m_nSlideNew;
		if(this.m_bIsRunning){
			var _this_ = this;
			this.m_nIntervalIdRunning = setInterval(function(){ _this_.fadeToNextSlide(); }, this.m_msRunningDelay);
		}
	}
}

KW_Xfade.prototype._setOpacity = function(n, dOpacity){	
	document.getObjectStyle(this.m_slides[n]).opacity = dOpacity;
	document.getObjectStyle(this.m_slides[n]).filter = 'alpha(opacity=' + Math.round(dOpacity*100) + ')';
}
KW_Xfade.prototype._getOpacity = function(n){	
	return document.getObjectStyle(this.m_slides[n]).opacity;
}


KW_Xfade.prototype._clearIntervalDuration = function(){
	clearInterval(this.m_nIntervalIdDuration);
	this.m_nIntervalIdDuration = false;
}
KW_Xfade.prototype._clearIntervalRunning = function(){
	clearInterval(this.m_nIntervalIdRunning);
	this.m_nIntervalIdRunning = false;
}

KW_Xfade.prototype._easeInOut = function(t,d){
	return (1 - Math.cos(Math.PI*t/d))/2;
}

function rollOverSetup(aKey, sIdPrefix, sPrefix, sPostfix, nWidth, nHeight){
	var aPreload = [];
	for(var i = 0; i < aKey.length; i++){
		var a = MM_findObj('a_' + sIdPrefix + aKey[i]);
		if(a){
			eval("a.onmouseover = function(){ rollover_set_img('" + aKey[i] + "', '" + sIdPrefix + "', '" + sPrefix + "', '" + sPostfix + "', 1); }");
			eval("a.onmouseout = function(){  rollover_set_img('" + aKey[i] + "', '" + sIdPrefix + "', '" + sPrefix + "', '" + sPostfix + "', 0); }");
			eval("a.onclick = function(){ this.blur(); }");
		}
		if(document.images){
			aPreload[i] = new Image(nWidth, nHeight);
			aPreload[i].src = sPrefix + aKey[i] + sPostfix;
		}
	}
}

function rollover_set_img(sKey, sIdPrefix, sPrefix, sPostfix, bOver){
	var img = MM_findObj('img_' + sIdPrefix + sKey);
	if(bOver == 1){	
		img.oldSrc = img.src; 
		img.src = sPrefix + sKey + sPostfix; 
	} else {
		img.src = img.oldSrc;	
	}
}
