/**
 * @author MURA
 * @copyright insyma AG
 * @projectDescription insyma JavaScript Library Image Module
 * @version 1.0
 */
insymaImgAdd = {
	props:{
		inlineConAddID: "bilderliste",
		preloaderAddID:"preloader",
		imageAddID: "insymaInlineImage",
		imageControlAddID: "imageInlineControl",
		controlPrevAddID: "controlInlinePrev",
		controlNextAddID: "controlInlineNext",
		imageInfoAddID: "imageInlineInfo",
		imageAltTextAddID: "imageInlineAltText",
		imageNrAddID: "imageInlineNr",
		
		// OnLoad Variablen im QueryString
		onLoadUrlVar: "insymaInlineImage",
		
		PagingContainerClass:"paging",
		nextPageClass:"aNext",
		prevPageClass:"aPrev",
		thumbContainerClass:"insymaImgThumbs",
		
		hideClass: "hide",
		invisClass: "invis"
	},
	init:function() {
		var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass);
		if (thumbCon.length > 0) {
			insymaImgAdd.paging2.init();
			insymaImgAdd.gallery2.init();
		}
	},
	// Alles für die Thumbnails
	paging2:{
		init:function() {
			this.createControls();
		},
		// Setzt Seite
		setPage:function(pageIdx) {
			var thumbConIdx = parseInt(pageIdx.split("-")[0]);
			var pageIdx = parseInt(pageIdx.split("-")[1]);
			var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass)[thumbConIdx];
			var thumbItem = thumbCon.getElementsByTagName("li");
			
			var start = pageIdx * insymaImgConfig.itemCount;
			var end = ((pageIdx + 1) * insymaImgConfig.itemCount) - 1;
			for(var i = 0;i<thumbItem.length; i++){
				if(i >= start && i <= end){
					insymaUtil.cssjs("remove",thumbItem[i],insymaImgAdd.props.hideClass);
				}else {
					insymaUtil.cssjs("add",thumbItem[i],insymaImgAdd.props.hideClass);
				}
			}
		},
		// Returns Array of ImageAnchors
		getImageAnchors:function(parentObj){
			var tempAnchors = parentObj.getElementsByTagName("a");
			var anchors = [];
			for (var x = 0; x < tempAnchors.length; x++) {
				if (typeof(tempAnchors[x].getAttribute("href")) != 'undefined' && tempAnchors[x].getAttribute("href") != null) {
					if (tempAnchors[x].getAttribute("href").indexOf(".jpg") > 0 || tempAnchors[x].getAttribute("href").indexOf(".jpeg") > 0 || tempAnchors[x].getAttribute("href").indexOf(".png") > 0 || tempAnchors[x].getAttribute("href").indexOf(".gif") > 0) {							
						anchors.push(tempAnchors[x]);
					}
				}
			}				
			return anchors;
		},		
		// Zeigt nächste oder vorherige Seite
		changePage:function(controlLink,direction){
			var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass);
			for (var i = 0; i < thumbCon.length; i++) {
				if (controlLink.parentNode.parentNode == thumbCon[i]){
					var pageCounter = thumbCon[i].getElementsByTagName("span")[0];
					var pageIdx = parseInt(insymaPageIdxArr[i].split("-")[1]);
					var newPageIdx;
					var curCount;
					if (direction == 1){
						if((pageIdx + 1) < insymaTotalPageArr[i]) {
							newPageIdx = i+"-"+(pageIdx + 1);
							this.setPage(newPageIdx);
							curCount = insymaImgConfig.pagingLabel + " " + (pageIdx + 2) + " " + insymaImgConfig.pagingSeparatorLabel + " " + insymaTotalPageArr[i];
						}
						else {
							newPageIdx = i+"-0";
							this.setPage(newPageIdx);
							curCount = insymaImgConfig.pagingLabel + " 1 " + insymaImgConfig.pagingSeparatorLabel + " " + insymaTotalPageArr[i];
						}
					} else {
						if((pageIdx - 1) >= 0) {
							newPageIdx = i+"-"+(pageIdx - 1);
							this.setPage(newPageIdx);
							curCount = insymaImgConfig.pagingLabel + " " + (pageIdx) + " " + insymaImgConfig.pagingSeparatorLabel + " " + insymaTotalPageArr[i];
						}
						else {
							newPageIdx = i+"-"+(insymaTotalPageArr[i] - 1);
							this.setPage(newPageIdx);
							curCount = insymaImgConfig.pagingLabel + " " + (insymaTotalPageArr[i]) + " " + insymaImgConfig.pagingSeparatorLabel + " " + insymaTotalPageArr[i];
						}
					}
					insymaUtil.setText(pageCounter, curCount);
					insymaPageIdxArr[i] = newPageIdx;
				}
			}
		},
		// Erstellt Elemente für das Paging
		createControls:function(){
			insymaPageIdxArr = [];
			insymaTotalPageArr = [];
			insymaTotalImgs = 0;
			var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass);
			for (var i = 0; i < thumbCon.length; i++) {
				var itemCount = (insymaImgConfig.itemCount!=0 && insymaImgConfig.itemCount!="")?insymaImgConfig.itemCount:5000;
				var thumblist = thumbCon[i].getElementsByTagName("ul")[0];
				if (itemCount != 5000) {
					var pagingCon = insymaUtil.createElm("p", {className: insymaImgAdd.props.PagingContainerClass}, "", thumbCon[i]);
				}
				var anchors = insymaImgAdd.paging2.getImageAnchors(thumbCon[i]);
				
				for(var y = 0;y<anchors.length;y++){
					insymaUtil.setAttr(anchors[y],{idxx: i+"-"+y});
					insymaTotalImgs += 1;
				}
												
				if (anchors.length > itemCount && typeof(pagingCon)!='undefined') {
					var aPrev = insymaUtil.createElm("a", {className: insymaImgAdd.props.prevPageClass, href: "#"}, insymaImgConfig.prevPageLabel, pagingCon);
					aPrev.onclick = function(){insymaImgAdd.paging2.changePage(this,-1); return false;};
					var pageCounter = insymaUtil.createElm("span", false, false, pagingCon);
					var aNext = insymaUtil.createElm("a", {className: insymaImgAdd.props.nextPageClass, href: "#"}, insymaImgConfig.nextPageLabel, pagingCon);
					aNext.onclick = function(){insymaImgAdd.paging2.changePage(this,1); return false;};
					
					//insymaTotalImgs = anchors.length;
					
					if((insymaTotalImgs % itemCount) > 0 && (insymaTotalImgs > itemCount)) {
						insymaTotalPage = parseInt(insymaTotalImgs / itemCount) + 1;
					}
					else if((insymaTotalImgs % itemCount) == 0 && (insymaTotalImgs > itemCount)) {
						insymaTotalPage = parseInt(insymaTotalImgs / itemCount);
					}
					else {
						insymaTotalPage = 1;
					}
					
					if (typeof(thumblist) != 'undefined') {
						thumbCon[i].appendChild(thumblist);
					}
					
					insymaUtil.setText(pageCounter, insymaImgConfig.pagingLabel + " 1 " + insymaImgConfig.pagingSeparatorLabel + " " + insymaTotalPage);
					insymaTotalPageArr.push(insymaTotalPage);
					insymaPageIdxArr.push(i+"-0");
					this.setPage(i+"-0");
				}
			}
		}
	},
	// Alles für die Bildanzeige
	gallery2: {
		init:function(){
			this.createInlineGal();
		},
	
		// Lädt Bild und zeigt es an
		loadImg:function(objLink){
			var PreLoading = new Image();
			
			var oldCon = document.getElementById(insymaImgAdd.props.imageAddID);
			var imageCon = objLink;
			var image = imageCon.getElementsByTagName("img")[0];
			var currLi = objLink.parentNode;
		
			var imageAltText = document.getElementById(insymaImgAdd.props.imageAltTextAddID);
			var imageNr = document.getElementById(insymaImgAdd.props.imageNrAddID);
			this.setLoading(true);
			PreLoading.onload = function(){

				oldCon.removeAttribute("id");
				insymaUtil.setAttr(imageCon, {idxx: objLink.getAttribute("idxx")});
				insymaUtil.setAttr(imageCon, {id: insymaImgAdd.props.imageAddID});
				if (typeof(currLi) != 'undefined' && currLi.nodeName.toLowerCase() == 'li') {
					for (var i = 0; i < insymaUtil.elmByClass("li", "bildSpan").length; i++) {
						insymaUtil.cssjs("add", currLi.parentNode.getElementsByTagName("li")[i], insymaImgAdd.props.hideClass);
					}
					insymaUtil.cssjs("remove", currLi, insymaImgAdd.props.hideClass);
				}
				
				insymaUtil.setText(imageAltText, image.alt);
				insymaImgAdd.gallery2.imageCounter(objLink);
				insymaImgAdd.gallery2.setLoading(false);
			};
			PreLoading.src = objLink.getAttribute("href");
		},
		// Zeigt nächstes oder vorheriges Bild
		showInlineImg:function(direction){
			var currIdx = document.getElementById(insymaImgAdd.props.imageAddID).getAttribute("idxx");
			var thumbConIdx = parseInt(currIdx.split("-")[0]);
			var imgIdx = parseInt(currIdx.split("-")[1]);
			var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass)[thumbConIdx];				
			var anchors = insymaImgAdd.paging2.getImageAnchors(thumbCon);
			if (direction == 1) {
				try {
					this.loadImg(anchors[imgIdx+1]);
					//alert(currIdx);
				}
				catch(e) {
					this.loadImg(anchors[0]);
				}
			}else {
				try {
					this.loadImg(anchors[imgIdx-1]);
				}
				catch(e) {
					this.loadImg(anchors[anchors.length-1]);
				}
			}
			return false;
		},
		// Setzt Bild-Nr
		imageCounter:function(objLink) {
			if (insymaImgConfig.enableCounter != false) {
				var imgNr = document.getElementById(insymaImgAdd.props.imageNrAddID);
				var currIdx = document.getElementById(insymaImgAdd.props.imageAddID).getAttribute("idxx");
				var thumbConIdx = parseInt(currIdx.split("-")[0]);
				var imgIdx = parseInt(currIdx.split("-")[1]) + 1;
				var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass)[thumbConIdx];
				var anchors = insymaImgAdd.paging2.getImageAnchors(thumbCon);
				
				var curCount = insymaImgConfig.countLabel + " " + imgIdx + " " + insymaImgConfig.countSeperatorLabel + " " + anchors.length;
				
				insymaUtil.setText(imgNr, curCount);
			}
		},
		// Zeigt oder versteckt das Bild, BildInfo und Preloader
		setLoading:function(bool){
			var image = document.getElementById(insymaImgAdd.props.imageAddID);
			var imageInfo = document.getElementById(insymaImgAdd.props.imageInfoAddID);
			if (bool) {
				if(!insymaImgConfig.showImgDuringLoading) {
					insymaUtil.cssjs("add", image, insymaImgAdd.props.invisClass);						
				}
				insymaUtil.cssjs("add", imageInfo, insymaImgAdd.props.invisClass);
				insymaUtil.cssjs("remove", insymaPreLoader, insymaImgAdd.props.hideClass);
			}
			else {
				insymaUtil.cssjs("remove", image, insymaImgAdd.props.invisClass);
				insymaUtil.cssjs("remove", imageInfo, insymaImgAdd.props.invisClass);
				insymaUtil.cssjs("add", insymaPreLoader, insymaImgAdd.props.hideClass);
			}
		},
		// Fügt ein Event für Tastatur-Bedienung hinzu
		setKeyListener:function (evt) {
		    evt = (evt) ? evt : ((window.event) ? event : null);
		    if (evt) {
		        switch (evt.keyCode) {
					case 37:
		            	insymaImgAdd.gallery2.showInlineImg(-1);
                		break;
					case 39:
		            	insymaImgAdd.gallery2.showInlineImg(1);
                		break;
		        }
		    }
		},
		// Start Gallery OnLoad
		startOnLoad:function(){
			var thumbConIdx = 0;
			var imgIdx = 0;
			var showInlineImg = false;
			var thumbCon = insymaUtil.elmByClass("div", insymaImgAdd.props.thumbContainerClass);
			if(insymaUtil.getQuerystring(insymaImgAdd.props.onLoadUrlVar) != false) {
				if(insymaUtil.getQuerystring(insymaImgAdd.props.onLoadUrlVar) != true) {
					thumbConIdx = parseInt(insymaUtil.getQuerystring(insymaImgAdd.props.onLoadUrlVar).split('-')[0]);
					imgIdx = parseInt(insymaUtil.getQuerystring(insymaImgAdd.props.onLoadUrlVar).split('-')[1]);
				}
				showInlineImg = true;
			}			
			
		},
		// Elemente für die Bildanzeige erstellen
		createInlineGal:function(){
			// Overlay und image Container erstellen		
				var outerConInline = document.getElementById(insymaImgAdd.props.inlineConAddID);
				
				if(outerConInline.getElementsByTagName("li").length > 0) {
					for(x = 1; x < outerConInline.getElementsByTagName("li").length; x++){
						insymaUtil.cssjs("add", outerConInline.getElementsByTagName("li")[x], insymaImgAdd.props.hideClass);
					}
					
					var insymaAltImgCon = outerConInline.getElementsByTagName("li")[0];
					var getIdx = insymaAltImgCon.getElementsByTagName("a")[0].getAttribute("idxx");
					var anchorsInline = outerConInline.getElementsByTagName("a").length;
					insymaUtil.setAttr(insymaAltImgCon.getElementsByTagName("a")[0], {id: insymaImgAdd.props.imageAddID});
					insymaUtil.setAttr(insymaAltImgCon.getElementsByTagName("a")[0], {idxx: getIdx});
					var imgIdxInline = 0;
					imgIdxInline = parseInt(imgIdxInline)+1;
					var imageInline = document.getElementById(insymaImgAdd.props.imageAddID);
					imageInline.alt = insymaAltImgCon.getElementsByTagName("img")[0].alt;
					insymaPreLoaderInline = insymaUtil.createElm("img", {id: insymaImgAdd.props.preloaderAddID, src: insymaImgConfig.loadingImgPath, className:insymaImgAdd.props.hideClass}, false, insymaAltImgCon);	
					
			
					// Erstellt das Image-Control
					var imageControlConInline = insymaUtil.createElm("li",{id: insymaImgAdd.props.imageControlAddID}, false, outerConInline);
					var imageControlInline = insymaUtil.createElm("ul",false, false, imageControlConInline);
					if (insymaImgConfig.enableControls != false) {
					// Erstellt Control Prev Image
					var controlPrevInline = insymaUtil.createElm("li",{id: insymaImgAdd.props.controlPrevAddID}, false, imageControlInline);
					var controlPrevLinkInline = insymaUtil.createElm("a",{href:"#", title:insymaImgConfig.controlPrevLabel}, false, controlPrevInline);
					var controlPrevSpanInline = insymaUtil.createElm("span",false, insymaImgConfig.controlPrevLabel, controlPrevLinkInline);
					controlPrevLinkInline.onclick = function(){insymaImgAdd.gallery2.showInlineImg(-1); return false;};
					
					// Erstellt Image Info Container
					var imageInfoInline = insymaUtil.createElm("li",{id: insymaImgAdd.props.imageInfoAddID}, false, imageControlInline);
				
						
					// Container für Bild Alternativ-Text
					var imageAltTextInline = insymaUtil.createElm("span", {id: insymaImgAdd.props.imageAltTextAddID}, false, imageInfoInline);					
					insymaUtil.setText(imageAltTextInline, imageInline.alt);	
					
					// Container für Bild-Nr
					if (insymaImgConfig.enableCounter != false) {
						var imgNrInline = insymaUtil.createElm("span", {id: insymaImgAdd.props.imageNrAddID}, false, imageInfoInline);
					}
					var curCountInline = insymaImgConfig.countLabel + " " + imgIdxInline + " " + insymaImgConfig.countSeperatorLabel + " " + anchorsInline;
					insymaUtil.setText(imgNrInline, curCountInline);
					
					// Erstellt Control Next Image
					var controlNextInline = insymaUtil.createElm("li",{id: insymaImgAdd.props.controlNextAddID}, false, imageControlInline);
					var controlNextLinkInline = insymaUtil.createElm("a",{href:"#", title:insymaImgConfig.controlNextLabel}, false, controlNextInline);
					var controlNextSpanInline = insymaUtil.createElm("span",false, insymaImgConfig.controlNextLabel, controlNextLinkInline);
					controlNextLinkInline.onclick = function(){insymaImgAdd.gallery2.showInlineImg(1); return false;};
					}
				}	
			insymaImgAdd.gallery2.startOnLoad();
		}
	}
};
insymaUtil.addEvent(window, "load", insymaImgAdd.init, false);
