var imgInfoArray = Array();
var thumbsOnPage  = 50;

/*************
*   JSON request part
**************/
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		document.getElementById("p_status").innerHTML = 
		"Status: Cound not create XmlHttpRequest Object." +
		"Consider upgrading your browser.";
	}
}

var receiveReq = getXmlHttpRequestObject();

function getImageCategory(url) {
    receiveReq.open("GET", url, true);
		receiveReq.onreadystatechange = function(){
        if(receiveReq.readyState == 4)
        {
          $.reorganizePhotoes(receiveReq.responseText);
        }
    }
		receiveReq.send(null);
}
/*************************************************
 *  Gallery init
 ************************************************/
$.initThumbEvents = function(){                                                                                       
    $("#ldg-thumbs ul li a img").click(function(){
        $("#ldg-thumbs ul li a img").removeClass("act");
        $(this).addClass("act");
        var newsrc = $(this).attr("src").split("thumb").join("preview");
        
        if (hasNext($(this).parent().parent()))
		        $("#ldg-image-n").css('display','block');
		    else
		        $("#ldg-image-n").css('display','none');

		    if (hasPrev($(this).parent().parent()))
		        $("#ldg-image-b").css('display','block');
		    else
		        $("#ldg-image-b").css('display','none');
        
        $.loadMainPhoto(newsrc);
        
        $.initZoomButton();
        $("a.lightsGal").zoomimage({
            border: 20,
        	centered: true,
        	hideSource: true
        });
        
        $.initInfoButton();
        $.commentsRequest(newsrc);
		
		//center active thumb
		/*
		var newScrollerPos = -($('#ldg-thumbs ul li a img.act').position().left - $('#ldg-thumbs-wrapper').width()/2 + $('#ldg-thumbs ul li a img.act').width()/2);
		if(newScrollerPos > 0)
			$('#ldg-thumbs-container ul').animate({ left: 0 }, "slow");
		else if (newScrollerPos < -($('#ldg-thumbs-container ul').width() - $('#ldg-thumbs-wrapper').width()))
			$('#ldg-thumbs-container ul').animate({ left: -($('#ldg-thumbs-container ul').width() - $('#ldg-thumbs-wrapper').width()) }, "slow");	       
		else
			$('#ldg-thumbs-container ul').animate({ left: newScrollerPos }, "slow");
    */
		});
}

$.initCommonEvents = function(){
    $("#ldg-toggler").click(function(){
        $("#ldg-categorieslist-content").slideToggle("slow");
    });
    //nextImg
		$("#ldg-image-n").click(function(){
    	var currentLi = $("#ldg-thumbs ul li a img.act").parent().parent();
        if (hasNext(currentLi))
            currentLi.next().find("a img").click();
    });
    
    //lastImg
    $("#ldg-image-b").click(function(){
    	var currentLi = $("#ldg-thumbs ul li a img.act").parent().parent();
        if (hasPrev(currentLi))
            currentLi.prev().find("a img").click();
    });
    //hide categories on link click
    $("#ldg-categorieslist ul li a").click(function(){  
      $("#ldg-toggler").click();
      //$("#ldg-categorieslist ul li a").css("text-decoration", "none").css("font-weight", "normal");
      $("#ldg-categorieslist ul li a").removeClass("actCat");
      $(this).addClass("actCat");
      
      $("#ldg-topstring span").empty().text($(this).text());
    });
    
    $("#ldg-imageinfo").click(function(){
        $("#ldg-photo-info").slideToggle("slow");
    });
}


/*************************************************
 *  Gallery manipulations after changing category
 ************************************************/
$.reorganizePhotoes = function(response){
    
    var loadedThmbCount = 0;
    
    var newFirstImage = $.evalJSON(response).galleryData.firstCatImage;
    var thumbsArray = $.evalJSON(response).galleryData.categoryElements;
		var elementsCount = $.evalJSON(response).galleryData.elementsCount;
		var galleryDataString = $.evalJSON(response).galleryData.galleryDataString;
		var currentPage = $.evalJSON(response).galleryData.currentPage;
    $.loadMainPhoto(newFirstImage);
    //rewrite thumbs
    $("#ldg-thumbs-wrapper ul li").remove();
    $("#ldg-pagination").html('');
    $.each(thumbsArray, function(i, n){
        $('<li><a href="#" onclick="return false;"><img src="'+thumbsArray[i]["thumb_img"]+'" alt="" /></a></li>').appendTo("#ldg-thumbs-wrapper ul");
        //init thumb scroll only after all images fully loaded (ctrl+f5 bug in mozilla)        
        $('<img src="'+thumbsArray[i]["thumb_img"]+'" alt="" />').load(function(){    
                loadedThmbCount++;
                /*
                if(loadedThmbCount == thumbsArray.length){
                    $.initThumbScroll();
                }
                */
        });
       
        imgInfoArray[i] = thumbsArray[i]["info_img"]; 
    });        

    $("#ldg-thumbs ul li:first-child a img").addClass("act");     
    $.initThumbEvents();
    $.initInfoButton();
    $.initZoomButton();
    $("a.lightsGal").zoomimage({
        border: 20,
    	centered: true,
    	hideSource: true
    });

		if (Math.floor(elementsCount/thumbsOnPage) > 0)
      $.initPagination(Math.floor(elementsCount/thumbsOnPage), galleryDataString, currentPage);

		if (hasNext($('img.act').parent().parent()))
        $("#ldg-image-n").css('display','block');
    else
        $("#ldg-image-n").css('display','none');

    if (hasPrev($('img.act').parent().parent()))
        $("#ldg-image-b").css('display','block');
    else
        $("#ldg-image-b").css('display','none');

    $.commentsRequest(newFirstImage); 
}

var nextImage; 

$.loadMainPhoto = function (targetPhoto) {
        nextImage = targetPhoto;
		$('#ldg-loader').addClass('loading');
        $("#ldg-photo-info").hide();
        $("#bigimg").fadeOut("slow", function(){
                $(this).attr('src', nextImage).load(function ()
                    {
                        $(this).fadeIn("slow", function(){
                            $('#ldg-loader').removeClass('loading');
                            $("#ldg-photo-info").css("width",($("#bigimg").width() + 4));
                            $("#ldg-photo-info").css("bottom","-2px");
                            
                            $("#ldg-photo-info").css("margin-left",-(($("#bigimg").width()/2)+2));
                        });
                    });

                    if ($(this)[0].complete){
                        $(this).load();
                    };
            });
}

$.initPagination = function(pageCount, galleryDataString, currentPage){
		$("#ldg-pagination").html('<span>&nbsp;|&nbsp;</span>');
		for (i=0;i<=pageCount;i++){
			if (currentPage == (i+1))
			  activeClass = ' class="active"';
			else
			  activeClass = '';

			$('<a'+activeClass+' href="javascript:getImageCategory(\''+galleryDataString+'&page='+(i+1)+'\');">'+(i+1)+'</a><span>&nbsp;|&nbsp;</span>').appendTo("#ldg-pagination");
		}
}

/*************************************************
 *  Zoom and info buttons init
 ************************************************/
$.initZoomButton = function(){    
    currentZoomedImg = $("#ldg-thumbs ul li a img.act").attr("src").split("thumb").join("zoomed"); 
    $("#ldg-imagezoom").attr("href", currentZoomedImg);
}

$.initInfoButton = function(){
    var count = 0;
    var currentActive = $("#ldg-thumbs-wrapper ul li a img.act").parent().parent();
    
        
    while (hasPrev(currentActive)){
        currentActive = currentActive.prev();
        count++;
    }
    
    $("#ldg-photo-info p").html(imgInfoArray[count]);         
}

/*************************************************
 *  Thumbs scroll issues
 ************************************************/
$.initThumbScroll = function(){
    $('#ldg-thumbs-container ul').css('left', 0);
    setScrollerDimensions();
            
    $('#ldg-thumbs-right').hover(        
        function() {
            if (hidden > 0) {
    			var current = getLeft();
                $('#ldg-thumbs-container ul').animate({ left: -hidden }, Math.abs(-current - hidden) * 3);
    		}
    	},
    	function() {
    		$('#ldg-thumbs-container ul').stop();
    	}
    );
    
    $('#ldg-thumbs-left').hover(        
        function() {
            if (hidden > 0) {
    			var current = getLeft();
                $('#ldg-thumbs-container ul').animate({ left: "0" }, Math.abs(current) * 3);
    		}
    	},
    	function() {
    		$('#ldg-thumbs-container ul').stop();
    	}
    );
}

function getLeft() {
	var left = $('#ldg-thumbs-container ul').css('left');
	return trimPx(left);
}

function trimPx(value) { 
    var pos = value.indexOf("px");
	if (pos != 0)
		return parseInt(value.substring(0, pos));
	else
		return 0;
}

function getWidth(id) {
	var width = $(id).width();
	return width;
}

var container;
var content;
var hidden;

function setScrollerDimensions() {
	container = getWidth("#ldg-thumbs-wrapper");
	content = getWidth("#ldg-thumbs-container ul");
	hidden = content - container;
	
	//alert(container+'--'+content+'--'+hidden);
}

$.resetThumbScroll = function() {
	setScrollerDimensions();
	$('#ldg-thumbs-container ul').css('left', 0);
}

/*************************************************
 *  Comments
 ************************************************/
$.submitComment = function(url) {    
    
    commentData = '{"imgPath": "'+$("#bigimg").attr("src").split(document.getElementsByTagName('base')[0].href).join("")+'","commentContent":"'+$("#commentContent").val()+'","commentAuthor":"'+$("#commentAuthor").val()+'","commentCity":"'+$("#commentCity").val()+'"}';

    $.postComment(url,commentData); 
}

var commentReceiveReq = getXmlHttpRequestObject();

$.postComment = function(url, json) {    
    var jsonStr = "jsonStr="+json;
    
    commentReceiveReq.open("POST", url, true);
    
    commentReceiveReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    commentReceiveReq.setRequestHeader("Content-length", jsonStr.length);
    commentReceiveReq.setRequestHeader("Connection", "close");
    
	commentReceiveReq.onreadystatechange = function(){
        if(commentReceiveReq.readyState == 4)
        {
            $("#commentContent").val("Skriv din kommentar til det viste foto");
            $.commentsRequest($("#bigimg").attr("src"));
        }
    }
    commentReceiveReq.send(jsonStr);
}

var postedCommentsReq = getXmlHttpRequestObject();

$.commentsRequest = function(imagePathId){
    var url = $("#ldg-categorieslist ul li a.actCat").attr("href").split("javascript:getImageCategory('").join("").split("&cmd=getcatinfo');").join("")+'&cmd=getcomments';
    
    //disable thumb events till request completes
    $("#ldg-thumbs ul li a img").unbind("click");
    $.makeNPinactive();
    
    $("#ldg-content-holder").fadeOut("", function(){
        $("#ldg-posted-comments-loader").fadeIn("", function(){
                postParam = "imgId="+ imagePathId.split("generated/preview_").join("").split(document.getElementsByTagName('base')[0].href).join("");
                postedCommentsReq.open("POST", url, true);
                postedCommentsReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                postedCommentsReq.setRequestHeader("Content-length", postParam.length);
                postedCommentsReq.setRequestHeader("Connection", "close");
                postedCommentsReq.onreadystatechange = function(){
                    if(postedCommentsReq.readyState == 4)
                    {
                      $.showPostedComments(postedCommentsReq.responseText);
                    }
                }
            	postedCommentsReq.send(postParam);
            });
        });   
}

$.showPostedComments = function(response){
	var respArray = $.evalJSON(response);    
    $("#ldg-posted-comments #ldg-posted-comments-content").html('');
    if (respArray.no_comments){
        $("#ldg-posted-comments #ldg-posted-comments-header").css('display','none');
        
        $("<p><i>"+respArray.no_comments+"</i></p>").appendTo("#ldg-posted-comments #ldg-posted-comments-content");
    }
    else {
        $("#ldg-posted-comments #ldg-posted-comments-header").css('display','block');
        
        $.each(respArray, function(i, n){
            $('<div id="ldg-comment-unit"><p class="author">'+respArray[i].commentAuthor+'</p><p class="info">'+respArray[i].commentCity+'</p><p class="content">'+respArray[i].commentContent+'</p></div>').appendTo("#ldg-posted-comments #ldg-posted-comments-content");
        });
    }
    
    $("#ldg-posted-comments-loader").fadeOut("", function(){$("#ldg-content-holder").toggle("slow", function(){ $.initThumbEvents(); $.makeNPactive();});});
}

$.makeNPinactive = function(){
	$('#ldg-image-b').css('opacity', 0.3);
	$('#ldg-image-n').css('opacity', 0.3);
	$('#ldg-thumbs-container ul').addClass('cont-loading');
}

$.makeNPactive = function(){
	$('#ldg-image-b').css('opacity', 0.8);
	$('#ldg-image-n').css('opacity', 0.8);
	$('#ldg-thumbs-container ul').removeClass('cont-loading');
}

/*************************************************
 *  Upload form
 ************************************************/
 
$.showUploadForm = function(){
    $("#ldg-upload-link").hide("slow", function(){$("#ldg-upload-form").show("slow")});
    
    $('#lbg-upload-btn').click(function(){
            var $filesHolder = $('#MultiFile1_wrap_list'); 
            
            if( $filesHolder[0] && $filesHolder[0].firstChild && $("#lbg-upl-cat-name").val() != "")
                return true;
            else{
                $('#ldg-upl-error').show("slow");
                return false;
            }
        });
}

//-----
function hasNext( jQueryObject ) { return jQueryObject.next().length != 0; }
function hasPrev( jQueryObject ) { return jQueryObject.prev().length != 0; }
