IE    = document.all;
IELT7 = false;
// TEST  = false;
TEST = true;      
                         
/* ################################ */
/* #     IE Active x Solution     # */
/* ################################ */
var createSwf = function (DIVID, CLSID, OBJID, NAME, WIDTH, HEIGHT, URL, SCALE, WMODE, BGCOLOR, SWLIVE, SCRIPTACCESS, FLASHVARS ) {	
	var d = document.getElementById(DIVID);
	d.innerHTML = '<object classid=' + CLSID + ' id=' + OBJID + ' name=' + NAME +	' width=' + WIDTH + ' height=' + HEIGHT  +'><param name="SCALE" value=' + SCALE + '><param name="swLiveConnect" value=' + SWLIVE + '><param name="allowScriptAccess" value=' + SCRIPTACCESS + '><param name="WMODE" value=' + WMODE + '><param name="SRC" value=' + URL + '><param name="FLASHVARS" value=' + FLASHVARS + '><embed src=' + URL + '	width= ' + WIDTH + ' height=' + HEIGHT + '	hspace=0 vspace=0 quality=high type=application/x-shockwave-flash name=' + NAME + ' scale=' + SCALE + ' wmode=' + WMODE + ' bgcolor=' + BGCOLOR + ' swliveconnect=' + SWLIVE + ' allowscriptaccess=' + SCRIPTACCESS + ' flashvars=' + FLASHVARS + '></embed></object>';
}
// <param name="URL" value=' + URL + '>
// Für Mac Firefox 2 / Mozilla 1 Fix | Problem mit swf over swf
var uA = navigator.userAgent
var ISMACFF2 = (uA.indexOf('Mac') != -1 && (uA.indexOf('Firefox/2') != -1 || uA.indexOf('Mozilla/5') != -1));

var ajaxRequest = function (obj, url, method, query)
{
	if (httpRequest) httpRequest.cancel();
	httpRequest = new Ajax(url, {
		method: method,
		//if method is post, you can write parameters here.  
		//Can be a querystring, an object or a Form element.
		//data: query,
		//onComplete: handleMyAjax.bind(this),
		//onStateChange is an XHR option, but Ajax inherits from it
		//so we can use it
		//onStateChange: myStateChecker.bindAsEventListner(this),
		//$(element) to insert the response text of the XHR into, upon completion of the request.
		update: $(obj),
		//Execute scripts in the response text onComplete.
		evalScripts: true
	}).request();
}

/* ################################ */
/* #      Find SWF SelfHTML      # */
/* ################################ */
function findSwf (flash) {
	if (document.all) {
		if (document.all[flash]) return document.all[flash];
		if (window.opera) {
			var movie = eval(window.document + flash);
			if (movie.SetVariable) return movie;
		}
	  	return;
	}
	if(document.layers) {
		if(document.embeds) {
			var movie = document.embeds[flash];
			if (movie.SetVariable) return movie;
		}
		return;
	}
	if (!document.getElementById) return;
	var movie = document.getElementById(flash);
	if (movie.SetVariable) return movie;
	var movies = movie.getElementsByTagName('embed');
	if (!movies || !movies.length) return; 
	movie = movies[0];
	if (movie.SetVariable) return movie;
	return;
}

/* ################################ */
/* #         Controller           # */
/* ################################ */
var Controller = {
	container: {},
	objFx: {},
	mainLinks: {},
	availHeight: 0,
	objInhaltH: 0,
	objMerkerH: 0,
	activeScroller: {},
	scrollers: false,
	currentRubrik: 0,
	scrollInTime: 300,
	scrollOutTime: 100,
	objInhalt: {},
	objOverview: {},
	objMerker: {},
	objMerkerList: {},
	init: function() {
		if (KAT_VERZEICHNIS) this.objInhalt = $('inhaltsverzeichnis');
		if (KAT_OVERVIEW) this.objOverview = $('seitenuebersicht');
		if (KAT_MERKZETTEL) this.objMerker = $('merkzettel');
		if (KAT_MERKZETTEL) this.objMerkerList = $('merkList');
		if (KAT_MERKZETTEL) this.reloadMerkzettel('merkzettel.php');
		this.container = $('navigation');
		this.availHeight = (Window.getHeight() - $('navigation').getStyle('height').toInt())-110;
		if (KAT_VERZEICHNIS) this.scrollIn(this.objInhalt);
		if (KAT_MERKZETTEL) this.objMerker.setStyle('display','none');
		this.mainLinks = $ES('p a', this.container);
		this.mainLinks.addEvent('click', function(){
			Controller.setHighlight(this);
			return false;
		})
		this.scrollers = $$('div.scrollarea');
		this.setRubrikHighlight(RUBRIK);
	},
	refresh: function() {
		this.availHeight = Window.getHeight() - $('navigation').getStyle('height').toInt();
	},
	scrollIn: function (el) {
		el.setStyles({
			'overflow': 'hidden',
			'display': 'block'
		});
		var tmp = el.getSize();
		var to = (tmp['scrollSize']['y'] < this.availHeight) ? tmp['scrollSize']['y'] : this.availHeight;
		var sc = (tmp['scrollSize']['y'] > this.availHeight) ? 'auto' : 'hidden'
		this.objFxIn = new Fx.Style(el, 'height', {
			duration: this.scrollInTime, 
			transition: Fx.Transitions.Quart.easeInOut,
			onComplete: function(el) {
				el.setStyle('overflow',sc);
				Controller.scrollInComplete(el.id);
			},
			onStart: function(el) {
				Controller.scrollInStart(el.id);
			}
		});
		this.objFxIn.start(0,to);
		this.activeScroller = el;
	},
	scrollOut: function (el) {
		el.setStyle('overflow','hidden');
		var tmp = el.getSize();
		var from = (tmp['size']['y'] < this.availHeight) ? tmp['size']['y'] : this.availHeight;
		this.objFxOut = new Fx.Style(el, 'height', {
			duration: this.scrollOutTime, 
			transition: Fx.Transitions.Quart.easeInOut,
			onComplete: function(el) {
				el.setStyle('display','none');
			}
		});
		this.objFxOut.start(from,0);
	},
	scrollInStart: function(id) {
		// Seitenuebersicht geklickt -> leerräumen
		if (KAT_OVERVIEW && id == 'seitenuebersicht' && Katalog.currentOverviewRubrik != RUBRIK) {
			Katalog.htmlZone.empty();
		}
	},
	scrollInComplete: function(id) {
		// Inhaltsverzeichnis geklickt -> katalog anzeigen
		if (KAT_VERZEICHNIS && id == 'inhaltsverzeichnis') {
			Katalog.closeLayers();
		}
		// Seitenuebersicht geklickt -> aktualisieren
		// ?rubrik= ist 0basieren
		if (KAT_OVERVIEW && id == 'seitenuebersicht') {
			var url = "overview.php?rubrik="+(RUBRIK-1);
			Katalog.showOverview(url,RUBRIK);
		}
		if (KAT_MERKZETTEL && id == 'merkzettel') {
			this.refreshMerkzettel();
		}
	},
	toggle: function (id) {
		this.checkHighlight(id);
		if (this.activeScroller != $(id)) {
			this.scrollers.each(function(item,index) {
				if (item.id != id  && item.getStyle('height').toInt() > 0) 
					Controller.scrollOut(item);
			});
			this.scrollIn($(id));
		} else if (KAT_MERKZETTEL && id == 'merkzettel') {
			this.refreshMerkzettel();
		}
	},
	setHighlight: function (a) {
		this.mainLinks.removeClass('selected');
		a.addClass('selected');
	},
	setRubrikHighlight: function () {
		$$('li', this.container).removeClass('selected');
		if(RUBRIK != '') {
			if (KAT_VERZEICHNIS) $('aRubrik'+RUBRIK).addClass('selected');
			if (KAT_OVERVIEW) $('bRubrik'+RUBRIK).addClass('selected');
		}
		this.currentRubrik = RUBRIK;
	},
	checkHighlight: function (id) {
		var handle = $(id).getPrevious().getFirst();
		if (handle.getTag() == "a")
			this.setHighlight(handle);
	},
	closeMerkzettel: function () {
		if (TEST) console.log('Controller.closeMerkzettel()');
	},
	putOnMerkzettel: function(pageNr) {
		if (TEST) console.log('Controller.putOnMerkzettel('+pageNr+')');
		if (!KAT_MERKZETTEL || !pageNr) return;
		var url = (pageNr)?'merkzettel.php?seite='+pageNr:'merkzettel.php';
		if (TEST) console.log('!->URL: '+url);
		httpRequest = new Ajax(url, {
			method: 'get',
			onComplete: function() {
				Controller.toggle(Controller.objMerker.id);
			},
			update: this.objMerker,
			evalScripts: true
		}).request();
	},
	saveMerkzettel: function(value) {
		if (COOKIE_NAME) Cookie.set(COOKIE_NAME, value, {duration: 30});
	},
	loadMerkzettel: function() {
		var cookieString = Cookie.get(COOKIE_NAME);
		if (cookieString) {
			var url = 'merkzettel.php?loadFromCookie='+cookieString;
			ajaxRequest(this.objMerker.id, url, 'get', '');			
		}
	},
	reloadMerkzettel: function(url) {
		httpRequest = new Ajax(url, {
			method: 'get',
			update: this.objMerker
		}).request();
	},
	refreshMerkzettel: function() {
		if (!KAT_MERKZETTEL) return;
		var tmp = this.objMerker.getSize();
		var to = (tmp['scrollSize']['y'] < this.availHeight) ? tmp['scrollSize']['y'] : this.availHeight;
		var realSize = 	$('merkList').getSize();
		if (realSize['size']['y']+1 < to) to = realSize['size']['y'];
		if (TEST) console.log('merkzettel real height:' + to);
		this.objFxIn = new Fx.Style(this.objMerker, 'height', {
			duration: 10, 
			transition: Fx.Transitions.Quart.easeInOut
		}).start(0,to);
	},
	delFromMerkzettel: function(a) {
		httpRequest = new Ajax(a.href, {
				method: 'get',
				onComplete: function() {
					if (TEST) console.log('merkzettelrefresh');
					Controller.refreshMerkzettel();
				},
				update: this.objMerker,
				evalScripts: true
		}).request();
	},
	sendToBuddy: function(el) {
			httpRequest = new Ajax('merkzettel.php', {
			method: el.method,
			data: el,
			onComplete: function() {
				Controller.refreshMerkzettel();
			},
			update: this.objMerker,
			evalScripts: true
		}).request();
	},
	clearSearchField: function(o) {
		if (o.title == '') {
			o.title = o.value;
			o.value = '';
		}
	},
	resetSearchField: function(o) {
		if (o.title != '') {
			o.value = o.title;
			o.title = '';
		}
	}
}

var Katalog = {
	name: 'katalog',
	htmlZone: {},
	zoomZone: {},
	overviewZone: {},
	fader: {},
	currentOverviewRubrik: 'none',
	defaultSearchText: 'Bitte Bestellnr. oder Begriff eingeben',
	defaultSearchLabel: 'Suchen nach...',
	init: function() {
		this.katalogZone = $('katalogzone');
		this.htmlZone = $('htmlzone');
		this.fader = $('fader');
		if (IELT7) this.fader.setOpacity(0.5);
		this.htmlBgColor = this.htmlZone.getStyle('background-color');
		if (KAT_ZOOM) {
			this.zoomZone = $('zoomzone');
			this.zoomBackground = $('zoombackground');
			this.zoomSwf = $('zoomswf');
		}
		if (KAT_SEARCH) {
			this.searchZone = $('searchzone');
			this.searchDropzone = $('searchdropzone');	
		}
		if (KAT_HELP) {
			this.helpZone = $('helpzone');
			this.helpDropzone = $('helpdropzone');	
		}
		if (KAT_DETAIL) {
			this.detailZone = $('detailzone');
			this.detailDropzone = $('detaildropzone');
			this.detailMaxHeight = this.detailZone.getStyle('height').toInt();
			this.detailMaxWidth = this.detailZone.getStyle('width').toInt();
			this.detailDropMaxHeight = this.detailDropzone.getStyle('height').toInt();
			this.detailDropMaxWidth = this.detailDropzone.getStyle('width').toInt();
			this.onDetailClose = '';
		}
		if (KAT_DETAIL_ZOOM) {
			this.detailZoomZone = $('detailzoomzone');
			this.detailZoomDropzone = $('detailzoomdropzone');
		}
		if (KAT_OVERVIEW) {
			this.overviewZone = $('overviewzone');
		}
	},
	loadLastPage: function() {
		if(COOKIE_NAME && !JUMPPAGE) {
		var cookieString = Cookie.get(COOKIE_NAME+'-Katalog');
		if (TEST) console.log('Katalog.loadLastPage('+cookieString+')');
		if (cookieString) this.jumpToPage(cookieString);
		}
	},
	kat: function() {
		return findSwf(this.name);
	},
	jumpToPage: function(pageNr,rubrikNr) {
		this.gotoPage(pageNr,rubrikNr);
		this.closeLayers();
		this.katalogZone.setStyle('visibility','visible');
		if (KAT_VERZEICHNIS) Controller.toggle('inhaltsverzeichnis');
		Controller.setRubrikHighlight();
		if (TEST) console.info('PAGE='+PAGE+'|RUBRIK='+RUBRIK);
	},
	gotoPage: function(pageNr,rubrikNr) {
		PAGE = pageNr;
		if (rubrikNr) this.setCurrentRubrik(rubrikNr);
		if (TEST) console.log('Katalog.gotoPage('+pageNr+')');
		if(this.kat()) {
			var tmp = this.kat().SetVariable( 'jumpingPage', pageNr);
		}
	},
	setCurrentPage: function(pageNr) {
		pageNr = (!pageNr)?0:pageNr;
		if (TEST) console.debug('Katalog.setCurrentPage('+pageNr+')');
		PAGE = pageNr;
	},
	setCurrentRubrik: function(rubrikNr) {
		rubrikNr = (!rubrikNr)?0:rubrikNr;
		if (TEST) console.log('Katalog.setCurrentRubrik('+rubrikNr+')');
		RUBRIK = rubrikNr;
		this.currentOverviewRubrik = RUBRIK;
		Controller.setRubrikHighlight();
	},
	showOverview: function(url,rubrikNr) {
		if (TEST) console.log('Katalog.showOverview('+url+','+rubrikNr+')');
		if (rubrikNr) this.setCurrentRubrik(rubrikNr);
		ajaxRequest(this.overviewZone.id, url, 'get', '');
		this.katalogZone.setStyle('visibility','hidden');
		this.overviewZone.setStyles({
				background: this.htmlBgColor,
				display: 'block'
		});
	},
	closeOverview: function() {
		this.overviewZone.empty();
		this.overviewZone.setStyle('display','none');
		this.katalogZone.setStyle('visibility','visible');
	},
	openDetail: function(posNr,feature,pageNr) {
		//alert(posNr + '|' + feature);
		if (TEST) console.log('Katalog.openDetail('+posNr+','+feature+')');
		if (TEST) console.info('PAGE='+PAGE+'|PAGENR='+pageNr);
		switch (feature) {
			case '0':
				//alert('direkt in den shop');
				this.openUrl('katalog-shop-redirect.php?posNr='+posNr+'&pageNr='+PAGE);
				break;
			case '1':
				//alert('tabelle oeffnen');
				this.fader.setStyle('display', 'block');
				ajaxRequest(this.htmlZone.id,'katalog-table.php?posNr='+posNr, 'get', '');
				break;
			case '2':
				//alert('detailansicht oeffnen');
				this.fader.setStyle('display', 'block');
				posNr = (posNr.substr(0,1) == 'p')? posNr.substr(1,posNr.length):posNr;
				// Detail Fenster wurde von der Suche aus ausgerufen.
				if (pageNr) {
					this.hideSeachResults();
					this.onDetailClose = function() {
						this.searchZone.setStyle('display', 'block');
					}
				}
				else {
					this.onDetailClose = '';
				}
				pageNr = (pageNr)?pageNr:PAGE;
				var url = 'detail.php?posNr='+posNr+'&pageNr='+pageNr;
				ajaxRequest(this.detailDropzone.id, url, 'get', '');
				break;
			case '3':
				// fehlerbehandung
				// alert('nicht da');
				break;
			default: 
				if (TEST) console.warn("Kein feature Parameter angegeben.");
				this.openUrl(posNr);
				break;
		}
	},
	openDetailByBestNr: function(bestNr) {
		this.fader.setStyle('display', 'block');
		var url = 'detail.php?bestNr='+bestNr;
		ajaxRequest(this.detailDropzone.id, url, 'get', '');
	},
	showServicePages: function(posNr) {
		if (TEST) alert('Katalog.showServicePages(\''+posNr+'\'); not yet implemented ...');
		if (TEST) console.log('Katalog.showServicePages('+posNr+')');
	},
	openUrl: function(url,target) {
		if (TEST) console.log('Katalog.openUrl('+url+','+target+')');
		if (url.search(/:/) != -1 && url.search(/:\/\//) == -1) {
			// must be a external link
			url = url.replace(/:/, "://");
			target = '_blank';
		}
		var target = (target)?target:'shopWindow';
		if (window.opener && window.opener.host != "") {
			window.opener.focus();
			window.opener.location.href = url;
		} else {
			newWin = window.open(url,target);
			newWin.focus();
		}
	}, 
	openHelpPages: function(id) {
		var page = (id)?id:0;
		ajaxRequest(this.htmlZone.id,'helppages.php?helpid='+page, 'get', '');	
	},
	createPdf: function(url,target) {
		var ziel = (target)?target:'_blank';
		newWin = window.open(url,'shopWindow');
		newWin.focus();
	},
	showTable: function (w, h) {
		this.objTable = $('tablecontainer');
		this.objTable.setStyle('top',(Window.getHeight()-h)/2);
		this.htmlZone.setStyles({
				background: 'none',
				display: 'block'
		});
		this.objTable.setStyle('display','block');
	},
	closeTable: function () {
		this.htmlZone.empty();
		this.htmlZone.setStyles({
				background: this.htmlBgColor,
				display: 'none'
		});
		this.fader.setStyle('display','none');
	},
	showSearchResults: function(searchFor) {
		if (searchFor != '' && searchFor != this.defaultSearchLabel) {
			ajaxRequest(this.searchDropzone.id,'searchresult.php?searchfor='+searchFor, 'get', '');
			this.searchZone.setStyle('display', 'block');
			this.fader.setStyle('display', 'block');
		} 
		else {
			alert(this.defaultSearchText);
		}
	},
	searchResultsGoto: function(url) {
		ajaxRequest(this.searchDropzone.id,url, 'get', '');
	},
	limitSearchResults: function(obj) {
		var url = obj.options[obj.selectedIndex].value;
		if (TEST) console.log('Katalog.limitSearchResults: ' + url);
		if (url != '') {
			this.searchResultsGoto(url);
		}
	},
	hideSeachResults: function() {
		this.searchZone.setStyle('display', 'none');
	},
	closeSearchResults: function() {
		this.searchDropzone.empty();
		this.searchZone.setStyle('display', 'none');
		this.fader.setStyle('display','none');
	},
	zoomPage: function (pageNr,pageCount) {
		if (TEST) console.log('Katalog.zoomPage: pageNr='+pageNr+'|pageCount='+pageCount);
		this.zoomZone.setStyle('display', 'block');
		this.fader.setStyle('display', 'block');
		if (ISMACFF2) this.zoomSwf.setStyle('visibility','hidden');
		var url = 'zoom.php?pageNr='+pageNr+'&pageCount='+pageCount;
		httpRequest = new Ajax(url, {
			method: 'get',
			update: $(this.zoomSwf.id),
			evalScripts: true
		}).request();
	},
	zoomMakeVisible: function() {
		if (ISMACFF2) this.zoomSwf.setStyle('visibility','visible');
	},
	closeZoom: function () {
		this.zoomSwf.empty();
		this.zoomZone.setStyle('display','none');
		this.fader.setStyle('display', 'none');
		if (ISMACFF2) this.showKatalog();
	},
	zoomPageForward: function(pageNr,pageCount) {
		pageNr = (pageNr < pageCount) ? pageNr+1 : 1;
		this.zoomPage(pageNr,pageCount);
	},
	zoomPageBackward: function(pageNr,pageCount) {
		pageNr = (pageNr > 1) ? pageNr-1 : pageCount;
		this.zoomPage(pageNr,pageCount);
	},
	showHelp: function(id) {
		if (TEST) console.log('Katalog.showHelp('+id+')');
		Controller.setRubrikHighlight();
		var url = (id)?'hilfe.php?id='+id:'hilfe.php';
		ajaxRequest(this.helpDropzone.id, url, 'get', '');
	},
	makeHelpVisible: function() {
		this.fader.setStyle('display', 'block');
		this.helpZone.setStyle('display','block');
	},
	closeHelp: function() {
		this.helpDropzone.empty();
		this.helpZone.setStyle('display','none');
		this.fader.setStyle('display', 'none');
	},
	openDetailView: function() {
		if (TEST) console.log('Katalog.openDetailView()');
		this.fader.setStyle('display', 'block');
		this.detailZone.setStyle('display','block');
	},
	closeDetailView: function() {
		this.detailDropzone.empty();
		this.detailZone.setStyle('display','none');
		if ($type(this.onDetailClose) == 'function') {
			this.onDetailClose();
		}
		else {
			this.fader.setStyle('display', 'none');
		}
	},
	closeLayers: function() {
		this.onDetailClose = '';
		if (KAT_ZOOM) this.closeZoom();
		this.closeTable();
		if (KAT_SEARCH) this.closeSearchResults();
		if (KAT_HELP) this.closeHelp();
		if (KAT_OVERVIEW) this.closeOverview();
		if (KAT_DETAIL) this.closeDetailView();
		this.fader.setStyle('display','none');
	},
	hideKatalog: function() {
		// bugfix für ff2 mac -> unteres swf muß versteckt sein
		// aber nicht display:none - sonst blätterts auf seite 1
		this.katalogZone.setStyle('height',0);
	},
	showKatalog: function() {
		this.katalogZone.setStyle('height',Window.getHeight());
	},
	setMaxPage: function(maxPage) {
		this.maxPage = maxPage;
	}
}

var Detail = {
	init: function() {
		this.imgNextA = $('imgForward');
		this.imgBackA = $('imgBack');
		this.imgText = $('imgText');
		this.imgZoom = $('imgZoom');
		this.objImg = $('productPic');
		this.detailZone = Katalog.detailZone;
		this.detailDropzone = Katalog.detailDropzone;
		this.textContainer = $('textContainer');
		this.priceContainer = $('priceContainer');
		this.textWrapper = $('textWrapper');
		this.priceContainer = $('priceContainer');
		this.bgContainer = $('detailbackground');
		if (KAT_DETAIL_ZOOM) {
		this.detailZoom = $('detailzoomzone');
		this.zoomDropzone = $('detailzoomdropzone');
		this.zoomBg = $('detailzoombackground');
		}
	},
	setDimensions: function() {
		// Höhe der Textbox berechnen
		// Muß display:block sein - sonst kann size nicht ausgelesen werden.
		this.detailZone.setStyle('visibility','hidden');
		this.detailZone.setStyle('display','block');
		var textSize = this.textContainer.getSize();
		var priceSize = this.priceContainer.getSize();
		var paddingTop = 15; // optischer Abstand
		var offsetH = Katalog.detailMaxHeight - Katalog.detailDropMaxHeight;
		var offsetW = Katalog.detailMaxWidth - Katalog.detailDropMaxWidth;
		var textMaxHeight = Katalog.detailDropMaxHeight - priceSize['size']['y'] - paddingTop;
		var textMinHeight = 232;
		
		// 294 ist die Breite der imagebox;
		var imgOffsetW = 294 - $('imageContainer').getStyle('width').toInt();
		//var imgOffsetW = imgOffsetSize['size']['x'];
		
		if (textSize['size']['y'] < textMaxHeight) {
			textRealSize = (textSize['size']['y'] < textMinHeight) ? textMinHeight : textSize['size']['y'];
			// zone verkleinern
			if (textRealSize < 230) {
				textRealSize = 230;
			}
			// zone verkleinern
			var zoneHeight = textRealSize + priceSize['size']['y'] + paddingTop + offsetH;
			var zoneWidth =  Katalog.detailMaxWidth - imgOffsetW;
			this.detailZone.setStyles({
				height: zoneHeight,
				width: zoneWidth
			});
			this.bgContainer.setStyles({
				height: zoneHeight - 30,
				width: zoneWidth - 30
			});
			$E('img.tableEdgeL',Katalog.detailZone).setProperty('height',zoneHeight - 30);
			$E('img.tableEdgeR',Katalog.detailZone).setProperty('height',zoneHeight - 30);
			$E('img.tableEdgeT',Katalog.detailZone).setProperty('width',zoneWidth - 30);
			$E('img.tableEdgeB',Katalog.detailZone).setProperty('width',zoneWidth - 30);
			this.detailDropzone.setStyles({
				height: zoneHeight - offsetH,
				width: zoneWidth - offsetW
			})
			// +2 zum unterdrücken des überflüssigen scrollbalkens
			this.textContainer.setStyle('height',textRealSize+2);
		} else {
			// maximale höhe wiederherstellen
			this.detailZone.setStyles({
				height: Katalog.detailMaxHeight,
				width: Katalog.detailMaxWidth - imgOffsetW
			});
			this.bgContainer.setStyles({
				height: Katalog.detailMaxHeight - 30,
				width: Katalog.detailMaxWidth - imgOffsetW - 30
			});
			$E('img.tableEdgeL',Katalog.detailZone).setProperty('height',Katalog.detailMaxHeight - 30);
			$E('img.tableEdgeR',Katalog.detailZone).setProperty('height',Katalog.detailMaxHeight - 30);
			$E('img.tableEdgeT',Katalog.detailZone).setProperty('width',Katalog.detailMaxWidth - imgOffsetW - 30);
			$E('img.tableEdgeB',Katalog.detailZone).setProperty('width',Katalog.detailMaxWidth- imgOffsetW - 30);
			this.detailDropzone.setStyles({
				height: Katalog.detailMaxHeight - offsetH,
				width: Katalog.detailMaxWidth - imgOffsetW - offsetW
			})
			this.textContainer.setStyle('height',textMaxHeight);
		}
		Win.posElement(this.detailZone);
		this.detailZone.setStyle('visibility','visible');		
	},
	slidePicture: function (obj, nr) {
		this.init();
		this.imgFadeIn = new Fx.Style(this.objImg, 'opacity', {
			onComplete: function() {
				if (nr != -1) Detail.setImgCtrl(nr);
			}			 
		});
		var imgFx = new Fx.Style(this.objImg, 'opacity', {
			onStart: function() {
				// hektik-clicker abfangen
				Detail.imgNextA.onclick = function() {
					return false;
				}
				Detail.imgBackA.onclick = function() {
					return false;
				}
			},
			onComplete: function() {
				Detail.objImg.src = obj.href;
				Detail.imgFadeIn.start(0,1);
			}											 					 
		}).start(1,0);
	},
	setImgCtrl: function (nr) {
		this.init();
		var nextNr = (nr+1 < jsPicArr.length) ? nr + 1 : false;
		var prevNr = (nr > 0) ? nr - 1 : -1;
		
		this.imgNextA.style.visibility = (nextNr) ? 'visible' : 'hidden';
		this.imgNextA.href = jsPicArr[nextNr];
		this.imgNextA.onclick = function() {
			Detail.slidePicture(this,nextNr);
			return false;
		}
	
		this.imgBackA.style.visibility = (prevNr != -1) ? 'visible' : 'hidden';
		this.imgBackA.href = jsPicArr[prevNr];
		this.imgBackA.onclick = function() {
			Detail.slidePicture(this,prevNr);
			return false;
		}
	
		this.imgText.innerHTML = 'Bild ' + (nr+1) + ' von ' + jsPicArr.length;
	
		if (jsXxlArr[nr]) {
			this.imgZoom.href = jsXxlArr[nr];
			this.imgZoom.style.visibility = 'visible';
			this.imgZoom.onclick = function() {
				Detail.zoomPicture(this,nr);
				return false;
			}
		} else {
			this.imgZoom.href = '#';
			this.imgZoom.style.visibility = 'hidden';
			this.imgZoom.onclick = function() {
				return false;	
			}
		}
	},
	changeBestNr: function (obj, id) {
		$(id).href = obj.value;
	},
	zoomPicture: function (obj, nr) {
		if (!jsXxlArr[nr]) return; // falls kein xxl-bild -> return
		this.detailZoom.setStyle('display','block');
		Katalog.detailZone.setStyle('display','none');
		// ielt7 bug: form elemente always über swf
		// ergo -> visiblity:hidden und ab dafür
		if (IELT7) $ES('form',this.textContainer).setStyle('visibility','hidden');
		if (ISMACFF2) Katalog.hideKatalog();
		var url = 'detailzoom.php?img=' + jsXxlArr[nr];
		ajaxRequest(this.zoomDropzone, url, 'get', '');
	},
	zoomClose: function () {
		Katalog.detailZone.setStyle('display','block');
		this.zoomDropzone.empty();
		this.detailZoom.setStyle('display','none');
		if (ISMACFF2) Katalog.showKatalog();
		if (IELT7) $ES('form',this.textContainer).setStyle('visibility','visible');
	}
}

var Win = {
	init: function() {
		this.controllerOffset  = $('controller').getStyle('width').toInt();
		this.katalogZone = $('katalogzone');
		this.flashZone = $('flashdropzone');
		this.htmlZone = $('htmlzone');
		if (IELT7) {
			TEST = false;
			this.katalogZone.setStyle('width',Window.getWidth() - this.controllerOffset);
			this.htmlZone .setStyle('width',Window.getWidth() - this.controllerOffset);
		}
		httpRequest = false;
		if (this.flashZone) {
			var flashZoneTop = (Window.getHeight() - this.flashZone.getStyle('height').toInt()) / 2; 
			this.flashZone.setStyle('top',flashZoneTop.toInt());
		}
		if (KAT_ZOOM) {
			this.zoomZone = $('zoomzone');
			Win.posElement(this.zoomZone);
		}
		if (KAT_SEARCH) {
			this.searchZone = $('searchzone');
			Win.posElement(this.searchZone);
		}
		if (KAT_HELP) {
			this.helpZone = $('helpzone');
			Win.posElement(this.helpZone);
		}
		if (KAT_OVERVIEW) {
			this.overviewZone = $('overviewzone');
			Win.posElement(this.overviewZone);
		}
		if (KAT_DETAIL) {
			this.detailZone = $('detailzone');
			Win.posElement(this.detailZone);
		}
		if (KAT_DETAIL_ZOOM) {
			this.detailZoomZone = $('detailzoomzone');
			Win.posElement(this.detailZoomZone);
		}
		Controller.init();
		Katalog.init();
		Katalog.loadLastPage();
		if (KAT_MERKZETTEL)	Controller.loadMerkzettel();
	},
	resize: function() {
		Controller.refresh();
		this.flashZone = $('flashdropzone');
		
		if (IELT7) {
			this.katalogZone.setStyle('width',Window.getWidth() - this.controllerOffset);
			this.htmlZone .setStyle('width',Window.getWidth() - this.controllerOffset);
		}
		var flashZoneTop = (Window.getHeight() - this.flashZone.getStyle('height').toInt()) / 2; 
		if (this.flashZone) this.flashZone.setStyle('top',flashZoneTop.toInt());
		
		if (KAT_ZOOM) Win.posElement($('zoomzone'));
		if (KAT_HELP) Win.posElement($('helpzone'));
		if (KAT_SEARCH) Win.posElement($('searchzone'));
		if (KAT_OVERVIEW) Win.posElement($('overviewzone'));
		if (KAT_DETAIL) Win.posElement($('detailzone'));
		if (KAT_DETAIL_ZOOM) Win.posElement($('detailzoomzone'));				
		
		this.tableZone = $('tablecontainer');
		if (tableZone) Win.posElement(this.tableZone);
	},
	posElement: function(el) {
		var top = (Window.getHeight() - el.getStyle('height').toInt()) / 2; 
		var left = (Window.getWidth() - el.getStyle('width').toInt()) / 2;
		Win.controllerOffset = $('controller').getStyle('width').toInt();
		left += this.controllerOffset/2;
		left = (left < Win.controllerOffset)? Win.controllerOffset : left;
		el.setStyles({
			left: left,
			top: top
		});
	},
	unload: function() {
		if (COOKIE_NAME) {
			Cookie.remove(COOKIE_NAME+'-Katalog');
			Cookie.set(COOKIE_NAME+'-Katalog', PAGE, {duration: 30});
		}
		if (typeof httpRequest != 'undefined' && httpRequest) httpRequest.cancel();
		return;
	}
}

var openDetail = function(v) {
	Katalog.openDetail(v,'2');	
}

if (!window.console || !console.firebug)
{
	var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
	"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];		
	window.console = {};
	for (var i = 0; i < names.length; ++i)
		window.console[names[i]] = function() {}
}

window.onunload = Win.unload;
window.onresize = Win.resize;