function photoGallerySetup(){
    //lightbox open listener
    $("#photo-gallery .gallery-thumbnail, #photo-gallery .gallery-item h4 a").live('click',function(){
        gpShowLargeContent(this);
        return false;
    });
    //lightbox close listener
    $("#photo-gallery-lightbox .gallery-lightbox-close").click(function(){
        gpHideLargeContent();
        return false;
    });
    //lightbox prev listener
    $("#photo-gallery-lightbox .gallery-lightbox-prev").click(function(){
        gpPrevLargeContent();
        return false;
    });
    //lightbox next listener
    $("#photo-gallery-lightbox .gallery-lightbox-next").click(function(){
        gpNextLargeContent();
        return false;
    });
    //setup pagination
    gpCreatePagination();
    //show/create first page
    gpShowPage(1);
}

function gpShowLargeContent(targ) {
    var contentIndexHash=String($(targ).attr('href'))
    var contentPosHash=contentIndexHash.indexOf("#");
    if(contentPosHash>=0){
        contentIndexHash=contentIndexHash.substr(contentPosHash);
    }
    var contentIndex=Number(contentIndexHash.substr(1,contentIndexHash.length-1));
    //set content
    gpSetLargeContent(contentIndex);
    //fade in
    $("#photo-gallery-lightbox").fadeIn(750);
}

function gpSetLargeContent(itemIndex) {
    gpItemIndexCur=itemIndex;
    //set content
    $("#photo-gallery-lightbox .gallery-lightbox-content").html(gpItems[itemIndex].content);
}

function gpPrevLargeContent() {
    if(gpItemIndexCur>0){
        gpItemIndexCur=gpItemIndexCur-1;
    }else{
        gpItemIndexCur=gpItems.length-1;
    }
    gpSetLargeContent(gpItemIndexCur);
}

function gpNextLargeContent() {
    if(gpItemIndexCur<gpItems.length-1){
        gpItemIndexCur=gpItemIndexCur+1;
    }else{
        gpItemIndexCur=0;
    }
    gpSetLargeContent(gpItemIndexCur);
}

function gpHideLargeContent() {
    $("#photo-gallery-lightbox").fadeOut(300);
}

function gpShowPage(pageNum) {
    gpPageNumCur=pageNum;
    //update pagination
    gpUpdatePagination(pageNum);
    //does page exist?
    if($("#photo-gallery-page-"+pageNum).length==0){
        //page doesnt exist, create
        gpCreatePage(pageNum);
    }
    //hide current content
    var pageWrapper=$("#photo-gallery .gallery-pages");
    pageWrapper.fadeOut(500,function(){
        //set position
        var newXPos=0-((pageNum-1)*gpPageWidth);
        pageWrapper.css({
            left:newXPos+'px'
            })
        pageWrapper.fadeIn(500);
    });
}

function gpCreatePage(pageNum) {
    var pageIndex=pageNum-1;
    var pagePosX=pageIndex*gpPageWidth;
    var itemIndexStart=pageIndex*gpItemsPP;
    var itemIndexStop=Math.min(gpItems.length-1,itemIndexStart+gpItemsPP);
    //create content
    var itemStr='<div class="gallery-page" id="photo-gallery-page-'+pageNum+'" style="left:'+pagePosX+'px">';
    for(var i=itemIndexStart;i<=itemIndexStop;i++){
        itemStr+='<div class="gallery-item photo-gallery-item">';
        itemStr+='<a class="gallery-thumbnail" href="#'+i+'"><img src="'+gpItems[i].thumb+'" /></a>';
        itemStr+='</div>';
    }
    itemStr+='<div class="gallery-list-end"></div>';
    itemStr+='</div>';
    //create element
    $("#photo-gallery .gallery-pages").append(itemStr);
}

function gpUpdatePagination(newPageNum) {
    //update paging left
    if(newPageNum>1){
        $("#photo-gallery-pagination li .page-left").parent('li').show();
    }else{
        $("#photo-gallery-pagination li .page-left").parent('li').hide();
    }
    //update paging right
    if(newPageNum<gpPageNumMax){
        $("#photo-gallery-pagination li .page-right").parent('li').show();
    }else{
        $("#photo-gallery-pagination li .page-right").parent('li').hide();
    }
    //unset old active page
    $("#photo-gallery-pagination li a").removeClass('active');
    //set new active page
    $("#photo-gallery-pagination li a.page-num-"+newPageNum).addClass('active');
}

function gpCreatePagination() {
    var pageNums=Math.ceil(gpItems.length/gpItemsPP);
    if(pageNums>1){
        //create pagination content
        var pStr='';
        for(var p=1;p<=pageNums;p++){
            pStr+='<li><a class="page-num page-num-'+p+'" href="#'+p+'">'+p+'</a></li>';
            //update max page number
            gpPageNumMax=p;
        }
        //create pagination elements
        $("#photo-gallery-pagination li").first().after(pStr);
        //setup click event
        $("#photo-gallery-pagination li a").click(function(){
            gpClickPage(this);
            return false;
        });
    }else{
        $("#photo-gallery-pagination").hide();
    }
}

function gpClickPage(targ) {
    var el=$(targ);
    var newPageNum=0;
    if(el.hasClass('page-left')){
        //prev
        newPageNum=gpPageNumCur-1;
    }else if(el.hasClass('page-right')){
        //next
        newPageNum=gpPageNumCur+1;
    }else{
        //number
        var pageHash=String(el.attr('href'))
        var contentPosHash=pageHash.indexOf("#");
        if(contentPosHash>=0){
            pageHash=pageHash.substr(contentPosHash);
        }
        newPageNum=Number(pageHash.substr(1,pageHash.length-1));
    }
    //within bounds?
    if(newPageNum>=1 || newPageNum<=gpPageNumMax){
        gpShowPage(newPageNum);
    }
}
