var resize = 'fit';
var isloading = false;
var wait = false;
var disabled = false;

// resizer parameters
var resizervalue = '2';
var resizerlater = new Array();
var resizerparams = new Array();
resizerparams['1'] = new Array();
resizerparams['1']['slider_height'] = '150px';
resizerparams['1']['slider-container_height'] = '128px';
resizerparams['1']['slider_li_a_size'] = '100px';
resizerparams['1']['slider_li_a_img_max'] = '80px';
resizerparams['1']['informations_font-size'] = '10px';
resizerparams['1']['informations_width'] = '210px';
resizerparams['1']['informations-container_width'] = '190px';
resizerparams['1']['im-comment_width'] = '150px';
resizerparams['2'] = new Array();
resizerparams['2']['slider_height'] = '200px';
resizerparams['2']['slider-container_height'] = '178px';
resizerparams['2']['slider_li_a_size'] = '150px';
resizerparams['2']['slider_li_a_img_max'] = '130px';
resizerparams['2']['informations_font-size'] = '12px';
resizerparams['2']['informations_width'] = '260px';
resizerparams['2']['informations-container_width'] = '240px';
resizerparams['2']['im-comment_width'] = '200px';
resizerparams['3'] = new Array();
resizerparams['3']['slider_height'] = '250px';
resizerparams['3']['slider-container_height'] = '228px';
resizerparams['3']['slider_li_a_size'] = '200px';
resizerparams['3']['slider_li_a_img_max'] = '180px';
resizerparams['3']['informations_font-size'] = '14px';
resizerparams['3']['informations_width'] = '310px';
resizerparams['3']['informations-container_width'] = '290px';
resizerparams['3']['im-comment_width'] = '250px';

var slideshow = true;
var slideshow_delay = 2200;
var slideshow_timer = 0;

$.fn.image = function(src, f){
	return this.each(function(){
		$('<img />').appendTo(this).each(function(){
			this.src = src;
			this.onload = f;
		});
	});
};

function roundNumber(number, decimals) {
	return Math.round(number * Math.pow(10, decimals)) / Math.pow(10, decimals);
}

function extractUrl() {
	var requete = location.search.substring(1);
	var tab_paires = requete.split("&");
	var tab_elts = new Array();
	for (var i = 0; i < tab_paires.length; i++) {
		temp = tab_paires[i].split("=");
		tab_elts[temp[0]] = unescape(temp[1]);
	}
	return tab_elts;
}

function directLink(url) {
	url = location.href.substring(0, location.href.lastIndexOf('/') + 1) + url;
	$('#direct-link').attr('href', url);
}

function resize_image() {
	a = $('#im-size').html();
	if (a == '')
		a = '400x400';
	a = a.split('x');
	if (resize == 'full') {
		nw = parseInt(a[0]);
		nh = parseInt(a[1]);
	}
	else if (resize == 'fit') {
		p = a[0] / a[1];
		w = $('#image').width() - 20;
		h = $('#image').height() - 20;
		dw = w / a[0];
		dh = h / a[1];
		if (dw >= dh) {
			nw = h * p;
			nh = h;
		}
		else {
			nw = w;
			nh = w / p;
		}
		/*
		do not resize > 100%
		if (nw > a[0])
			nw = a[0];
		if (nh > a[1])
			nh = a[1];
		*/
	}
	s = Math.round(roundNumber(nw / a[0], 2) * 100);
	if (isFinite(s))
		$('#resize-ratio').html(s + ' %');
	$("#image-container img").width(nw).height(nh);

	// 	$(window).trigger('resize');
}

function load_image_start(link) {
	if (!link)
		return false;

	var imgid = $(link).find('img').attr('id');

	if (isloading) {
		$('#image-container *').remove();
		$('#image #loader').remove();
		isloading = false;
		wait = true;

		disabled = true;

		if ($('#slider-container').is(':visible')) {
			var overlay = $('<div id="overlay"><img src="'+INSTALL_PATH+'/images/ajax-loader.gif" /></div>');
			$('#slider').append(overlay);
		}

		$('#slider ul li a').removeClass('selected');
		$(link).addClass('selected');
		slider_scroll();

		$('#image-container').hide();

		setTimeout("waitandload('"+imgid+"')", 10);
	}
	else {
		isloading = true;

		$('#slider ul li a').removeClass('selected');
		$(link).addClass('selected');
		slider_scroll();

		$('#image-container').fadeOut('slow', function() {
			if (!isloading) { wait = false; return false; }
			load_image(imgid);
		});
	}
	
}

function load_image(imgid) {
	$('#image-container *').remove();
	$('#image #loader').remove();
	if (!isloading) { wait = false; return false; }

	loader = $('<div id="loader"><img src="'+INSTALL_PATH+'/images/ajax-loader.gif" alt="'+imgid+'" /></div>');
	$('#image').append(loader);

	if (!isloading) { wait = false; return false; }

	$.ajax({
		url: INSTALL_PATH+'/requests.php',
		type: 'GET',
		dataType: 'xml',
		data: "action=imagedata&imgid=" + $('#slider .selected img').attr('id'),
		timeout: 1000,
		error: function() {
			// alert('Error loading image');
		},
		success: function(xml){
			if (!isloading) { wait = false; return false; }

			res = new Array();
			$(xml).find('item').each(function(){
				var item_text = $(this).find('text').text();
				var item_value = $(this).find('value').text();
				res[item_text] = item_value;
			});

			$('#im-title').text(res['title']);
			$('#im-filename').text(res['filename']);
			$('#im-size').text(res['size']);
			$('#im-comment').text(res['comment']);
			$('#im-rating').html(buildRating(res['rate']));
			$('#im-exif').html(res['exifintable']);
			directLink(res['url']);
	
			$('#image-container').hide();
			$("#image-container").image(res['fullurl'], function(){
				if (!isloading) { wait = false; return false; }
	
				$('#image #loader').remove();
				resize_image();
				$('#image-container').fadeIn('slow', function() {
					wait = false;
					isloading = false;
					// slideshow timer start
					if (slideshow) {
						window.clearTimeout(slideshow_timer);
						slideshow_timer = window.setTimeout("slideshow_next()", slideshow_delay);
					}
				});
				$(window).trigger('resize');
			});
		}
	});
}

function setRating(rating) {
	$.ajax({
		url: INSTALL_PATH+'/requests.php',
		type: 'GET',
		data: "action=setRating&imgid=" + $('#slider .selected img').attr('id') + "&rate="+rating,
		timeout: 1000,
		success: function(data){
			// if (data == "NO")
			// 	alert("You have alreay rated this image.");
			// else
			// if (data == "OK") {
				$.ajax({
					url: INSTALL_PATH+'/requests.php',
					type: 'GET',
					dataType: 'xml',
					data: "action=imagedata&imgid=" + $('#slider .selected img').attr('id'),
					timeout: 1000,
					success: function(xml){
						res = new Array();
						$(xml).find('item').each(function(){
							var item_text = $(this).find('text').text();
							var item_value = $(this).find('value').text();
							res[item_text] = item_value;
						});
						$('#im-rating').html(buildRating(res['rate']));
					}
				});
			// }
		}
	});
	return false;
}

function buildRating(current) {
	if (typeof(current) == "undefined")
		current = 0.0;
	if (current == '')
		current = 0;

	var percent = current * 20;
	var rating = '';
	rating += '<ul style="width: 125px; margin: 0 auto;" class="star-rating">';
	rating += '	<li style="width: '+percent+'%;" class="current-rating">'+current+'/5</li>';
	rating += '	<li class="star"><a style="width: 20%; z-index: 6;" title="1/5" href="#1" onclick="return setRating(\'1\');">1</a></li>';
	rating += '	<li class="star"><a style="width: 40%; z-index: 5;" title="2/5" href="#2" onclick="return setRating(\'2\');">2</a></li>';
	rating += '	<li class="star"><a style="width: 60%; z-index: 4;" title="3/5" href="#3" onclick="return setRating(\'3\');">3</a></li>';
	rating += '	<li class="star"><a style="width: 80%; z-index: 3;" title="4/5" href="#4" onclick="return setRating(\'4\');">4</a></li>';
	rating += '	<li class="star"><a style="width: 100%; z-index: 2;" title="5/5" href="#5" onclick="return setRating(\'5\');">5</a></li>';
	rating += '</ul>';
	return rating;
}

$(window).resize(function () {
	nw = $('#container').width();

	nw -= $('#informations').width();
	$("#image").width(nw - 16);
	$("#controls").width(nw - 2);

	nh = $('#container').height();
	nh -= $('#header').height();
	nh -= $('#slider').height();
	nh = nh + 10;

	$("#image").height(nh - 38);
	$("#main").height(nh - 10);

	resize_image();
});

function waitandload(imgid) {
	if (!wait) {
		isloading = true;
		disabled = false;
		$('#slider #overlay').remove();

		load_image(imgid);
	}
	else {
		setTimeout("waitandload('"+imgid+"')", 10);
	}
}

function next() {
	if (disabled) return false;
	$('#slider .selected').parent().next().find('a').click();
	return false;
}
function prev() {
	if (disabled) return false;
	$('#slider .selected').parent().prev().find('a').click();
	return false;
}

function slider_hide() {
	$('#slider-container').hide();
	$('#slider').height(20);
	$('#slider-button img').attr('src', INSTALL_PATH+'/images/up.png');
}
function slider_show() {
	$('#slider-container').show();
	$('#slider').height(resizerparams[resizervalue]['slider_height']);
	if (resizerlater['slider'])
		resizer(resizervalue);
	$('#slider-button img').attr('src', INSTALL_PATH+'/images/down.png');

	var newleft = $('#slider-container a.selected').parent().position().left - ($('#slider-container').width() / 2) + 90;
	$('#slider-container').scrollLeft(newleft);
}
function informations_hide() {
	$('#informations-container').hide();
	$('#informations').width(20);
	$('#informations-button img').attr('src', INSTALL_PATH+'/images/left.png');
	$(window).trigger('resize');
}
function informations_show() {
	$('#informations-container').show();
	$('#informations').width(resizerparams[resizervalue]['informations_width']);
	if (resizerlater['informations'])
		resizer(resizervalue);
	$('#informations-button img').attr('src', INSTALL_PATH+'/images/right.png');
	$(window).trigger('resize');
}

function slideshow_next() {
	if (slideshow)
		load_image_start($('#slider .selected').parent().next().find('a').get(0));
}
function slideshow_stop() {
	slideshow = false;
	window.clearTimeout(slideshow_timer);
	$('#slideshow').removeClass('selected');
}
function slideshow_start() {
	slideshow = true;
	load_image_start($('#slider .selected').parent().next().find('a').get(0));
	$('#slideshow').addClass('selected');
}

function slider_scroll() {
	var slider = $('#slider-container');
	var left = slider.find('a.selected').parent().position().left;
	var semiw = slider.width() / 2;
	var newleft = (left < semiw) ? 0 : left - semiw + (slider.find('li').width() / 2);

	if (slider.is(':visible'))
		slider.animate({ scrollLeft: newleft }, "slow");
}

function slider_width() {
	$('#slider ul').width($('#slider li').size() * ($('#slider li').width() + 11 + 11));
}

function resizer(newsize) {
	if (resizerparams[newsize] != undefined) {
		resizervalue = newsize;
		// $.cookie('resizer', newsize, { path: '/fgallery/' });

		if ($('#slider-container').is(':hidden'))
			resizerlater['slider'] = true;
		else {
			$('#slider').height(resizerparams[newsize]['slider_height']);
			$('#slider-container').height(resizerparams[newsize]['slider-container_height']);
			$('#slider li a').height(resizerparams[newsize]['slider_li_a_size']);
			$('#slider li a').width(resizerparams[newsize]['slider_li_a_size']);
			$('#slider li a img').each(function() {
				if ($(this).width() > $(this).height()) { // horizontal
					$(this).width(resizerparams[newsize]['slider_li_a_img_max']);
				}
				else { // vertical
					$(this).height(resizerparams[newsize]['slider_li_a_img_max']);
				}
				margintop = Math.round((parseInt(resizerparams[newsize]['slider_li_a_size']) - $(this).height()) / 2);
				$(this).css('margin-top', margintop);
			});
			slider_width();
			slider_scroll();
		}

		if ($('#informations-container').is(':hidden'))
			resizerlater['informations'] = true;
		else {
			$('#informations').css('font-size', resizerparams[newsize]['informations_font-size']);
			$('#informations #im-comment').width(resizerparams[newsize]['im-comment_width']);
			if (!$.browser.msie) {
				$('#informations').width(resizerparams[newsize]['informations_width']);
				$('#informations-container').width(resizerparams[newsize]['informations-container_width']); // something here make ie crash !
			}
		}
	}

	$(window).trigger('resize');
}

$(document).ready(function(){
	// adding some stuff useful only with javascript
	load_tpl();
	$('.inimage-informations').hide();
	$('#header').append(tpl['views']).append(tpl['loading']).after(tpl['main']);
	$('#slider').prepend(tpl['slider-button']);

	//
	$(window).trigger('resize');

	slider_width();

	$('#slider ul li a').click(function() {
		slideshow_stop();
		load_image_start(this);
		return false;
	});

	$('#fit').click(function() {
		slideshow_stop();

		$('#full').removeClass('selected');
		resize = 'fit';
		resize_image();
		$('#fit').addClass('selected');
		return false;
	});
	$('#full').click(function() {
		slideshow_stop();

		$('#fit').removeClass('selected');
		resize = 'full';
		resize_image();
		$('#full').addClass('selected');
		return false;
	});

	$('#views a').click(function() {
		nview = $(this).attr('id');
		// abcd
		switch (nview) {
			case 'view1' :
				informations_show();
				slider_show();
			break;
			case 'view2' :
				informations_hide();
				slider_show();
			break;
			case 'view3' :
				informations_hide();
				slider_hide();
			break;
		}
		$(window).trigger('resize');
		return false;
	});

	$('#next').click(function() {
		slideshow_stop();

		if (disabled) return false;
		$('#slider .selected').parent().next().find('a').click();
		return false;
	});
	$('#prev').click(function() {
		slideshow_stop();

		if (disabled) return false;
		$('#slider .selected').parent().prev().find('a').click();
		return false;
	});
	$('#slideshow').click(function() {
		if (slideshow)
			slideshow_stop();
		else
			slideshow_start();
		return false;
	});

	$('#slider-button').click(function() {
		if ($('#slider-container').is(':visible'))
			slider_hide();
		else
			slider_show();
		$(window).trigger('resize');
	});
	$('#informations-button').click(function() {
		if ($('#informations-container').is(':visible'))
			informations_hide();
		else
			informations_show();
		$(window).trigger('resize');
	});

	if (current != '') {
		load_image_start($('#slider ul li a').find('img#imgid-'+current+'').parent().get(0));
		slideshow = false;
	}
	else
		load_image_start($('#slider ul li:eq(0) a').get(0));

	if (slideshow)
		$('#slideshow').addClass('selected');

	$('#ajax-actions').ajaxStart(function(){ $(this).show(); }).ajaxStop(function(){ $(this).hide(); });

	// resizer
	$('#resizer a').click(function() {
		$('#resizer a').removeClass('selected');
		$(this).addClass('selected');
		resizer($(this).find('img').attr('alt'));
	});

	// if ((resizercookie = $.cookie('resizer')) != null) {
	// 	$('#resizer a img[@alt="'+resizercookie+'"]').parent('a').click();
	// }
});