/**
	@file 		arithnea.js
	@author 		ThomasSt�tter - ARITHNEA GmbH
	@date 		2009-03-04
	@desc		Methods for slideshow
	@depends	jquery.js
	@last-modified	maik.finsterbusch@arithnea.de
	@last-modified	matthias.marm@arithnea.de
**/

var SlideShow = 
{
	ITEMS_PER_ROW: 3,
	ROWS_PER_CONTAINER: 4,
	pages: new Array(),
	currentPage: 0,
	loadData: function(path)
	{
		$.getJSON(path,function(data)
			{
				SlideShowUtil.log('SlideShow.loadData() | Reading data from '+path);
				SlideShow.createThumbs(data);
				
				SlideShow.initThickBox();
				
				SlideShowUtil.log('SlideShow.loadData() | end ... ');
			});
	},

	initThickBox:function(){
			SlideShowUtil.log('SlideShow.initThickBox()');
			
			// init thickbox
			tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
			imgLoader = new Image();// preload image
			imgLoader.src = tb_pathToImage;
			ff2Replace(); // wraps divs around the img-Tags inside the links, so they don't get stretched by -moz-inline-box (MM)
	},
	
	show: function(idx)
	{
		SlideShow.currentPage=idx;
		
		$('#galleryContainer').replaceWith(SlideShow.pages[idx]);
		
		SlideShow.createNavigation('#pageNavTop');
		SlideShow.createNavigation('#pageNavBottom');
		
		SlideShow.initThickBox();
	},
	
	next: function()
	{
		if(SlideShow.currentPage + 1 < SlideShow.pages.length ) SlideShow.currentPage++;
		else SlideShow.currentPage = 0;
		
		SlideShow.show(SlideShow.currentPage);
	},
	
	prev: function()
	{
		if(SlideShow.currentPage - 1 > -1 ) SlideShow.currentPage--;
		else SlideShow.currentPage = SlideShow.pages.length-1;
		
		SlideShow.show(SlideShow.currentPage);
	},
	
	createNavigation: function(id)
	{	
		SlideShowUtil.log('Creating Pagination for page ' + SlideShow.currentPage);
		$(id).empty();
		$(id).append(SlideShowUtil.createPrevLink());
		
		for(var i=0;i < SlideShow.pages.length; i++)
		{
			var tLink;
			
			if(SlideShow.currentPage==i)
				tLink = SlideShowUtil.createActiveNavLink();
			else
				tLink = SlideShowUtil.createNavLink(i);
			
			tLink.innerHTML = i+1;
			
			$(id).append(tLink);
		}
		
		$(id).append(SlideShowUtil.createNextLink());
	},
	
	createThumbs: function(data)
	{
		SlideShowUtil.log('Cleaning container');
		$('#galleryContainer').empty();
		
		SlideShowUtil.log('Starting to build gallery with ' + data.items.length + ' entries');
		
		var rows = new Array();
		
		SlideShowUtil.log('Creating row elements');
		for(var i=0;i < data.items.length; i+=SlideShow.ITEMS_PER_ROW)
		{
			if(i % SlideShow.ROWS_PER_CONTAINER-1 == 0 || i + SlideShow.ITEMS_PER_ROW >= data.items.length)
				rows.push(SlideShowUtil.createRow(data.items.slice(i,i+SlideShow.ITEMS_PER_ROW),'row-image-gallery no-border'));
			else
				rows.push(SlideShowUtil.createRow(data.items.slice(i,i+SlideShow.ITEMS_PER_ROW),'row-image-gallery'));
		}
		
		SlideShowUtil.log('Creating container elements');
		for(var i=0;i < rows.length; i+=SlideShow.ROWS_PER_CONTAINER)
		{
			var tCnt = SlideShowUtil.createContainer();
			var eIdx = i + SlideShow.ROWS_PER_CONTAINER;
			
			for(var j=i; j < eIdx && j < rows.length; j++)
			{
				SlideShowUtil.log('Adding row #'+j);
				tCnt.appendChild(rows[j]);
			}
			
			SlideShow.pages.push(tCnt);
		}
		
		SlideShow.createNavigation('#pageNavTop');
		SlideShow.createNavigation('#pageNavBottom');
		
		//p.appendChild(SlideShow.pages[0]);
		
		$('#galleryContainer').replaceWith(SlideShow.pages[0]);
	}
}

var SlideShowUtil =
{
	showDirect: function()
	{
		tb_show($(".thickbox")[0].title,$(".thickbox")[0].href,"galleryhm");
	},
	
	log: function(msg)
	{
		if(typeof(console) != 'undefined'){
			if(console.log){
				console.log('[SlideShow]: '+msg);
			}
		}
	},
	
	createContainer: function()
	{
		var d = document.createElement('div');
		var c = document.createAttribute('class');
		
		c.nodeValue = 'image-gallery';
		d.id = 'galleryContainer';
		
		d.setAttributeNode(c);
		
		return d;
	},
	
	createRow: function(items, cName)
	{
		var tRow = document.createElement('div');
		var c = document.createAttribute('class');
		
		c.nodeValue = cName;
		tRow.setAttributeNode(c);
	
		for(var i=0; i < items.length; i++)
		{
			var tLink;
			
			if(i==0)
				tLink = SlideShowUtil.createLink(items[i],'first');
			else if(i==items.length-1)
				tLink = SlideShowUtil.createLink(items[i],'last');
			else 
				tLink = SlideShowUtil.createLink(items[i],'');

			var tImg = SlideShowUtil.createImage(items[i]);
			
			tRow.appendChild(tLink);
			tLink.appendChild(tImg);
		}
		
		return tRow;
	},
	
	createLink: function(item, cName)
	{	
		var a = document.createElement('a');
		var t = document.createAttribute('title');
		
		t.nodeValue = item.desc;
		a.href = item.file;
		
		a.setAttributeNode(t);

		var c = document.createAttribute('class');
		
		if(cName!='')
		{
			c.nodeValue='thickbox '+cName;
		}
		else{
			c.nodeValue='thickbox';		
		}
		a.setAttributeNode(c);
		
		var c = document.createAttribute('rel');
		c.nodeValue='galleryhm';
		a.setAttributeNode(c);


		return a;
	},
	
	createNavLink: function(idx)
	{	
		var a = document.createElement('a');
		
		a.href = 'javascript:SlideShow.show("'+idx+'");';
		
		return a;
	},
	
	createActiveNavLink: function()
	{
		var a = document.createElement('a');
		
		a.href = '#';
		a.className = 'active';
		
		return a;
	},
	
	createNextLink: function(idx)
	{	
		var tLink = document.createElement('a');
		var attr	= document.createAttribute('href');
		attr.nodeValue	= 'javascript:SlideShow.next();';
		tLink.setAttributeNode(attr);
		
		var tImg	= document.createElement('img');
		var attr	= document.createAttribute('src');
		//attr.nodeValue	= '/media/_technik/img/_technik_1/arrow_newslist_forward.jpg';
		attr.nodeValue	= 'http://w3-mediapool.hm.edu/mediapool/media/_technik/img/_technik_1/arrow_newslist_forward.jpg';
		tImg.setAttributeNode(attr);
		var attr	= document.createAttribute('alt');
		attr.nodeValue	= 'Next';
		tImg.setAttributeNode(attr);

		tLink.appendChild(tImg);
		
		return tLink;
	},
	
	createPrevLink: function(idx)
	{	
		var tLink = document.createElement('a');
		var attr	= document.createAttribute('href');
		attr.nodeValue	= 'javascript:SlideShow.prev();';
		tLink.setAttributeNode(attr);


		var tImg	= document.createElement('img');
		var attr	= document.createAttribute('src');
		attr.nodeValue	= 'http://w3-mediapool.hm.edu/mediapool/media/_technik/img/_technik_1/arrow_newslist_back.jpg';
		tImg.setAttributeNode(attr);
		var attr	= document.createAttribute('alt');
		attr.nodeValue	= 'Previous';
		tImg.setAttributeNode(attr);

		tLink.appendChild(tImg);
		
		return tLink;
	},
	
	createImage: function(item)
	{
		var i	= document.createElement('img');

		//attributes
		var a	= document.createAttribute('title');
		a.nodeValue	= item.title;
		i.setAttributeNode(a);
		var a	= document.createAttribute('rel');
		a.nodeValue	= 'gallery';
		i.setAttributeNode(a);
		var a	= document.createAttribute('src');
		a.nodeValue	= item.thumb;
		i.setAttributeNode(a);
		var a	= document.createAttribute('alt');
		a.nodeValue	= item.desc;
		i.setAttributeNode(a);
		
		return i;
	}
}

// wraps divs around the img-Tags inside the links, so they don't get stretched by -moz-inline-box (MM)
function ff2Replace() {
	if((jQuery.browser.version.substr(0,3))=="1.8") {
		$("a[class*=thickbox] img").wrap(document.createElement("div"));
	}
}

// replaces html entities in the description. not fully funtional since text remains instead of pictures still TODO
/* 
function replaceEntities() {
	var textElems = $("a[class*=thickbox]").get();
	for(i=0;i<textElems.length;i++) {
		$(textElems[i]).text($(textElems[i]).attr("title"));
		$(textElems[i]).attr("title", function() {
			return $(textElems[i]).html();
		});
		$(textElems[i]).text("");
	}
}*/
