var galleryHtmlUrl = "/photo/catalog/gallery.aspx";

var galleryInfoJsonUrl = "/photo/catalog/photo.aspx?jsoncallback=?";
var galleryThumbnailsJsonUrl = "/photo/catalog/photo.aspx?jsoncallback=?";
var galleryFotoJsonUrl = "/photo/catalog/photo.aspx?jsoncallback=?";

var galleryFotoLoader = "/img/loader-gallery.gif";

var galleryFotosCount = 0;
var galleryFotosCurrent = 0;
var galleryId = 0;
var branchId='m';
//var galleryFotosThumbnails = new Array();
var galleryFotosLoaded = new Array();

var galleryThumbnailsAreaWidth = 589;
var galleryThumbnailsWidth = 0;
var galleryThumbnailsJson = 0;

var galleryThumbnailsLeftId = 0;
var galleryThumbnailsRightId = 0;

var galleryScroll = false;
var useGallery = true;	


/**
 * Отображает галлерею. 
 *
 * @param integer idGallery Номер галлереи для запросов
 * @param integer idFoto Порядковый номер фотографии для начального запроса
 */
function showGallery(idGallery, idFoto,idBranch){
	galleryId = idGallery;
	galleryFotosCurrent = idFoto;
	branchId =idBranch;
	$('#gallery-overlay').click(hideGallery);
	if ($.browser.version != 6)  {
		$('#gallery-overlay, #gallery-loading').fadeIn("normal");
	} else {
		$('#gallery-overlay, #gallery-loading').show();
	}
	$('#gallery-container').load(galleryHtmlUrl, function(){
		$('#gallery-close-button').click(hideGallery);
		$('#gallery-overlay-close').click(hideGallery);
		$('#gallery-container').show();		
		//$("#gallery-container").css({marginTop: document.documentElement.scrollTop ? document.documentElement.scrollTop-20 : document.body.scrollTop-20 + 'px'});
		/* $("#gallery-current").css({
			"display":"block",
			"height":"452px"
		}); */
		galleryScroll = document.getElementById('gallery-thumbnails-box');
		getGallery();
		setKeyboardNavigation();
	});
}

function setKeyboardNavigation() {
	$(document).keydown(function(objEvent) {
		// To ie
		if ( objEvent == null ) {
			keycode = event.keyCode;
			escapeKey = 27;
		// To Mozilla
		} else {
			keycode = objEvent.keyCode;
			escapeKey = objEvent.DOM_VK_ESCAPE;
		}
		// Get the key in lower case form
		key = String.fromCharCode(keycode).toLowerCase();
		// Verify the keys to close the ligthBox
		if ( ( key == 'x' ) || ( keycode == escapeKey ) ) {
			hideGallery();
		}
		// Verify the key to show the previous image
		if ( ( keycode == 37 ) ) {
			getPrevFoto();
		}
		// Verify the key to show the next image
		if ( ( keycode == 39 ) ) {
			getNextFoto();
		}
	});
}
/**
 * Прячет галлерею. 
 */
function hideGallery(){
	$('#gallery-overlay, #gallery-container, #gallery-loading, #gallery-data, #gallery-current-count-box, #gallery-photo-descr').fadeOut("normal");
	$('#gallery-overlay').unbind();
	$('#gallery-close-button').unbind();
	$(document).unbind();	
	
	galleryFotosCount = 0;
	galleryFotosCurrent = 0;
	galleryId = 0;
	branchId='m';
	
	galleryThumbnailsWidth = 0;
	galleryThumbnailsLeftId = 0;
	galleryThumbnailsRightId = 0;
	galleryThumbnailsJson = 0;
	
	$('#gallery-thumbnails-tr').html("");
	
	galleryFotosLoaded = new Array();
}

/**
 * Запрашивает галлерею
 */
function getGallery(){
	$.getJSON(
		  galleryInfoJsonUrl,
		  {
		  	operation: "getGallery",
		  	gallery_id: galleryId,
		  	branch_id: branchId
		  },
		function(data)
		{
			galleryFotosCount = data.fotos;
			$("#gallery-fotos-count").html(galleryFotosCount);
			
			$('#gallery-loading').fadeOut("normal");
			$('#gallery-data').fadeIn("normal");
			
			getThumbnails();
			getFoto();
		}
	);
}

/**
 * Запрашивает фотографию. 
 */
function getFoto(fotoId){
	fotoId = (typeof fotoId == 'undefined') ? galleryFotosCurrent : fotoId;
	
	unsetCurrentThumbnail();
	
	$("#gallery-current").css({
//		"height":$("#gallery-current").height()+"px",
		"background-image":"url(" + galleryFotoLoader + ")",
		"background-repeat":"no-repeat",
		"background-position":"center center"
	});

	
	try{
		if(typeof galleryFotosLoaded[fotoId] == 'object'){
			getFotoCallback(galleryFotosLoaded[fotoId]);
			return;
		}
	}catch(e){
	}
	
	$("#gallery-current-img").fadeOut("normal");
	$("#gallery-current-count-box, #gallery-photo-descr").fadeOut("normal");
	//$("#gallery-current-next, #gallery-current-prev").fadeOut("fast");
	
	//$("#gallery-current-title").html("");
	//$("#gallery-current-description").html("");
	//$("#gallery-current-author").html("");
	//$("#gallery-current-author2").html("");	
	
	$.getJSON(
		galleryFotoJsonUrl,
		{
			operation: "getFoto",
			gallery_id: galleryId,
			branch_id: branchId,
			foto_id: fotoId
		},
		getFotoCallback
	);
}


function getFotoCallback(data){
	galleryFotosLoaded[data.id] = data;
	galleryFotosCurrent = data.id;
	
	setCurrentThumbnail();
	
	$moveTo = (galleryFotosCurrent-1)*130+65-314;
	$maxMove = (galleryFotosCount)*130+65-661;
	if($moveTo<0) {
		if(galleryScroll.contentScroll) galleryScroll.contentScroll(0,0,false);
	}
	else if($moveTo>$maxMove) {
		if(galleryScroll.contentScroll) galleryScroll.contentScroll($maxMove,0,false);
	}
	else {
		if(galleryScroll.contentScroll) galleryScroll.contentScroll((galleryFotosCurrent-1)*130+65-314,0,false);
	}
	
	imgPreloader = new Image();
	imgPreloader.onload = function(){		
		imgPreloader.onload = null;
		checkCurrentFotoButtons();
		if(data.width < 620) {
			data.width = 620;
		}
		$("#gallery-current-img").attr({"src":data.src,"alt":data.description});
//		$("#gallery-container").css({"width": data.width + 66, "margin-left": -(data.width/2)});
//		$("#gallery-current-box").css("width", data.width);
		$("#gallery-current-img").fadeIn("normal", function(){
			$("#gallery-current").css({
//				"height":"",
				"background-image":"none"
			});
		});
		$("#gallery-current-id").html(data.id);
		$("#gallery-current-title").html(data.title);
		$("#gallery-current-description").html(data.description);
		$("#gallery-current-author").html(data.author);
		$("#gallery-current-author2").html(data.author);
		$("#gallery-current-count-box, #gallery-photo-descr").fadeIn("normal");
	};
	
	imgPreloader.src = data.src;
}

/**
 * Запрашивает предыдущую фотографию. 
 */
function getPrevFoto(){
	if(galleryFotosCurrent > 1){
		getFoto(galleryFotosCurrent - 1);
	}
}

/**
 * Запрашивает следующую фотографию. 
 */
function getNextFoto(){
	if(galleryFotosCurrent < galleryFotosCount){
		getFoto(galleryFotosCurrent + 1);
	}
}

/**
 * Проверяет статусы кнопок. 
 */
function checkCurrentFotoButtons(){
	if(galleryFotosCurrent >= galleryFotosCount){
		$("#gallery-current-next").fadeOut("fast");
	} else {
		$("#gallery-current-next").fadeIn("normal");
	}
	if(galleryFotosCurrent <= 1){
		$("#gallery-current-prev").fadeOut("fast");
	} else {
		$("#gallery-current-prev").fadeIn("normal");
	}
}

/**
 * Запрашивает превью по нужной фотографии или текущей фото. 
 */
function getThumbnails(fotoId, callback){
	fotoId = (typeof fotoId == 'undefined') ? galleryFotosCurrent : fotoId;
	callback = (typeof callback == 'undefined') ? getThumbnailsCallbackMove : callback;
	
	$.getJSON(
		galleryThumbnailsJsonUrl,
		{
			operation: "getThumbnails",
			gallery_id: galleryId,
			branch_id: branchId,
			foto_id: fotoId
		},
		callback
	);
}

/**
 * Перемещает превью по нужной фотографии или текущей фото. 
 */
function getThumbnailsCallbackMove(data){
	var neededId = data.main;
	var lastId = 0;
	$.each(data.fotos, function(i,foto){
		if(galleryThumbnailsLeftId == 0){
			galleryThumbnailsLeftId = foto.id;
		}
		lastId = foto.id;
		
		if(galleryThumbnailsRightId < foto.id){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			$('#gallery-thumbnails-tr').append(getThumbnailHtml(foto.id, foto.thumbnail));
		} else if(foto.id < galleryThumbnailsLeftId){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			$('#gallery-thumbnails-tr').prepend(getThumbnailHtml(foto.id, foto.thumbnail));
		}
		
	});
	galleryThumbnailsRightId = lastId;
	
	CSBfleXcroll('gallery-thumbnails-box');
}

/**
 * Перемещает превью по нужной фотографии или текущей фото. 
 */
function getNextThumbnails(fromJson){
	fromJson = (typeof fromJson == 'undefined') ? 0 : fromJson;
	if(galleryThumbnailsJson == 0)
	{
		if(galleryThumbnailsRightId < galleryFotosCount){
			galleryThumbnailsJson = 1;
			getThumbnails(galleryThumbnailsRightId, getThumbnailsCallbackNext);
		}
	} else if(fromJson == 1){
		galleryThumbnailsJson = 0;
	}
}

function getThumbnailsCallbackNext(data){
	var lastId = 0;
	var rightThumbnails = "";
	var leftThumbnails = "";
	
	$.each(data.fotos, function(i,foto){
		lastId = foto.id;
		
		if(galleryThumbnailsRightId < foto.id){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			rightThumbnails = rightThumbnails + getThumbnailHtml(foto.id, foto.thumbnail);
		} else if(foto.id < galleryThumbnailsLeftId){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			leftThumbnails = leftThumbnails + getThumbnailHtml(foto.id, foto.thumbnail);
		}
		
	});
	$('#gallery-thumbnails-tr').append(rightThumbnails);
	$('#gallery-thumbnails-tr').prepend(leftThumbnails);
	galleryScroll.scrollUpdate();
	galleryThumbnailsRightId = lastId;
	getNextThumbnails(1);
}

/**
 * Перемещает превью по нужной фотографии или текущей фото. 
 */
function getPrevThumbnails(fromJson){
	fromJson = (typeof fromJson == 'undefined') ? 0 : fromJson;
	if(galleryThumbnailsJson == 0)
	{
		if(galleryThumbnailsLeftId > 1){
			galleryThumbnailsJson = 1;
			getThumbnails(galleryThumbnailsLeftId, getThumbnailsCallbackPrev);		
		}
	} else if(fromJson == 1){
		galleryThumbnailsJson = 0;
	}
}

function getThumbnailsCallbackPrev(data){
	var firstId = 0;
	var rightThumbnails = "";
	var leftThumbnails = "";
	$.each(data.fotos, function(i,foto){
		if(firstId == 0){
			firstId = foto.id;
		}
		
		//galleryFotosThumbnails[foto.id] = foto.width;

		if(galleryThumbnailsRightId < foto.id){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			rightThumbnails = rightThumbnails + getThumbnailHtml(foto.id, foto.thumbnail);
		} else if(foto.id < galleryThumbnailsLeftId){
			galleryThumbnailsWidth = galleryThumbnailsWidth + 130;
			leftThumbnails = leftThumbnails + getThumbnailHtml(foto.id, foto.thumbnail);
		}
	});
	$('#gallery-thumbnails-tr').append(rightThumbnails);
	$('#gallery-thumbnails-tr').prepend(leftThumbnails);
	galleryScroll.scrollUpdate();
	galleryThumbnailsLeftId = firstId;
	getPrevThumbnails(1);
}

function getThumbnailHtml(id, url){
	return '<td id="gallery-thumbnail-id-' + id + '"><a href="javascript:getFoto(' + id + ');"><img src="' + url + '" alt="" /></a></td>';
}

function checkThumbnailMove(pos)
{
	$moveTo = (galleryFotosCurrent-1)*130+65-314;
	$maxMove = (galleryFotosCount)*130+65-661;
	if(pos > -(130*3)){
		if(galleryThumbnailsJson == 0)
		{
			getPrevThumbnails();
		}
	}
	else if(pos < ((-galleryThumbnailsWidth)+661+(130*2))){
		if(galleryThumbnailsJson == 0)
		{
			getNextThumbnails();
		}
	}
}

function unsetCurrentThumbnail()
{
	 $("#gallery-thumbnail-id-"+galleryFotosCurrent).attr("class", "");
}

function setCurrentThumbnail()
{
	 $("#gallery-thumbnail-id-"+galleryFotosCurrent).attr("class", "selected");
}