/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) {
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

function Rotator() {

	this.baners = Array;
	this.banerCount = 0;
	this.currentBaner = 0;
	this.pe = false;
	this.divId = '';
	this.config = Array;
	var ref = false;
	
	//this.setup = setup;

}

Rotator.prototype.setup = function(divIdParam,inst,btnTxt,prevNext,rotate) {
	this.config.rotate = rotate;
	this.config.btnTxt = btnTxt;
	this.config.prevNext = prevNext;
	this.divId = divIdParam;
	this.banerPrefix = this.divId+'_b';
	this.instanceName = inst;
	$(this.divId).innerHTML = '';
}

Rotator.prototype.add = function(url,image,txt,subtxt,mode,bg) {
	var bghtml = '';
	var banerId = this.banerPrefix+this.banerCount;
	
	if(!mode) { mode = 'image'; }
	if(bg) { bghtml = "background-color: "+bg+";"; }
	var html = '<div id="'+banerId+'" class="rBaner" style="display: none;'+bghtml+'">';
	switch(mode) {
		case 'image':
			html += '<a href="'+url+'" target="_blank">';
			html += '<div class="img_outer"><img src="'+image+'" border="0" /></div>';
			html += '</a>';
			html += '<a href="'+url+'">';
			html += '<div class="txt">'+txt+'</div>';
			html += '</a>';
			//html += '<div class="subtxt">'+subtxt+'</div>';
			html += '<div class="mehr"><a href="'+url+'">';
			html += 'mehr';
			html += '<img class="noborder" alt="mehr: SOMMER SPEZIAL" src="images/wiecej.gif">';
			html += '</a></div>';
		break;
		case 'swf':			
		break;
	}
	html += '</div>';
	
	$(this.divId).innerHTML = $(this.divId).innerHTML+html;
			
	if(mode == 'swf') {
		$(banerId).onclick = function() { window.open(url); }
		$(banerId).style.cursor = 'pointer';
		var so = new SWFObject(image, "baner_swf", "340", "165", "7", "");
		so.addParam("wmode","transparent");
		so.write(banerId);
	}
	
	this.banerCount++;
}

Rotator.prototype.show = function(id) {
	
	//var divs = $(this.divId).getElementsByClassName('rBaner');
	var divs = getElementsByClassName('rBaner');
	for(var i = 0; i < divs.length; i++) {
		Element.hide(divs[i]);
	}	
	
	//Element.setOpacity($(this.banerPrefix+id),0);
	//new Effect.Opacity(this.banerPrefix+id, {duration:0.5, from:0, to:1.0});
	Element.show(this.banerPrefix+id);
	this.changeButton(id);
}

Rotator.prototype.next = function() {
	this.currentBaner++;
	if(this.currentBaner >= this.banerCount) {
		this.currentBaner = 0;
	}	
	this.show(this.currentBaner);
}

Rotator.prototype.prev = function() {
	this.currentBaner--;
	if(this.currentBaner < 0) {
		this.currentBaner = this.banerCount-1;
	}	
	this.show(this.currentBaner);
}

Rotator.prototype.manualSwitch = function(id) {
	clearInterval(this.pe);
	this.show(id);
}

Rotator.prototype.changeButton = function(id) {
	//var act = $(this.banerPrefix+'naviDiv').getElementsByClassName('act');
	var act = getElementsByClassName('act');
	if(act[0]) { act[0].className = 'nact'; }
	$(this.banerPrefix+'bz'+id).className = 'act';
}

Rotator.prototype.renderButtons = function() {
	var html = '';
	
	if(this.config.prevNext) {
		html += '<div onclick="'+this.instanceName+'.prev();" class="prev"></div>';
	}
	
	for(var i = 0; i < this.banerCount; i++) {
		var style = '';
		var style1 = '';
		if(i == this.banerCount-1) { 
			//style1 = 'width: 25px;';
			//style = 'border-right: solid 1px #ffffff;';
		}
		if(this.config.btnTxt) { var btnTxt = (i+1); } else { var btnTxt = ''; }
					
		html += '<div id="'+this.banerPrefix+'bz'+i+'" onclick="'+this.instanceName+'.manualSwitch('+i+');" class="nact" '+style1+'><div class="arr"></div><div class="btn" style="'+style+'">'+btnTxt+'</div></div>';		
	}
	
	if(this.config.prevNext) {
		html += '<div onclick="'+this.instanceName+'.next();" class="next"></div>';
	}
	
	return html;
}

Rotator.prototype.renderNavi = function() {
	$(this.divId).style.position = 'relative';
	var naviDiv = '<div id="'+this.banerPrefix+'naviDiv" class="naviDiv"><div class="naviDivBg"></div><div class="naviDivBgInner">';
	naviDiv += this.renderButtons();
	naviDiv += '</div></div>';
	$(this.divId).innerHTML = $(this.divId).innerHTML+naviDiv;	
}

Rotator.prototype.init = function() {
	this.renderNavi();
	this.show(0);
	var nextFn = function(scope) {
		var newFn = function() {
			scope.next();
		}
		return newFn;
	}
	if(this.config.rotate) { this.pe = setInterval(nextFn(this),6*1000); }
}
