//------------------------------------------------
//  Filterraum Banner v1.0
//	by Attila Simon - http://www.systemmedien.com
//	10/09/07
//
//------------------------------------------------


//
//	Global Variables
//
boverlayDuration = 0.2;
var boverlayOpacity = 0.8;

// Data
//var bsrc = 'index.php?rex_resize=600w__vollkeramik.jpg';
//var bwait = 2000;

var resizeDuration = 0.2;
var borderSize = 10;
var topOffset = 50;

// -----------------------------------------------------------------------------------
//
//	Additional methods for Element added by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setLeft: function(element,l) {
	   	element = $(element);
    	element.style.left = l +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});


// -----------------------------------------------------------------------------------
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.com
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	
//	console.log(self.innerWidth);
//	console.log(document.documentElement.clientWidth);

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

//	console.log("xScroll " + xScroll)
//	console.log("windowWidth " + windowWidth)

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
//	console.log("pageWidth " + pageWidth)

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function pause(ms){
	var date = new Date();
	curDate = null;
	do{var curDate = new Date();}
	while( curDate - date < ms);
}


// ---------------------------------------------------

function bshowSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function bhideSelectBoxes(){
	var selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

function bshowFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "visible";
	}

	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function bhideFlash(){
	var flashObjects = document.getElementsByTagName("object");
	for (i = 0; i < flashObjects.length; i++) {
		flashObjects[i].style.visibility = "hidden";
	}
   
	var flashEmbeds = document.getElementsByTagName("embed");
	for (i = 0; i < flashEmbeds.length; i++) {
		flashEmbeds[i].style.visibility = "hidden";
	}

}



var Banner = Class.create();

Banner.prototype = {
	
	// initialize()
	initialize: function() {			
		var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
		if (isInternetExplorer) { var bBody = document.getElementsByTagName("body")[0].firstChild;}else{var bBody = document.getElementsByTagName("body")[0];}
		//
		// overlay
		//
		var bOverlay = document.createElement("div");
		bOverlay.setAttribute('id','boverlay');
		bOverlay.style.display = 'none';
		
		bOverlay.onclick = function() { myBanner.end(); }
		bBody.appendChild(bOverlay);
		
		
		var objBannerbox = document.createElement("div");
		objBannerbox.setAttribute('id','bannerbox');
		// h
		//objBannerbox.style.display = 'none';
		//Element.setTop('bannerbox', '-1000');
		//Element.setLeft('bannerbox', '-1000');
		objBannerbox.style.left = '-1000px';
		
		objBannerbox.onclick = function(e) {
			if (!e) var e = window.event;
				var clickObj = Event.element(e).id;
			if ( clickObj == 'bannerbox') {
				myBanner.end();
			}
		};
		bBody.appendChild(objBannerbox);
		
		//
		// Banner Container
		//
		var bContainer = document.createElement("img");
		bContainer.setAttribute('id','bimagecontainer');
		bContainer.style.display = 'none';
		objBannerbox.appendChild(bContainer);
		//
		// start
		//
		this.bstart();
	},
	//
	// start
	//
	bstart: function() {
		// stretch overlay to fill page and fade in
		var arrayPageSize = getPageSize();
		Element.setWidth('boverlay', arrayPageSize[0]);
		Element.setHeight('boverlay', arrayPageSize[1]);
		new Effect.Appear('boverlay', { duration: boverlayDuration, from: 0.0, to: boverlayOpacity });
		this.bimage();
	},
	
	bimage: function()
	{
		bhideSelectBoxes();
        bhideFlash();
		bimageLoad = new Image();
		bsrc = 'index.php?rex_resize='+bsrc;
		bimageLoad.onload=function(){  
			Element.setSrc('bimagecontainer', bsrc);
			myBanner.bresize(bimageLoad.width, bimageLoad.height);
			bimageLoad.onload=function(){};	//	clear onLoad, IE behaves irratically with animated gifs otherwise 
		}
		bimageLoad.src = bsrc;
		
	},

	bresize: function( imgWidth, imgHeight) {
        
		
		//objBannerbox.style.display = 'block';
		// get curren width and height
		this.widthCurrent = Element.getWidth('bannerbox');
		this.heightCurrent = Element.getHeight('bannerbox');
		
		// get new width and height
		var widthNew = (imgWidth  + (borderSize * 2));
		var heightNew = (imgHeight  + (borderSize * 2));
		
		// scalars based on change from old to new
		this.xScale = ( widthNew / this.widthCurrent) * 100;
		this.yScale = ( heightNew / this.heightCurrent) * 100;
		
		new Effect.Scale('bannerbox', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'} );
		new Effect.Scale('bannerbox', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration} );
        
		// calculate top and left offset for the lightbox 
		var arrayPageScroll = getPageScroll();
        // modified by AE	
        // var bTop = arrayPageScroll[1] + (arrayPageSize[3] / 10);
		var bTop = arrayPageScroll[1] + topOffset;
		var bLeft = (arrayPageSize[0]-widthNew)/2;
		Element.setTop('bannerbox', bTop);
		Element.setLeft('bannerbox', bLeft);
		
		//new Effect.Appear('bannerbox', { duration: boverlayDuration, from: 0.0, to: 100 });
		
		myBanner.bshow();
		
	},
	
	
	bshow: function(){
		//Element.hide('loading');
		new Effect.Appear('bimagecontainer', { duration: resizeDuration, queue: 'end', afterFinish: function(){	myBanner.waiting(); } });

		//this.preloadNeighborImages();
	},
	
	waiting: function()
	{
	pause(bwait);
	myBanner.end();
	},
	//
	// end
	//
    end: function()
	{
	Element.hide('bannerbox');
	new Effect.Fade('boverlay', { duration: overlayDuration});
	bshowSelectBoxes();
	bshowFlash();
	}

}

//function initBanner() { myBanner = new Banner(); }
//Event.observe(window, 'load', initBanner, false);
