/* constants */
var intMinFlashVersion = 6

/* Container for all bannercollections */
var bannerCollections = new Array()

/* ****************************************************************************
   Name: Bannercollections 
   Object-constructor Used to store collections of banners and to process rotation
**************************************************************************** */
function BannerCollection(strTargetContainer, arrBanners, intDelayTime, intWidth, intHeight, intNumberOfBannersToDisplay, intClickable)
{
	this.strTargetContainer = strTargetContainer
	this.arrBanners = arrBanners
	this.intDelayTime = intDelayTime
	this.intWidth = intWidth
	this.intHeight = intHeight
	this.intNumberOfBannersToDisplay = intNumberOfBannersToDisplay
	this.intCurrentBanner = Math.round(Math.random()*(arrBanners.length-1))
	this.intClickable = intClickable
} //BannerCollection


/* ****************************************************************************
   Name: Bannercollections.prototype.fnLoadNextBanner
   Used to set and load the next banner
**************************************************************************** */
BannerCollection.prototype.fnLoadNextBanner = function(intFadeTime)
{
	this.intCurrentBanner++
	if (this.intCurrentBanner >= this.arrBanners.length) {
		this.intCurrentBanner = 0
	}
	
	var i
	var intBanner = this.intCurrentBanner - 1
	for (i = 0; i < this.intNumberOfBannersToDisplay; i++) {
		if (this.arrBanners[this.intCurrentBanner].fnCanPlay()) {
			intBanner++
			if (intBanner >= this.arrBanners.length) {
				intBanner = 0
			}
			this.arrBanners[intBanner].fnLoadHtml(this.strTargetContainer + "_" + i, this.intWidth, this.intHeight, this.intClickable, intFadeTime)
		} else {
			this.fnLoadNextBanner(intFadeTime)
		}
	}
} //Bannercollections.prototype.fnLoadNextBanner


/* ****************************************************************************
   Name: Banner
   Object-constructor to store banner-data
**************************************************************************** */
function Banner(strName, strDescription, strUrl, strImageUrl, btFlash, strTarget)
{
	this.strName = strName
	this.strDescription = strDescription
	this.strUrl = strUrl
	this.strImageUrl = strImageUrl
	this.strTarget = strTarget
	
	
	if (btFlash==1)
	{
		if (detectFlash) {
			this.data = new FlashObject(strImageUrl, this.strName, 100, 100, intMinFlashVersion, "#FFFFFF")
			this.data.addParam("strUrl", this.strUrl)
			this.data.addParam("strDescription", this.strDescription);
		}
	} else {
		this.data = new Image()
		this.data.src = strImageUrl
	}
	
	this.btFlash = btFlash
} // Banner


/* ****************************************************************************
   Name: Banner.prototype.fnLoadHtml
   Writes a banner into to the html-container
**************************************************************************** */
Banner.prototype.fnLoadHtml = function(strTargetContainer, intWidth, intHeight, intClickable, intFadeTime) {
    var linkRef = document.getElementById(strTargetContainer + "_href")
    var imgRef = document.getElementById(strTargetContainer + "_img")
    var flashRef = document.getElementById(strTargetContainer + "_flash")

    var fnCreateNewBanner = function(linkRef, imgRef, flashRef, objBanner, intFadeTime, intHeight, intWidth) {
        if (objBanner.btFlash == 0) {

            if (flashRef) {
                flashRef.style.display = "none"
            }
            if (linkRef) {
                linkRef.style.display = "block"
            }
            imgRef.src = objBanner.data.src
            if (intHeight > 0) { imgRef.height = intHeight }
            if (intWidth > 0) { imgRef.width = intWidth }
            imgRef.title = objBanner.strDescription
            if (intClickable == 1) {
                linkRef.href = objBanner.strUrl
                linkRef.title = objBanner.strDescription
                linkRef.target = objBanner.strTarget
            }
        } else {
            linkRef.style.display = "none"
            flashRef.style.display = "block"
            objBanner.data.width = intWidth
            objBanner.data.height = intHeight
            objBanner.data.write(strTargetContainer + "_flash")
        }
       
        if (intFadeTime > 0) {
            jQuery(imgRef).fadeIn(intFadeTime);
        }
    }

    var currentBanner = this;


    if (intFadeTime > 0) {
        jQuery(imgRef).fadeOut(intFadeTime, (function() { fnCreateNewBanner(linkRef, imgRef, flashRef, currentBanner, intFadeTime, intHeight, intWidth) }));
    } else {
        fnCreateNewBanner(linkRef, imgRef, flashRef, currentBanner, intFadeTime, intHeight, intWidth);
    }

}                 //Banner.prototype.fnLoadHtml

/* ****************************************************************************
   Name: Banner.prototype.fnLoadHtml
   Checks if a banner can be displayed in the current browser
**************************************************************************** */
Banner.prototype.fnCanPlay =  function()
{
	if (this.btFlash==0)
	{
		return true
	}
	else
	{
		return detectFlash(intMinFlashVersion)
	}
} //Banner.prototype.fnCanPlay

/* ****************************************************************************
   Name: fnShowBanners
   Initializes a bannercontainer and starts rotation
**************************************************************************** */
function fnShowBanners(strTargetContainer, arrBanners, intDelayTime, intWidth, intHeight, intFadeTime, intNumberOfBannersToDisplay, intClickable, strStyle, strResourceUrl) {

    if (intFadeTime > 0) {
        jQuery.noConflict();
    }

	//create new collection
	if (intNumberOfBannersToDisplay >= arrBanners.length)
	{
		intNumberOfBannersToDisplay = arrBanners.length
	}
	
	bannerCollections[strTargetContainer] = new BannerCollection(strTargetContainer, arrBanners, intDelayTime, intWidth, intHeight, intNumberOfBannersToDisplay, intClickable, strStyle)
	var strHtml = ""	
	var i
	for (i = 0; i < intNumberOfBannersToDisplay; i++)
	{ 			
		
		if (intClickable == 1)
		{
			strHtml += "<a href=\"#\" id=\"" + strTargetContainer + "_" + i + "_href\" style=\"display:none\">";
		}
		strHtml += "<img src=\"" + strResourceUrl + "/spacer.gif\" border=\"0\" title=\"\" id=\"" + strTargetContainer + "_" + i + "_img\" class=\"" + strStyle + "\">";
		
		if (intClickable == 1)
		{
			strHtml += "</a>";
		}
		strHtml += "<span id=\"" + strTargetContainer + "_" + i + "_flash\"  style=\"display:none\"></span>";
				
	}

	document.getElementById(strTargetContainer).innerHTML = strHtml
	  	
	// Start bannerRotation if at least one banner can play
	var boolCanPlay = false;
	for (var i = 0; i<arrBanners.length;i++) {
	    if (arrBanners[i].fnCanPlay()) {
	        boolCanPlay = true;
	    }
	}
	if (boolCanPlay) {
	    fnShowNextBanner(strTargetContainer, intFadeTime, intNumberOfBannersToDisplay)
	}

} //fnShowBanners

/* ****************************************************************************
   Name: fnShowNextBanner
   A timed method to execute banner-rotation
**************************************************************************** */
function fnShowNextBanner(strTargetContainer, intFadeTime, intNumberOfBannersToDisplay)
{
    bannerCollections[strTargetContainer].fnLoadNextBanner(intFadeTime)
	
	//Rotation isn't neccacery if there aren't more banners than the displayed ones
	if (intNumberOfBannersToDisplay != bannerCollections[strTargetContainer].arrBanners.length)
	{
	    // Do not rotate if intDelayTime is set to -1
	    if (bannerCollections[strTargetContainer].intDelayTime != -1) {
		    setTimeout("fnShowNextBanner('" + strTargetContainer +"', '" + intFadeTime +"', '" + intNumberOfBannersToDisplay +"');", bannerCollections[strTargetContainer].intDelayTime)
	    }
	}
}