var showing_thumbs = false;
var loading_count = 0;
var index = 0;
var scrollbar_width = 0;
var displayed_submenu=null;
var exit_gallery_page=null;
var page_type=0; // 0 regular, 1 gallery, 2 url thumbs, 3 - text/other
// Sizes
var nav_width=0;
var galnav_width=0;
var displayed_submenu_width=0;
// play timer
var play_timer;
var setPos_timer = null;
var hideImagesTimer = null;

$(window).load(function () {
	setPositions(true,true);
});

$(document).ready(function() {
	// Force navigation width
	nav_width=$('#nav').width();
	$('#nav').css('width',(nav_width+10)+'px');
	galnav_width=$('.galnav').width();
	$('.navli > .submenu').hide();
	if(displayed_submenu) {
		displayed_submenu.show();
		displayed_submenu.css('left','0px');
		displayed_submenu_width=displayed_submenu.width();
		displayed_submenu.hide();
	}
	
	scrollbar_width = 
		function() {
			var div = $('<div style="width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;"><div style="height:100px;"></div></div>');
			$('body').append(div);
			var w1 = $('div', div).innerWidth();
			div.css('overflow-y', 'scroll');
			var w2 = $('div', div).innerWidth();
			div.remove();
			if($.browser.opera) return Math.max(w1 - w2, 15);
			return Math.max(w1 - w2, 17);
		}.call();
		
	
	if(page_type < 3){
		if(galleryjson) loadJSON();
		if(page_type==1){
			if(displayed_submenu != null){
				galnav_width += displayed_submenu.width() + 20;
				$('.galnav').append(displayed_submenu);

			}
			$('.thumbs').click(function() {
				if(play_timer != -1) {
					clearInterval(play_timer);
					play_timer = -1;
				}
				showThumbnails();
			});
			$('.left_arrow').click(function() {
				if(play_timer != -1) {
					clearInterval(play_timer);
					play_timer = -1;
				}
				galleryPrev();
			});
			$('.right_arrow').click(function() {
				if(play_timer != -1) {
					clearInterval(play_timer);
					play_timer = -1;
				}
				galleryNext();
			});
			$(document).keydown(function(e) {
				var code = (e.keyCode ? e.keyCode : e.which);
				if(code==39) {
					if(play_timer != -1) {
						clearInterval(play_timer);
						play_timer = -1;
					}
					galleryNext();
				}
				if(code==37) {
					if(play_timer != -1) {
						clearInterval(play_timer);
						play_timer = -1;
					}
					galleryPrev();
				}
			});
		}
		if($.browser.msie && $.browser.version.substr(0,1)<"8") {
			$('html, body').css({'overflow-x':'hidden','overflow-y':'auto','width':'100%','height':'100%'});
			$('body').css('overflow-y','hidden');
		} else if($.browser.opera && page_type!=2) $('html, body').css('overflow-y','hidden');
	} else {
		$('.galnav').css('display',page_type==1?'block':'none');
		$('.galnavholder').css('display','none');
		$('body').css("overflow","auto");
	}
	$('.photo_wraper').css('width',$(window).width());
	setPositions(true,true);
	if(page_type!=1) $('#nav').show();
	if(displayed_submenu) displayed_submenu.show();
});

function setPositions(second,forced){
	if(!forced) {
		if(setPos_timer != -1) clearTimeout(setPos_timer);
		setPos_timer = setTimeout('setPositions("'+second+'","1")',400);
		return;
	}
	setPos_timer = -1;
	var offset=scrollbar_width;
	if(($.browser.msie && $.browser.version.substr(0,1)<"8")  || $.browser.opera) {
		offset=0;
	}
	if($('body').css('overflow-y') == 'hidden' || page_type == 2) {
		$('.photo_wraper').css('margin-left', ($(window).width()-(($.browser.msie && $.browser.version.substr(0,1)<"8")?0:scrollbar_width)-$('.photo_wraper').width())/2+'px');
		$('#nav').css('left', ($(window).width()-offset-nav_width)+'px');
		$('.galnav').css('left', ($(window).width()-2*scrollbar_width-galnav_width-(offset==0?20:18))+'px');
		$('.galnavholder').css('width',($(window).width()-scrollbar_width)+'px');
		if(displayed_submenu) displayed_submenu.css('left', ($(window).width()-offset-displayed_submenu_width-10)+'px');
	} else {
		$('.photo_wraper').css('margin-left', ($(window).width()-$('.photo_wraper').width())/2+'px');
		$('#nav').css('left', ($(window).width()-nav_width)+'px');
		$('.galnav').css('left', ($(window).width()-galnav_width-scrollbar_width-offset)+'px');
		$('.galnavholder').css('width',($(window).width())+'px');
		if(displayed_submenu) displayed_submenu.css('left', ($(window).width()-displayed_submenu_width-10)+'px');
	}
	if(!second) setPositions(true);
}

window.onresize = function() {
	if(page_type<3){
		var was_thumbs = showing_thumbs;
		hideThumbnails(true);
		setupGallery();
		galleryJumpTo(index,true);
		setPositions();
		if(was_thumbs) showThumbnails(true);
		else hideThumbnails(true);
	} else setPositions();
}

function exitGallery(){
	window.location=exit_gallery_page;
}

function loadJSON() {
	$('#main').remove('.thumbsbox');
	$('.galleryobject').remove();
	var count = 0;
	index = 0;
	loading_count = 0;
	$('#main').append('<div class="thumbsbox"></div>');
	var thumbsbox = $('#main').children('.thumbsbox');
	jQuery.each(galleryjson, function() {
		$('#photo_wrap').append('<div class="galleryobject '+ this.typ + '_wrap"></div>');
		var div = $('#photo_wrap').children(":last-child");
		if(count > 0) div.hide();
		thumbsbox.append('<div class="thumb fake_link"></div>');
		var thumb = thumbsbox.children(":last-child");
		thumb.append('<img src="'+this.thumb+'" class="fake_link" id="'+count+'" />');
		if(page_type==1) {
			thumb.click(function() {
				galleryJumpTo($("img",this).attr('id'),true);
				loadImage(true);
			});
		} else if(page_type==2) {
			thumb.attr('url',this.url);
			thumb.click(function() {
				window.open($(this).attr('url'),"Press");
			});
		}
		thumb.hover(function() { $(this).stop().fadeTo(250,0.65); }, function() { $(this).stop().fadeTo(250,1); });
		if(page_type != 2) {
			var img;
			div.append('<img class="loadimg image" />');
			var img = div.children(':first-child');
			img.attr({'h':this.h,'w':this.w,'pos':count++,'imgsource':this.src});
		}
	});

	$('.galnav').css('display',page_type==1?'block':'none');

	setupGallery();
	loadImage();
	galleryJumpTo(index,true);
	if(page_type!=2) play_timer = setInterval("galleryNext()",4000);
	else showThumbnails(true);
}

function showThumbnails(jump) {
	if(showing_thumbs) {
		hideThumbnails();
		return;
	}
	if(jump) {
		$('.thumbsbox').css('top','120px');
		$('#photo_wrap').hide();
	} else {
		$('.thumbsbox').animate({top: "120px"},400);
		if(hideImagesTimer!=null) clearTimer(hideImagesTimer);
		hideImagesTimer = setTimeout("$('#photo_wrap').hide();hideImagesTimer=null",400);
	}
	
	if($.browser.opera) $('html, body').css('overflow-y','auto');
	else $('body').css('overflow-y','auto');
	setPositions();
	$('.photo_wraper').css('overflow','hidden');
	showing_thumbs = true;
}

function hideThumbnails(jump) {
	$('.thumbsbox').each(function() {
		if(jump) $(this).css('top', -$(this).height() + 'px');
		else $(this).animate({top: -$(this).height() + 'px'}, 400);
		if(hideImagesTimer!=null) clearTimeout(hideImagesTimer);
		$('#photo_wrap').show();
	});
	if($.browser.opera) $('html, body').css('overflow-y','hidden');
	else $('body').css('overflow-y','hidden');
	setPositions();
	showing_thumbs = false;
}

function loadImage(readahead) {
	if(loading_count > 2 || loading_count == -1) return;
	loading_count++;
	var img = $('.loadimg:eq(0)');
	if(!img){ 
		loading_count = -1;
		return;
	}
	img.attr('src',img.attr('imgsource'));
	img.removeClass('loadimg');
	img.ready(function() {
		loading_count--;
		if(readahead) {
			loadImage();
			loadImage();
		}
	});
}

function setupThumbsize(scroll){
	var thumbs_in_raw = 5;
	var thumbnail_w = ($(window).width() - (scroll?62:(62-scrollbar_width))) / thumbs_in_raw;
	var i = 1;
	var topmrg = 0;
	if($.browser.msie && $.browser.version.substr(0,1)<"8") topmrg=5;
	$('.thumb').each(function() {
		var img = $(this).children(":first-child");
		if(i <= thumbs_in_raw) {
			if(i % thumbs_in_raw == 1) $(this).css('margin','5px 7px 0px 10px');
			else $(this).css('margin','5px 7px 0px 0px');
		} else {
			if(i % thumbs_in_raw == 1) $(this).css('margin',topmrg+'px 7px 0px 10px');
			else $(this).css('margin',topmrg+'px 7px 0px 0px');
		}
		if(parseInt(img.attr('h')) > parseInt(img.attr('w'))) img.css('height','100%');
		else img.css('width',thumbnail_w);

		i++;
	});
}

function setupGallery() {
	if(page_type != 2) {
		$('.galleryobject').each(function() {
			var main_height = $(window).height() - 140;
			$(this).css('width', $(window).width() + 'px');
			$('.image',this).css('height', ($(window).height() - 140) + 'px');
			var w = Math.round((parseInt($('.image',this).css('height')) * $('.image',this).attr('w')) / $('.image',this).attr('h'));
			if(w > $(window).width()-20){
				w = $(window).width() - 20;
				main_height = Math.round((w * $('.image',this).attr('h')) / $('.image',this).attr('w'));
				$('.image',this).css('height', main_height + 'px');
			}
			$('.image',this).css('width', w + 'px');
	
			if(($('.image',this).attr('w') / $('.image',this).attr('h')) > 2) $(this).css('padding-top', ($(window).height()-main_height-140)/2+'px');
			$(this).css('padding-left', ($(window).width()-w)/2+'px');
		});
	
		$('.gallery').map(function() {
			$(this).css('width', ($(this).children('.galleryobject').length * $(window).width()) + 'px');
		});
	}
	// Check scrollbar modes.
	setupThumbsize(true);
	if( $('.thumb:first-child > :first-child').height()*($('.thumb').length/5) <= $(window).height()) {
		setupThumbsize(false);
		if($('.thumb:first-child > :first-child').height()*($('.thumb').length/5) > $(window).height()) setupThumbsize(true);
	}
	$('.thumbsbox').css('width',$(window).width());

	$('.thumbsbox').children().map(function() {
		$(this).css('float','left');
	});
	
	$('.photo_wraper').css('width',$(window).width());
}

function galleryPrev() {
	if(index == 0) {
		galleryJumpTo($('.gallery').children().length-1);
	} else{
		galleryJumpTo(index-1);
		loadImage(true);
	}
}

function galleryNext() {
	if(index+1 >= $('.gallery').children('.galleryobject').length) {
		galleryJumpTo(0,false);
	} else {
		galleryJumpTo(index+1,false);
		loadImage(true);
	}
}

function galleryJumpTo(i,jump) {
	if(showing_thumbs) hideThumbnails();

	var gallery = $('.gallery');
	i = parseInt(i);
	showing_thumbs = false;

	if(jump) {
		gallery.children(':nth-child('+(index+1)+')').hide();
		gallery.children(':nth-child('+(i+1)+')').show();
	} else {
		gallery.children().stop(true,true);
		gallery.children(':nth-child('+(index+1)+')').fadeOut(page_type==1?400:700);
		gallery.children(':nth-child('+(i+1)+')').fadeIn(page_type==1?400:700);
	}
	
	if(gallery.children('.galleryobject:eq('+i+') > :first-child').hasClass('loadimg'))
		gallery.children('.galleryobject:eq('+i+') > :first-child').attr('src',gallery.children('.galleryobject:eq('+i+') > :first-child').attr('imgsource'));

	if(i!= -1 && i < gallery.children('.galleryobject').length)
		$('.count').html((i+1) + ' / ' + gallery.children('.galleryobject').length);

	if(!gallery.children('.galleryobject:eq('+i+')').hasClass('text_wrap')) $('body').css('overflow','hidden');
	else $('body').css('overflow-y','auto');

	$('.photo_wraper').css('overflow','hidden');
	index = i;
}
