var images = null;
var imagesAP = null;
var curriculumScroll = null;

var imagesNavigator = function (selector) {
    this.images = $(selector + ' img');
    this.length = this.images.length;
    this.current = 0;
    if (this.length > 1) this._createNavigator();
};

imagesNavigator.prototype = {
    _createNavigator:function() {
        var tHtml = $('#photosNavigator');
        var beforeLink = $('<img/>');
        var _self = this;
        beforeLink.attr('src', base_url + '/design/images/aLeft.gif');
        beforeLink.attr('alt', 'Imagen anterior');
        beforeLink.attr('title', 'Imagen anterior');
        beforeLink.click(function() {
            _self.showBefore();
        });
        beforeLink.appendTo(tHtml);

        var nextLink = $('<img/>');
        nextLink.attr('src', base_url + '/design/images/aRight.gif');
        nextLink.attr('alt', 'Imagen siguiente');
        nextLink.attr('title', 'Imagen siguiente');
        nextLink.click(function() {
            _self.showNext();
        });

        nextLink.appendTo(tHtml);
    },
    showNext:function () {
        if (this.current + 1 < this.length) {
            this.current++;
            this._showCurrent();
        }
    },
    showBefore:function() {
        if (this.current - 1 >= 0) {
            this.current--;
            this._showCurrent();
        }
    },
    _showCurrent:function() {
        this.show(this.current);
    },
    show:function(i) {
        $(this.images).hide();
        $(this.images[i]).show();
    }
};

function prepareLinks(container, activeFirst) {
    if (activeFirst) $(container + ' a:first').addClass("linkSelected");
    $(container + ' a').click(function() {

        $(container + ' a').removeClass("linkSelected");
        $(this).addClass("linkSelected");
        $(this).blur();
    });
}

function clearLinks(box) {
    $(box + ' a').removeClass("linkSelected");
}

function clearSelectedProject() {
    clearLinks('#projectsBox');
}

function clearSelectedCategories() {
    clearLinks('#categoriesBox');
}

function clearSelectedTeamMember() {
    clearLinks('#teamMidBox');
}

function setBackgroundColor(element, color) {
    $(element).css({background: color });
}

function clearProjects() {
    $('#projectsBox').empty();
}

function hideAllImagesGeneric(selector) {
    images = $(selector + ' img');
    images.hide();
    return images;
}

function hideAllImagesAP() {
    imagesAP = hideAllImagesGeneric('#centerBoxPA');
    imagesNavigator.current = -1;
}

/*function clearNavigatorSelection() {
 $('#photosNavigator a').removeClass('selected');
 } */

function clearCenterPanel() {
    $('#centerPanel').empty();
}

/*function showImageAP(imgNumber) {
 hideAllImagesAP();
 // clearNavigatorSelection();
 if (imagesAP.size() > 0) {
 $(imagesAP[imgNumber]).show();
 var imgLink = $('#photosNavigator a');
 imgLink.blur();
 imagesNavigator.current = imgNumber;
 }
 }
 */

function openFirstProject() {
    var firstProject = $('#projectsBox a:first');
    if (firstProject != undefined) {
        eval(firstProject.attr('href'));
    }
}


function loadProjects(url) {
    clearProjects();
    $.get(url, function(data) {
        $('#projectsBox').html(data);
        new ScrollablePanel("PScrollBox", "#projectsBox");
        prepareLinks('#projectsBox', true);
        openFirstProject();
    });
}

function loadProject(url) {
    clearCenterPanel();
    $.get(url, function(data) {
        $('#centerPanel').html(data);
        //showImageAP(0);
        new imagesNavigator("#centerBoxPA");
    });
}

function loadServicesAP(url) {
    clearCenterPanel();
    $.get(url, function(data) {
        $('#centerPanel').html(data);
        clearSelectedCategories();
        clearProjects();
    });
}

function loadProjectCR(url) {
    clearCenterPanel();
    $.get(url, function(data) {
        $('#centerPanel').html(data);
        new imagesNavigator("#centerBoxPA");
        //showImageAP(0);
    });
}

function loadServicesCR(url) {
    $.get(url, function(data) {
        $('#centerPanel').html(data);
        clearSelectedCategories();
        clearSelectedProject();
    });
}

var nScrollablePanel = new Object();

ScrollablePanel.prototype = {
    initialize : function (name, container, maxP) {
        var max = maxP || 100;
        this.container = $(container);

        if ($(container + " .scrollable-box").length > 0) return false;

        var childs = this.container.contents();

        this.scrollPanel = $('<div/>');
        this.scrollPanel.attr('id', name);
        this.scrollPanel.addClass('scrollable-box');

        this.scrollContent = $('<div/>');
        this.scrollContent.attr('id', name + '-Content');
        this.scrollContent.css({'position':'absolute'});
        this.scrollContent.append(childs);
        this.scrollContent.appendTo(this.scrollPanel);

        this.container.empty();
        this.scrollPanel.appendTo(this.container);

        this._slide = $('<div/>');
        this._slide.attr('id', name + '-slide');
        this.scrollPanel.append(this._slide);

        this._slide.slider(
        {
            orientation: 'vertical',
            value: max,
            max: max,
            animate: true,
            //change:this._move,
            slide:this._move
        });

        var contentHeight = $(this.scrollContent).height();
        contentHeight -= 16;
        var visibleArea = $(this._slide).height();
        var calculateHeight = (contentHeight - visibleArea);

        if (calculateHeight > 0) {
            var relation = calculateHeight / max;
            this.relation = relation;
            this.calculateHeight = calculateHeight;
            this._slide.slider().data("relation", {relation: relation, calculateHeight: calculateHeight, moveElement:"#" + name + "-Content"});
            this.firstTopOffset = $(this.scrollContent).offset().top;
        } else {
            this._slide.slider('destroy');
        }
    },
    _move:function(event, ui) {
        var data = $(this).slider().data("relation");
        var move = Math.round(data.calculateHeight - ( ui.value * data.relation));
        //        var move = Math.round(this._valueToOffset( ui.value * data.relation));
        move *= -1;
        $(data.moveElement).animate({"top": move}, {queue:false, duration:"fast"});
    },
    _valueToOffset:function(value) {
        return this.calculateHeight - (value * this.relation);
    },
    _offsetToValue:function(offset) {
        return (this.calculateHeight - offset) / this.relation;
    },
    moveToPosition:function(element) {
        var elementTop = element.offset().top;
        var needDisplace = this.firstTopOffset - elementTop;
        var currContentTopPos = this.scrollContent.offset().top + 1;
        var moveToOffset = currContentTopPos + needDisplace;
        var value = Math.round(this._offsetToValue(-1 * moveToOffset));
        this._slide.slider('value', value);
        var convertedToTop = moveToOffset - this.firstTopOffset;
        this.scrollContent.animate({"top": convertedToTop}, {queue:false, duration:"fast"});
    }
};

function ScrollablePanel(name, container, max) {
    ScrollablePanel.prototype.initialize(name, container, max);
}

jQuery.fn.extend({
    scroll:ScrollablePanel
});

function teamMembersHide() {
    $("#team").hide();
    $('#teamMidBox').hide();
    $("#teamCurriculumBox").hide();
}

function teamCurriculumHide() {
    $('#curriculum').hide();
    $("#curriculumBox").hide();
}

function teamBiblographyHide() {
    $('#bibliografyBox').hide();
    $('#bibliografy').hide();
}

function loadTeamMembers() {
    teamCurriculumHide();
    teamBiblographyHide();
    clearSelectedTeamMember();
    $('#team').show();
    $('#teamMidBox').show();
}

function loadCurriculum() {   
    teamMembersHide();
    teamBiblographyHide();

    $('#curriculum').show();
    $("#curriculumBox").show();
    new ScrollablePanel("CurYearsScrollBox", "#curriculumBox");
    curriculumScroll = new ScrollablePanel("CurScrollBox", "#curriculumB", 1000);
}

function moveToYear(year) {
    var selecteYearElement = $('a[id="' + year + '"]');
    curriculumScroll.moveToPosition(selecteYearElement);
}

function clearSelectedBibliography() {
    clearLinks('#bibliografyBox');
}

function loadBibliography() {
    teamMembersHide();
    teamCurriculumHide();
    clearSelectedBibliography();
    prepareLinks("#bibliografyBox", true);
    $("#bibliografyBox").show();
    $("#bibliografy").show();
    loadPublications();
}

function hideBiblography() {
    $("#bibliografy").hide();
}

function hideAllBiblography() {
    $("#bibliografy > div").hide();
}

function loadPublications() {
    hideAllBiblography();
    $("#publications").show();
    new ScrollablePanel("pubScrollBox", "#publications");
}

function loadCatalogs() {
    hideAllBiblography();
    $("#catalogs").show();
    new ScrollablePanel("catScrollBox", "#catalogs");
}

function loadTvShow() {
    hideAllBiblography();
    $("#tvPrograms").show();
    new ScrollablePanel("tvScrollBox", "#tvPrograms");
}

function loadWebSites() {
    hideAllBiblography();
    $("#websites").show();
    new ScrollablePanel("webScrollBox", "#websites");
}

function sendEmail() {
    $.ajax({
        type: "POST",
        url: base_url + "index.php/contacts/sendMail",
        data:{
            empresa: $("#empresa").val(),
            de: $("#de").val(),
            email: $("#email").val(),
            subject: $("#subject").val(),
            telefono: $("#telefono").val(),
            message: $("#message").val()
        },
        dataType:"json",
        success: function(data) {
            showMessage(data);
        }
    });
}

function showMessage(errorObject) {
    var xclass = "";
    var xHtml = '<div class="';
    xclass = errorObject.hasError == "true" ? "errorDialog" : "goodDialog";
    xHtml += xclass + '">';
    xHtml += '<h1>' + errorObject.title + '</h1>';
    xHtml += '<div class="body">' + errorObject.body + '</div>';
    $.modal(xHtml);
}

function showMessage1(errorObject) {
    var xclass = "";
    xclass = errorObject.hasError == "true" ? "errorDialog" : "goodDialog";

    var xHtml = $('<div/>');
    xHtml.addClass(xclass);

    var xTitle = $('<h1/>');
    xTitle.text(errorObject.title);
    xTitle.appendTo(xHtml);

    var xBody = $('<div/>');
    xBody.addClass('body');
    xBody.text(errorObject.body);
    xBody.appendTo(xHtml);

    $.modal(xHtml);
}

function createAuthorsList(category, authors) {
    var tHtml = $('<ul/>');
    tHtml.addClass('manifest');
    for (var i = 0; i < authors.length; ++i) {
        var tLi = $('<li/>').append(
                $('<a/>').attr('href', 'javascript:loadArtworks(' + authors[i].id + ')')
                        .text(authors[i].name));
        tHtml.append(tLi);
    }
    $('#projectsBox').append(tHtml);
}

function createArtworkList(artworkList, author) {
    var artists = new Array();
    for (var i = 0; i < artworkList.length; ++i) {
        var artwork = artworkList[i];
        if (!authorIsInArray(artwork.author, artists))
            artists.push(artwork.author);
        var jQArtwork = $(createArtwork(artwork));
        $('#artworkList').append(jQArtwork);
        jQArtwork.data("artwork", artwork);
        jQArtwork.mouseover(function() {
            var artwork = $(this).data("artwork");
            if (author) {
                updateInfobarAuthor(artwork);
            } else {
                updateInfobarArtwork(artwork);
            }
        });
        jQArtwork.click(function() {
            openArtworkFullSize(this);
        });
    }
    new ScrollablePanel("ArtScrollBox", "#artworkList");
    return artists;
}

function authorIsInArray(author, authorList) {
    for (var i = 0; i < authorList.length; ++i)
        if (authorList[i].id == author.id) return true;
    return false;
}

function authorFilter(list, author) {
    var tempArray = new Array();
    for (var i = 0; i < list.length; ++i) {
        if (list[i].author.id == author)
            tempArray.push(list[i]);
    }
    return tempArray;
}

function createArtwork(artworkObject) {    
    var tHtml = $('<div/>');
    tHtml.attr('id', 'artwork-' + artworkObject.author.id);
    tHtml.addClass('artwork');

    var tLink = $('<a/>');
    tLink.attr('href', '#');
    tLink.appendTo(tHtml);

    var tImg = $('<img/>');
    tImg.attr('src', base_url + 'authors/' + artworkObject.author.id + '/' + artworkObject.Art_id + '/mini/' + artworkObject.Art_id + '.jpg')
            .attr('width', 125)
            .attr('height', 90)
            .attr('title', artworkObject.Art_Title)
            .attr('alt', artworkObject.Art_Title);
    tImg.appendTo(tLink);

    return tHtml;
}

function updateInfobarArtwork(artwork) {
    var tHtml = updateInfobarCommon(artwork);
    $("#artworkInfo").html(tHtml);
}

function updateInfobarAuthor(artwork) {
    var tHtml = "<strong>" + artwork.author.name + "</strong><br/>";
    tHtml += updateInfobarCommon(artwork);
    $("#artworkInfo").html(tHtml);
}

function updateInfobarCommon(artwork) {
    var tHtml = (artwork.Art_Title != "") ? artwork.Art_Title + '. ' : '';
    tHtml += (artwork.Art_Date != "") ? artwork.Art_Date + '<br/>' : '<br/>';
    tHtml += (artwork.Art_Technique != "") ? artwork.Art_Technique + '. ' : '';
    tHtml += (artwork.Art_Width != "" && artwork.Art_Width != "0.0") ? artwork.Art_Width : '';
    tHtml += (artwork.Art_Large != "" && artwork.Art_Large != "0.0") ? ' x ' + artwork.Art_Large : '';
    tHtml += (artwork.Art_Height != "" && artwork.Art_Height != "0.0") ? ' x ' + artwork.Art_Height : '';
    tHtml += ' ' + artwork.Art_Unit + '<br/>';
    tHtml += 'Ref: ' + ((artwork.Art_Ref != "") ? artwork.Art_Ref + ' ' : '');
    // artwork.Art_Price != undefined && 
    tHtml +=  ((artwork.Art_Price !="" && artwork.Art_Price !="0.00") ? 'Precio: ' +artwork.Art_Price + '<br/>' : '');
    return tHtml;
}

function openArtworkFullSize(artwork) {
    var artworkObject = $(artwork).data('artwork');
    var tImg = $('<img/>');
    tImg.attr('src', base_url + 'authors/' + artworkObject.author.id + '/' + artworkObject.Art_id + '/full/' + artworkObject.Art_id + '.jpg');
    tImg.attr('width', 500);
    tImg.attr('height', 500);
    tImg.attr('title', artworkObject.Art_Title);
    tImg.attr('alt', artworkObject.Art_Title);
    var tBuy = $('<a/>');
    tBuy.addClass('buyButton');
    tBuy.attr('href', base_url + 'index.php/contacts/artwork/' + artworkObject.Art_id);

    var tPopup = $('#artworkPopup .artworkFullSize');
    tPopup.empty();
    var tAuthor = $("<h1/>");
    tAuthor.text(artworkObject.author.name);
    tPopup.append(tAuthor);
    var tFrame = $('<div/>');
    tFrame.addClass('artworkFrame');
    tFrame.append(tImg);
    tPopup.append(tFrame);
    var tInfo = $('<div/>');
    tInfo.addClass('artworkFullSizeInfo');
    tInfo.html(updateInfobarCommon(artworkObject));
    tInfo.append(tBuy);
    tPopup.append(tInfo);
    $('#artworkPopup').modal({
        containerId:"artworkModal"
    });
}

function loadAuthors(manifest) {
    clearProjects();
    clearArtworks();
    if ($("#centerBoxPA").length == 0) {
        $('#centerPanel').empty();
        $('#centerPanel').append(createArtworkCentralPanel());
    }
    updateArtBoxTitle($('#categoriesBox .linkSelected').text());
    var url = artwork_url + 'getAuthors/' + manifest;
    $.get(url, function(data) {
        data = eval(data);
        if (data.length > 0) {
            $(document).data("artworks", data);
            var artist = createArtworkList(data, true);
            createAuthorsList(manifest, artist);
            new ScrollablePanel("PScrollBox", "#projectsBox");
            prepareLinks('#projectsBox', false);                          
        } else {
            $('#projectsBox').text('[No hay autores publicados]');
        }
    });
}

function loadArtworks(author) {
    clearArtworks();
    updateArtBoxTitle($('#projectsBox .linkSelected').text());
    var artworksFilter = authorFilter($(document).data("artworks"), author);
    createArtworkList(artworksFilter, false);
}

function loadAuthorFromArtwork(manifest,author) {
    clearProjects();
    clearArtworks();
    if ($("#centerBoxPA").length == 0) {
        $('#centerPanel').empty();
        $('#centerPanel').append(createArtworkCentralPanel());
    }
    updateArtBoxTitle($('#categoriesBox .linkSelected').text());
    var url = artwork_url + 'getAuthors/' + manifest;
    $.get(url, function(data) {
        data = eval(data);
        if (data.length > 0) {
            $(document).data("artworks", data);
            var artist = createArtworkList(data, true);
            createAuthorsList(manifest, artist);
            prepareLinks('#projectsBox', false);
            new ScrollablePanel("PScrollBox", "#projectsBox");
            var tempAuthorLink=$('a[href="javascript:loadArtworks('+author+')"]',$('#projectsBox'));
            tempAuthorLink.addClass('linkSelected');
            loadArtworks(author);
        } else {
            $('#projectsBox').text('[No hay autores publicados]');
        }
    });
}

function updateArtBoxTitle(title) {
    if (title != undefined && title != "")
        $('#artBoxTitle').text(title);
}

function clearArtworks() {
    $('#artworkList').empty();
    $('#artworkInfo').empty();
}

function createArtworkCentralPanel() {
    return $('<div/>').attr('id', 'centerBoxPA').append(
            $('<div/>').attr('id', 'artBox').append(
                    $('<h1/>').attr('id', 'artBoxTitle')
                    ).append(
                    $('<div/>').attr('id', 'artworkList')
                    )
            ).append(
            $('<div/>').attr('id', 'photoInformation').append(
                    $('<div/>').attr('id', 'artworkInfo')
                    )
            );
}

function ajaxErrorMessage() {
    var error = new Object;
    error.hasError = 'true';
    error.title = 'Operacion no satisfactoria';
    error.body = 'Ha ocurrido un error intentando realizar la conexion con el servidor. ' +
                 'Por favor intentelo nuevamente. ' +
                 'Si el error persiste verifique su conexion.';
    showMessage(error);
}
