var lb_path = "/_js/lightbox";
var lb_galeries = new Array();

function lb_init(){
		
	lb_getlinks();
	
	var objBody = document.getElementsByTagName("body").item(0);
	var objHead = document.getElementsByTagName("head").item(0);
	
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','lb_overlay');
	objOverlay.style.display = 'none';
	objOverlay.style.position = 'absolute';
	objOverlay.style.top = '0px';
	objOverlay.style.left = '0px';
	objOverlay.style.zIndex = '500';
 	objOverlay.style.width = '100%';
	objOverlay.style.backgroundImage = "url(" + lb_path + "/overlay.png)";
	
	var objBox = document.createElement("div");
	objBox.setAttribute('id','lb_container');
	objBox.style.display = 'none';
	objBox.style.position = 'absolute';
	objBox.style.top = '0px';
	objBox.style.left = '0px';
	objBox.style.zIndex = '900';
	
	var objScript = document.createElement("script");
	objScript.src = lb_path + "/prototype.js";
	objScript.type = "text/javascript";
	
	objHead.appendChild(objScript);
	objBody.insertBefore(objBox, objBody.firstChild);
	objBody.insertBefore(objOverlay, objBody.firstChild);
	
	// Preload
	var imgLoading = new Image();
	var imgNext = new Image();
	var imgPrev = new Image();
	var imgClose = new Image();
	
	imgLoading.src = lb_path + "/loading.gif";
	imgNext.src = lb_path + "/nextlabel.gif";
	imgPrev.src = lb_path + "/prevlabel.gif";
	imgClose.src = lb_path + "/closelabel.gif";
}
	
function lb_getlinks(){
	
	if (!document.getElementsByTagName){ return; }
	
	var anchors = document.getElementsByTagName("a");

	for (var i=0; i < anchors.length; i++){
		var anchor = anchors[i];
		var lb_anchor_rel = anchor.getAttribute("rel");

		if (lb_anchor_rel){
			
			// IMAGE & IMAGE GALLERY
			if (lb_anchor_rel.substring(0, 5) == "image"){
				if (isgallery(lb_anchor_rel)){
					var gallery = lb_anchor_rel.replace("image[", "");
					gallery = gallery.replace("]", "");
					
					if (!lb_galeries[gallery]){
						lb_galeries[gallery] = new Array();
					}
					
					lb_galeries[gallery][lb_galeries[gallery].length] = new Array(anchor.href, anchor.title);
				}
				
				anchor.onclick = function () { lb_show(this, 'image'); return false; }
			}
			
			// YOUTUBE
			if (lb_anchor_rel.substring(0, 7) == "youtube"){
				
				anchor.onclick = function () { lb_show(this, 'youtube'); return false; }
			}
			
			// INLINE CONTENT
			if (lb_anchor_rel.substring(0, 6) == "inline"){
				
				anchor.onclick = function () { lb_show(this, 'inline'); return false; }
			}
			
			// EXTERNAL CONTENT
			if (lb_anchor_rel.substring(0, 8) == "external"){
				
				anchor.onclick = function () { lb_show(this, 'external'); return false; }
			}
		}
	}
}

function lb_addhtml(){
	
	var lb_container = document.getElementById("lb_container");
	
	var html = '<div id="lb_inner" style="background-color: #FFFFFF; padding: 10px; position: absolute; top: 0px; left: 0px;">';
	
	html += '<div id="lb_loading" style="font-family: arial; font-size: 12px; position: absolute; background-color: #F0F0F0;"><div style="padding: 10px; color: #000000;"><img src="' + lb_path + '/loading.gif" align="absmiddle" />&nbsp;&nbsp;Chargement en cours</div></div>';
	html += '<div id="lb_innercontent" style="background-color: #F0F0F0;"></div>';
	html += '<div id="lb_foot" style="background-color: #FFFFFF; border-top: 10px #FFFFFF solid;">';
	html += '<table cellpadding="0" cellspacing="0" border="0" style="width: 100%"><tr><td valign="top"><div id="lb_title" style="font-family: arial; font-size: 12px; color: #000000;">&nbsp;</div><div id="lb_gallery" style="font-family: arial; font-size: 10px; color: #000000;">&nbsp;</div></td><td style="width: 66px;" valign="top"><img src="' + lb_path + '/closelabel.gif" style="cursor: pointer" onclick="lb_hide();" /></td></tr></table>'
	html += '</div></div>';
	
	lb_container.innerHTML = html;
}

function lb_resize(w, h){
	
	w = parseInt(w) + 20;
	h = parseInt(h) + 50;
	
	var lb_container = document.getElementById("lb_container");
	var lb_inner = document.getElementById("lb_inner");
	var lb_innercontent = document.getElementById("lb_innercontent");
	
	var lb_pagesize = lb_getpagesize();
	var lb_scroll = lb_getpagescroll();
	
	lb_container.style.width = w + "px";
	lb_inner.style.height = (h - 20) + "px";
	
	lb_innercontent.style.height = (h - 20 - 32) + "px";
	lb_innercontent.style.width = (w - 20) + "px";
	
	lb_container.style.left = ((lb_pagesize[0] / 2) - (w / 2)) + "px";
	lb_container.style.top = (lb_scroll[1] + 50) + "px";
	
	if (document.getElementById("lb_next")){
		
		var lb_next = document.getElementById("lb_next");
		var lb_prev = document.getElementById("lb_prev");
		
		lb_next.style.left = (w / 2) + "px";
		lb_prev.style.left = "0px";
		
		lb_next.style.top = "0px";
		lb_prev.style.top = "0px";
		
		lb_next.style.paddingTop = "10px";
		lb_prev.style.paddingTop = "10px";
		
		lb_next.style.width = w / 2 + "px";
		lb_prev.style.width = w / 2 + "px";
	}
}

function lb_scroll(){
	
	var lb_container = document.getElementById("lb_container");
	var lb_scroll = lb_getpagescroll();
	
	lb_container.style.top = (lb_scroll[1] + 50) + "px";
}

function lb_show(objUrl, type){

	lb_addhtml();
	
	var lb_scroll = lb_getpagescroll();
	var lb_pagesize = lb_getpagesize();
	var lb_overlay = document.getElementById("lb_overlay");
	var lb_container = document.getElementById("lb_container");
	var lb_innercontent = document.getElementById("lb_innercontent");
	
	lb_overlay.style.height = lb_pagesize[1] + "px";
	lb_overlay.style.display = "block";
	
	lb_resize(200, 200);
	
	lb_container.style.display = "block";
	
	switch(type){
		case "image":
			lb_load_image(objUrl.rel, objUrl.href, objUrl.title);
			break;
			
		case "youtube":
			lb_load_youtube(objUrl);
			break;
			
		case "inline":
			lb_load_inline(objUrl);
			break;
			
		case "external":
			lb_load_external(objUrl);
			break;
	}
	
	return false;
}

function lb_load_image(rel, href, title){
	
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_loading = document.getElementById("lb_loading");
	
	var lb_image = document.createElement("img");
	lb_image.setAttribute('id','lb_image');
	lb_image.style.display = 'none';
	lb_innercontent.appendChild(lb_image);

	lb_loading.style.display = "block";
	
	var imgPreload = new Image();
	
	imgPreload.onload = function(){
		
		lb_image.src = href;
		
		// Redimentionne les images si elle sont trop grandes
		if ((imgPreload.width > screen.width - 200) || (imgPreload.height > screen.height - 400)){
			if (imgPreload.width > imgPreload.height && imgPreload.height < screen.height - 400){
				
				var div = imgPreload.width / (screen.width - 200);
				
				if (document.selection){
				
					lb_image.style.width = imgPreload.width / div;
					lb_image.style.height = imgPreload.height / div;
					
					var w = imgPreload.width / div;
					var h = imgPreload.height / div;
				} else {
					
					lb_image.width = imgPreload.width / div;
					lb_image.height = imgPreload.height / div;
					
					var w = lb_image.width;
					var h = lb_image.height;
				}
			} else {
				
				var div = imgPreload.height / (screen.height - 400);
				
				if (document.selection){
				
					lb_image.style.width = (imgPreload.width / div);
					lb_image.style.height = (imgPreload.height / div);
					
					var w = lb_image.style.width;
					var h = lb_image.style.height;
				} else {
					
					lb_image.width = imgPreload.width / div;
					lb_image.height = imgPreload.height / div;
					
					var w = imgPreload.width / div;
					var h = imgPreload.height / div;
				}
			}
		} else {
			
			var w = parseInt(imgPreload.width);
			var h = parseInt(imgPreload.height);
		}
		
		if (title){
				
			var lb_title = document.getElementById("lb_title");
			lb_title.innerHTML = title;
		}
		
		if (isgallery(rel) && lb_gallery_total(rel) > 1){
			
			var lb_next = document.createElement("div");
			lb_next.setAttribute('id','lb_next');
			lb_next.onclick = function () { lb_nextimage(rel, href); return false;}
			lb_next.style.cursor = "pointer";
			lb_next.style.display = "none";
			lb_next.style.position = 'absolute';
			lb_next.style.zIndex = '999';
			lb_next.innerHTML = '<img id="lb_next_img" src="' + lb_path + '/nextlabel.gif" align="right" />';
			lb_innercontent.appendChild(lb_next);
			
			var lb_prev = document.createElement("div");
			lb_prev.setAttribute('id','lb_prev');
			lb_prev.onclick = function () { lb_previmage(rel, href); return false;}
			lb_prev.style.cursor = "pointer";
			lb_prev.style.display = "none";
			lb_prev.style.position = 'absolute';
			lb_prev.style.zIndex = '999';
			lb_prev.innerHTML = '<img id="lb_prev_img" src="' + lb_path + '/prevlabel.gif" />';
			lb_innercontent.appendChild(lb_prev);
	
			var lb_title = document.getElementById("lb_gallery");
			lb_title.innerHTML = "Image " + lb_gallery_current_count(rel, href) + " sur " + lb_gallery_total(rel);
		}
		
		lb_resize(w, h);
		
		lb_loading.style.display = "none";
		lb_image.style.display = "block";
		
		if (isgallery(rel)){
			
			lb_prev.style.display = "block";
			lb_next.style.display = "block";
		}
		
		return false;
	}
	
	imgPreload.src = href;
}

function lb_nextimage(rel, href){
	
	var current = lb_gallery_current_count(rel, href);
	var lb_loading = document.getElementById("lb_loading");
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_gallery = document.getElementById("lb_gallery");
	var lb_title = document.getElementById("lb_title");
	
	lb_title.innerHTML = "&nbsp;";
	lb_gallery.innerHTML = "&nbsp;";
	lb_innercontent.innerHTML = "";
	lb_loading.style.display = "block";
	
	if (current == lb_gallery_total(rel)){
		
		var lb_title_str = lb_galeries[lb_get_gallery_name(rel)][0][1];
		var lb_href_str = lb_galeries[lb_get_gallery_name(rel)][0][0];
		
		lb_load_image(rel, lb_href_str, lb_title_str);
	} else {
		
		var lb_title_str = lb_galeries[lb_get_gallery_name(rel)][current][1];
		var lb_href_str = lb_galeries[lb_get_gallery_name(rel)][current][0];
		
		lb_load_image(rel, lb_href_str, lb_title_str);
	}
}

function lb_previmage(rel, href){
	
	var current = lb_gallery_current_count(rel, href);
	var lb_loading = document.getElementById("lb_loading");
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_gallery = document.getElementById("lb_gallery");
	var lb_title = document.getElementById("lb_title");
	
	lb_loading.style.display = "block";
	lb_title.innerHTML = "&nbsp;";
	lb_gallery.innerHTML = "&nbsp;";
	lb_innercontent.innerHTML = "";
	
	if (current == 1){
		
		var current_max = lb_galeries[lb_get_gallery_name(rel)].length - 1;
		
		var lb_title_str = lb_galeries[lb_get_gallery_name(rel)][current_max][1];
		var lb_href_str = lb_galeries[lb_get_gallery_name(rel)][current_max][0];
		
		lb_load_image(rel, lb_href_str, lb_title_str);
	} else {
		
		var lb_title_str = lb_galeries[lb_get_gallery_name(rel)][current - 2][1];
		var lb_href_str = lb_galeries[lb_get_gallery_name(rel)][current - 2][0];
		
		lb_load_image(rel, lb_href_str, lb_title_str);
	}
}

function lb_load_youtube(objUrl){
	
	var size = lb_get_size(objUrl.rel);
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_loading = document.getElementById("lb_loading");
	
	lb_resize(size[0], size[1]);
	
	var lb_youtube_link = objUrl.href.replace("http://www.youtube.com/watch?v=", "")
	
	lb_innercontent.innerHTML = '<object width="' + size[0] + '" height="' + size[1] + '"><param name="movie" value="http://www.youtube.com/v/' + lb_youtube_link + '&hl=fr&rel=0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/' + lb_youtube_link + '&hl=fr&rel=0" type="application/x-shockwave-flash" wmode="transparent" width="' + size[0] + '" height="' + size[1] + '"></embed></object>';
	
	lb_loading.style.display = "none";
}

function lb_load_inline(objUrl){
	
	var size = lb_get_size(objUrl.rel);
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_loading = document.getElementById("lb_loading");
	
	lb_resize(size[0], size[1]);
	
	lb_innercontent.style.overflow = "auto";
	
	new Ajax.Request( objUrl.href ,{ 
					 
		method: 'get',
		onComplete: function(transport) {
			
			var content = transport.responseText;
			lb_innercontent.innerHTML = content;
			lb_loading.style.display = "none";
		}
	});
}

function lb_load_external(objUrl){
	
	var size = lb_get_size(objUrl.rel);
	var lb_innercontent = document.getElementById("lb_innercontent");
	var lb_loading = document.getElementById("lb_loading");
	
	lb_resize(size[0], size[1]);
	
	var lw_iframe = document.createElement("iframe");
	lw_iframe.setAttribute('id','lb_iframe');
	lw_iframe.style.border = 0;
	
	// FOR IE
	lw_iframe.onreadystatechange = function(){
		
		if (lw_iframe.readyState == "interactive"){
			
			lb_loading.style.display = "none";
		}
	}
		
	// FOR FF
	lw_iframe.onload = function(){
		
		lb_loading.style.display = "none";
	}
	
	lw_iframe.src = objUrl.href;
	
	lw_iframe.style.width = size[0] + "px";
	lw_iframe.style.height = size[1] + "px";
	
	lb_innercontent.appendChild(lw_iframe);
}

function lb_get_size(rel){
	
	var pagesize = lb_getpagesize();
	var t = rel.split("[");
	var size = new Array();
						
	if (t[1]){
		
		var t1 = t[1].replace("]", "");
		size = t1.split(",");
	} else {
		
		switch(rel){
			
			case "youtube":
				size[0] = 425;
				size[1] = 355;
				break;
				
			case "external":
				size[0] = screen.width - 150;
				size[1] = screen.height - 350;
				break;
				
			default:
				size[0] = 200;
				size[1] = 200;
				break;
		}
	}
	
	return size;
}

function lb_get_gallery_name(rel){
	
	var gallery = rel.replace("image[", "");
	gallery = gallery.replace("]", "");
	
	return gallery;
}

function lb_gallery_current_count(rel, href){
	
	for (var i = 0; i < lb_galeries[lb_get_gallery_name(rel)].length; i++){
		
		if (lb_galeries[lb_get_gallery_name(rel)][i][0] == href){
			
			return i + 1;
		}
	}
}

function lb_gallery_total(rel){
	
	return lb_galeries[lb_get_gallery_name(rel)].length;
}

function isgallery(rel){
	
	if(rel.substring(0, 6) == "image["){

		return true;
	} else {
		return false;
	}
}

function lb_hide(){
	
	var lb_overlay = document.getElementById("lb_overlay");
	var lb_container = document.getElementById("lb_container");
	var lb_gallery = document.getElementById("lb_gallery");
	var lb_title = document.getElementById("lb_title");
	var lb_innercontent = document.getElementById("lb_innercontent");
	
	lb_overlay.style.display = "none";
	lb_container.style.display = "none";
	
	lb_title.innerHTML = "&nbsp;";
	lb_gallery.innerHTML = "&nbsp;";
	
	lb_innercontent.style.overflow = "hidden";
	
	lb_innercontent.innerHTML = "";
}

function lb_getpagesize(){
	
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		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;
	
	if (self.innerHeight) {	// all except Explorer
		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;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function lb_getpagescroll(){
	
	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) { // all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}

function lb_addloadevent(func){
	
	var oldonload = window.onload;

	if (typeof window.onload != 'function'){
		
		window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}
}

function lb_addscrollevent(func){
	
	var oldonscroll = window.onscroll;

	if (typeof window.onscroll != 'function'){
		
		window.onscroll = func;
	} else {
		window.onscroll = function(){
		oldscroll();
		func();
		}
	}
}

lb_addloadevent(lb_init);
lb_addscrollevent(lb_scroll);
