// file-econding UTF-8

/* >> diashow (require mochikit 1.4)*/
	String.prototype.trim = function(){
		var str = this;
		var ccSpace = 32;
		var ps = 0;
		var pe = 0;
		var psLock = false;
		var peLock = false;
		for (var i = 0; i < str.length; ++i){
			if (str.charCodeAt(i) == ccSpace){
				if (! psLock) ps++;
				if (str.charCodeAt(str.length - 1 - i) == ccSpace){
					if (! peLock) pe++;
				}else{
					peLock = true;
				}
			}else{
				psLock = true;
				if (str.charCodeAt(str.length - 1 - i) == ccSpace){
					if (! peLock) pe++;
				}else{
					peLock = true;
				}
			}
		}
		var string = str.substring(ps, str.length);
		return string.substring(0, str.length - pe - ps);
	}

	function Diashow(projectPrefix, detailFile, withZoomIcon, popupData){
		this.diashow = null;
		this.imageSizeAffectedControls = ['banner', 'textElements'];
		this.current = 0;
		this.overall = 0;
		this.url = null;
		this.imgPath = null;
		this.withZoomIcon = withZoomIcon;
		this.popupData = popupData ? popupData : {'height': 500, 'width': 500};
		this.lang = this.getLang();
		this.langRes = {
			'closeWindowPrompt': {
				'de': 'Fenster schliessen',
				'en': 'Close window',
				'fr': 'fermer la fenêtre',
				'sv': 'Stäng fönstret',
				'it': 'Chiudi',
				'es': 'cerrar ventana'
			},
			'pagerPreviousPrompt': {
				'de': 'Zurück',
				'en': 'Previous',
				'fr': 'Précedent',
				'sv': 'Föregående',
				'it': 'Precedente',
				'es': 'anterior'
			},
			'pagerNextPrompt': {
				'de': 'Weiter',
				'en': 'Next',
				'fr': 'suivant',
				'sv': 'Nästa',
				'it': 'Prossimo',
				'es': 'siguiente'
			},
			'pagerImagePrompt': {
				'de': 'Bild ',
				'en': 'Image ',
				'fr': 'Image ',
				'sv': 'Bild ',
				'it': 'Immagine ',
				'es': 'imagen '
			},
			'pagerFromPrompt': {
				'de': ' von ',
				'en': ' of ',
				'fr': ' de ',
				'sv': ' Från ',
				'it': ' da ',
				'es': ' de '
			}
		}
		this.detailPage = projectPrefix + '_' + this.lang + '_' + detailFile;
	}

	Diashow.prototype.createAjaxURL = function(url){
		if (! url){
			var params = window.location.search;
			var paraArr = params.split('&');
			for (var i = 0; i < paraArr.length; ++i){
				paraArr[i] = encodeURI(paraArr[i].substring(paraArr[i].search('=') + 1, paraArr[i].length));
			}
			if (paraArr.length > 1){
				var url = '/bildergalerie/' + paraArr[0] + '/' + paraArr[1] + '/' + this.lang;
			}else{
				var grpId = encodeURI(paraArr[1]);
				var url = '/bildergalerie/' + paraArr[0] + '/' + this.lang;
			}
		}
		this.url = url;
		log(url);
	}

	Diashow.prototype.getLang = function(){
		var htmlEl = document.getElementsByTagName('html')[0];
		if (getNodeAttribute(htmlEl, 'lang')){
			return this.formatLang(getNodeAttribute(htmlEl, 'lang'));
		}else if(getNodeAttribute(htmlEl, 'xmlLang')){
			return this.formatLang(getNodeAttribute(htmlEl, 'xmlLang'));
		}
		return 'en';
	}

	Diashow.prototype.formatLang = function(lang){
		if (lang.search(/-/) > -1) return lang.substring(0, lang.search(/-/));
		return lang;
	}

	Diashow.prototype.connect = function(id){
		var lwgArr = this.getFilteredLinksWithGroup('imageGroupPopup');
		for (var i = 0; i < lwgArr.length; ++i){
			var lwgObj = lwgArr[i];
			if (this.withZoomIcon){
				this.getZoomIconPlaceholder(lwgObj.link, 'openDetail', lwgObj.parts[0], lwgObj.parts[1]);
			}
			if (lwgObj.parts.length > 1){
				connect(lwgObj.link, 'onclick', bind('openDetail', this, lwgObj.parts[0], lwgObj.parts[1]));
			}else{
				connect(lwgObj.link, 'onclick', bind('openDetail', this, lwgObj.parts[0], lwgObj.parts[1]));
			}
		}
	}

	Diashow.prototype.getImage = function(elm){
		var childs = elm.childNodes;
		for (var i = 0; i < childs.length; ++i){
			var child = childs[i];
			if (child.nodeType == 1 && child.nodeName.toLowerCase() == 'img'){
				if (! child.width || ! child.height){
					var img = new Image();
				}else{
					var img = {'width': child.width, 'height': child.height};
				}
				img.src = child.src;
				return {'img': child, 'width': img.width, 'height': img.height};
			}
		}
		return false;
	}
	
	Diashow.prototype.getZoomIconPlaceholder = function(link, method, grp, imgId){
		var cont = link.parentNode;
		if (cont.nodeName.toLowerCase() == 'div'){
			var img = IMG({'src': '../px/spc.gif', 'border': 0, 'alt': ''});
			var image = this.getImage(link);
			connect(img, 'onclick', bind(method, this, grp, imgId));
			var posLeft = image.width - 20;
			var posTop = -18;
			var zip = DIV(
				{'class': 'zoomIconOffsetShell'},
				DIV(
				{'class': 'zoomIconOuter', 'style': {'left': posLeft + 'px', 'top': posTop + 'px'}},
					img
				)
			);
			insertSiblingNodesAfter(link, zip);
		}
	}
	
	Diashow.prototype.getFilteredLinksWithGroup = function(filter){
		var grps = [];
		var links = document.links;
		for (var i = 0; i < links.length; ++i){
			var rel = getNodeAttribute(links[i], 'rel');
			if (rel){
				var relParts = this.getRelPartsObject(rel);
				if (relParts.name.toLowerCase() == filter.toLowerCase()){
					grps.push({'link': links[i], 'parts': relParts.parts});
				}
			}
		}
		return grps;
	}
	
	Diashow.prototype.getRelPartsObject = function(rel){
		var partsArr = [];
		if (rel.indexOf('[') > -1 && rel.lastIndexOf(']') > -1 ){
			var p1 = rel.indexOf('[');
			var name = rel.substring(0, p1);
			var p2 = rel.lastIndexOf(']');
			var partsStr = rel.substring(p1 +1, p2);
			if (partsStr.length > 0){
				partsArr = partsStr.split(',');
				for (var i = 0; i < partsArr.length; ++i){
					partsArr[i] = partsArr[i].trim();
				}
			}
		}
		return {'name': name, 'parts': partsArr};
	}

	Diashow.prototype.openDetail = function(grp, imgId, e){
		e.stop();
		var url = this.detailPage + "?grpId=" + grp;
		if (imgId) url += '&imgId=' + imgId;
		this.popupData['href'] = url;
		var pup = new StandardPopup(this.popupData);
		pup.open();
	}

	Diashow.prototype.init = function(){
		var def = doSimpleXMLHttpRequest(this.url);
		def.addCallbacks(bind('handleData', this), bind('handleDataError', this));
	}
	
	Diashow.prototype.handleData = function(def){
		this.diashow = evalJSONRequest(def);
		if (this.diashow.activeImage > 0) this.current = this.diashow.activeImage;
		if (this.diashow.scaleimages){
			connect(window, 'onresize', bind('fillImageWithPager', this));
		}
		this.overall = this.diashow.images.length;
		this.fillCloseButton();
		this.fillTitle();
		this.fillText();
		this.fillImageWithPager();
	}

	Diashow.prototype.handleDataError = function(def){
		log(def.message);
	}
	
	Diashow.prototype.fillCloseButton = function(){
		var cb = $('closeButton');
		var tnode = document.createTextNode(this.langRes.closeWindowPrompt[this.lang]);
		cb.appendChild(tnode);
	}
	
	Diashow.prototype.fillTitle = function(){
		if (this.diashow.images[this.current].title){
			var title = this.diashow.images[this.current].title;
		}else{
			var title = this.diashow.title;
		}
		title = H3({'class': 'title'}, title);
		$('titleElement').innerHTML = '';
		$('titleElement').appendChild(title);
	}

	Diashow.prototype.fillText = function(){
		if (this.diashow.images[this.current].description){
			var description = this.diashow.images[this.current].description;
		}else{
			var description = this.diashow.description;
		}
		description = DIV({'class': 'text'}, description);
		$('textElement').innerHTML = '';
		$('textElement').appendChild(description);
	}
	
	Diashow.prototype.page = function(p, e){
		e.stop();
		if (p == 'prev'){
			this.current = this.current > 0 ? this.current -1 : this.overall -1;
		}else{
			this.current = this.current < this.overall -1 ? this.current +1 : 0;
		}
		this.fillTitle();
		this.fillText();
		this.fillImageWithPager();
	}
	
	Diashow.prototype.getPager = function(){
		p = DIV(null);
		if (this.overall > 0){ // the pager is always present if also only one image is available
			var leftLink = A({'class': 'previous', 'href': '#'}, this.langRes.pagerPreviousPrompt[this.lang]);
			var rightLink = A({'class': 'next', 'href': '#'}, this.langRes.pagerNextPrompt[this.lang]);
			connect(leftLink, 'onclick', bind('page', this, 'prev'));
			connect(rightLink, 'onclick', bind('page', this, 'next'));
			p = DIV(
				{'id': 'pager'},
				TABLE(
					{'cellpadding': 0, 'cellspacing': 0, 'border': 0},
					TBODY(
						null,
						TR(
							null,
							TD({'class': 'left'}, leftLink),
							TD(
								{'class': 'center'},
								this.langRes.pagerImagePrompt[this.lang],
								SPAN({'class': 'current'}, this.current + 1),
								SPAN({'class': 'pmt'}, this.langRes.pagerFromPrompt[this.lang]),
								SPAN({'class': 'overall'},
								this.overall)
							),
							TD({'class': 'right'}, rightLink)
						)
					)
				)
			);
		}
		return p;
	}

	Diashow.prototype.getNextButton = function(){
		p = DIV(null);
		if (this.overall > 0){
			var rightLink = A({'class': 'next', 'href': '#'}, IMG({'src': 'wps/12/img/diashowDetailPagerButton.gif', 'border': 0, 'alt': 'Weiter'}));
			connect(rightLink, 'onclick', bind('page', this, 'next'));
			p = DIV({'id': 'pager'}, rightLink);
		}
		return p;
	}

	Diashow.prototype.fillImageWithPager = function(e){
		$('pagerOuter').innerHTML = '';
		$('imgOuter').innerHTML = '';
		$('pagerOuter').appendChild(this.getPager());
		var img = this.diashow.images[this.current];
		if (this.diashow.scaleimages){
			var image = this.getResizedImage(img);
		}else{
			var image = IMG({'src': img.src, 'alt': img.imgalt, 'title': img.imgtitle, 'border': 0});
		}
		var image = DIV({'id': 'image'}, image);
		$('imgOuter').appendChild(image);
	}
	
	Diashow.prototype.getControlsHeight = function(controls){
		if (controls.length > 0){
			var height = 0;
			for (var i = 0; i < controls.length; ++i){
				var elDims = getElementDimensions(controls[i]);
				if (! isNaN(elDims.h)) height += elDims.h;
			}
			return height;
		}
		return 0;
	}
	
	Diashow.prototype.getResizedImage = function(img){
		var safetyMargins = {'h': 15, 'w': 30};
		var iDims = getViewportDimensions(); // window inner dimensions
		var ctrlsHeight = this.getControlsHeight(this.imageSizeAffectedControls);
		var imgAvailableHeight = iDims.h - ctrlsHeight - safetyMargins.h;
		var imgAvailableWidth = iDims.w - safetyMargins.w;
		var factor = Math.min(imgAvailableWidth / img.width, imgAvailableHeight / img.height );
		return IMG({'src': img.src, 'alt': img.imgalt, 'title': img.imgtitle, 'width': img.width * factor, 'height': img.height * factor, 'border': 0});
	}
/* << */

