var $ = jQuery.noConflict();

function trimTitle(title)
{
    if (title.length<40) {
        return title;
    }
    return title.replace(/^(.{30}[^\s])(.*?)$/, "$1...");
}

function gallery(divId){
    var rel = $("#"+divId).attr('rel');
    var match = rel.match(/^([^\|]+)\|?(.*)$/);
    var url = match[1];

    var tmpParams = match[2].split('|');
    var params = new Array();
    for ( i = 0 ; i < tmpParams.length ; i=i+2 ) {
        params[tmpParams[i]] = tmpParams[i+1];
    }

    $.get(url, null, function(data){
        if (data == false || data == 'false') {
            $("#"+divId).remove();
            return;
        }
        $("#"+divId).append($('<div class="gallery_navigator"></div>'));
        $("#"+divId).append($('<div class="gallery_content"></div>'));
        //$("#"+divId).append($('<div class="gallery_paginator"></div>'));
        $("#"+divId).append($('<div class="clear"></div>'));

        var myGallery = new _photoGallery(data['title'],data['id'],divId);

        if (window.location.pathname.match(/gid\/\d+/)) {
            myGallery.elemsPerPage = 12;
        }

        if( params != undefined ){
            if (params['elemsPerPage'] != undefined) { 
                myGallery.elemsPerPage = params['elemsPerPage'];
            }
        }
        for ( var i in data['categories'] ) {
            myGallery.addCategory( data['categories'][i]['title'] );
            for ( var j in data['categories'][i]['photos'] ) {
                var photo = data['categories'][i]['photos'][j];
                myGallery.categories[myGallery.categories.length - 1].addPhoto(photo['title'],photo['desc'],photo['img']);
            }
        }
        for ( var i in data['photos'] ) {
            var photo = data['photos'][i];
            myGallery.addPhoto(photo['title'],photo['desc'],photo['img']);
        }
        myGallery.render();
    }, 'json');
}

function _photoGallery(title, galleryId, divId){
    this.title = title;
    this.categories = new Array();
    this.galleryId = galleryId;
    this.divId = divId;
    this.photos = new Array();
    this.elemsPerPage = 3;
    this.elemsPerRow = 3;
    this.page = 1;
    this.addCategory = function(title){
        this.categories[this.categories.length] = new _photoCategory(title, this);
    }
    this.addPhoto = function(title,desc,img){
        this.photos[this.photos.length] = new _photo( title, desc, img, this.galleryId );
    }
    this.countPages = function(){
        return Math.ceil( (this.categories.length + this.photos.length) / this.elemsPerPage );
    }
    this.render = function(){
       // $("#"+this.divId+" .gallery_navigator").html('<h2>'+this.title+'</h2>');
        //$("#"+this.divId+" .gallery_paginator").html('');
        $("#"+this.divId+" .gallery_content").html('');
        //_paginator(this);
        var html = $('<ul></ul>');
        for( var i = (this.page - 1)*this.elemsPerPage ; i < this.page * this.elemsPerPage ; i++ ) {
            if ( i < this.categories.length ) {
                html.append(this.categories[i].representation());
            } else {
                var j = i - this.categories.length;
                if ( j < this.photos.length ) {
                    html.append($(this.photos[j].html));
                } else {
                    $("#"+this.divId+" .gallery_content").append(html);
                    newPaginator( this, html );
                    return;
                }
            }
        }
        newPaginator( this, html );
        $("#"+this.divId+" .gallery_content").append(html);
        //$("#"+this.divId+" .gallery_content").html(html);
        return;
    }
}
function _photoCategory(title, gallery){
    this.title = title;
    this.photos = new Array();
    this.gallery = gallery;
    this.divId = gallery.divId;
    this.page = 1;
    this.countPages = function(){
        return Math.ceil( this.photos.length / this.gallery.elemsPerPage );
    }
    this.representation = function(){
        if ( this.photos.length == 0 ) return '';
        var i = Math.floor( Math.random() * this.photos.length );
        if ( i >= this.photos.length) {
            i = this.photos.length-1
            }
        var photoRepresentation = this.photos[i];
        var a = $('<a href="#"></a>');
        var category = this;
        var img = $('<img border="0" width="150" src="/files/gallery/'+this.gallery.galleryId+'/min/'+photoRepresentation.img+'" />');
        var folder = $('<img border="0"  width="150" src="/layouts/admin/images/directory.png" class="category_folder" />');
        //var imgFolder = $('<img border="0" src="/layouts/admin/images/directory.png" style="background:url(/files/gallery/'+this.gallery.galleryId+'/min/'+photoRepresentation.img+'); width:75px; height:75px;"/>');
        a.click(function(){
            $(this).stop();
            category.page = 1;
            category.render();
            return false;
        });
        var div = $('<div class="gallery_category"></div>');
        var li = $('<li class="rep">');
        a.append(img);
        a.append(folder);
        //a.append(imgFolder);
        div.append(a);
        div.append($('<div class="gallery_category_title">'+trimTitle(this.title)+'</div>'));
        if (this.desc != undefined) div.append($('<div class="gallery_category_desc">'+this.desc+'</div>'));
        li.append(div);
        return li;
    }
    this.render = function(){
        $("#"+this.gallery.divId+" .gallery_navigator").html('');
        //$("#"+this.gallery.divId+" .gallery_paginator").html('');
        $("#"+this.gallery.divId+" .gallery_content").html('');
        var html = $('<ul></ul>');
        $("#"+this.gallery.divId+" .gallery_content").append(html);
        var title = $('<span>&nbsp;&nbsp;&raquo;&nbsp;&nbsp;'+this.title+'</span>');
        var link = $('<a href="#"></a>');
        link.text(this.gallery.title);
        var gallery = this.gallery;
        link.click(function(){
            $(this).stop();
            gallery.render();
            return false;
        })
        $("#"+this.gallery.divId+" .gallery_navigator").append(link);
        $("#"+this.gallery.divId+" .gallery_navigator").append(title);
        //_paginator(this);
        for( var i = (this.page-1)*this.gallery.elemsPerPage ; i < this.page * this.gallery.elemsPerPage; i++  ) {
            if ( i < this.photos.length ) {
                html.append( $(this.photos[i].html) );
            } else {
                newPaginator( this, html );
                return;
            }
        }
        newPaginator( this, html );
    }
    this.addPhoto = function(title,desc,img){
    this.photos[this.photos.length] = new _photo( title, desc, img, this.gallery.galleryId );
    }
    }
function _photo(title,desc, img, galleryId){
    this.title = title;
    this.desc = desc;
    this.img = img;
    this.galleryId = galleryId;
    this.html = '<li class="p"><div class="gallery_photo"><a title="'+this.title+"\n"+this.desc+'" rel="lightbox[]" href="/files/gallery/'+this.galleryId+'/full/'+this.img+'"><img  width="150" border="0" src="/files/gallery/'+this.galleryId+'/min/'+this.img+'" /></a><div class="gallery_photo_title">'+trimTitle(this.title)+'</div></div></li>';
}

function _paginator(item)
{
    if( item.countPages() > 1 ) {
        var paginator = $("#"+item.divId+" .gallery_paginator");
        paginator.html('');
        for( var i = 1 ; i<=item.countPages(); i++ ) {
            if ( i == item.page ) {
                var el = $('<span>'+i+'</span>');
            } else {
                var el = $('<a href="#">'+i+'</a>');
                var gallery = item;
                el.click(function(){
                    $(this).stop();
                    gallery.page = parseInt($(this).text());
                    gallery.render();
                    return false;
                })
            }
            paginator.append(el);
        }
        if (item.page > 1) {
            var el = $('<a href="#">&laquo;</a>');
            var gallery = item;
            el.click(function(){
                $(this).stop();
                gallery.page = gallery.page-1;
                gallery.render();
                return false;
            });
            el.insertBefore(paginator.children(":first"));
        }
        if (item.page < item.countPages()) {
            var el = $('<a href="#">&raquo;</a>');
            var gallery = item;
            el.click(function(){
                $(this).stop();
                gallery.page = gallery.page+1;
                gallery.render();
                return false;
            });
            el.insertAfter(paginator.children(":last"));
        }
        paginator.children(":last").attr('style','border:0;');

    } else {
        $("#"+item.divId+" .gallery_paginator").hide();
    }
}

function newPaginator( e , ul )
{

    if ( e.page > 1 ) {
        var a = $('<a href="#" class="a_paginator"><img src="/layouts/tm_aktualnosci/img/back.jpg" /></a>')
        var ali = $('<li></li>')
        a.click(function(){$(this).stop(); e.page = e.page-1;e.render();return false;})
        ali.append(a)
        ul.prepend(ali);
    }

    if ( e.page < e.countPages() ) {
        var b = $('<a href="#"  class="a_paginator"><img src="/layouts/tm_aktualnosci/img/more_st.jpg" /></a>')
        var bli = $('<li></li>')
        b.click(function(){$(this).stop();e.page = e.page+1;e.render();return false;})
        bli.append(b);
        ul.append(bli);
    }
}
