﻿var yoxviewPanel,
    yoxviewPanelWrap,
    directLink,
    facebookLink,
    twitterLink,
    moreOptionsPanel,
    ajaxPreLoader,
    isLoading = false,
    currentDatasource,
    displayedDatasource = 'picasa',
    currentOptions,
    buttons = {},
    hashRegex = /#(.*)Options/,
    examplesSelect,
    dataUrl,
    dataUrlDefaultValue,
    submitBtn,
    dataUrlDefault,
    isOpen = false,
    currentUrl,
    pageUrl = window.location.host + window.location.pathname;

jQuery(document).ready(function($){
    yoxviewPanel = $("#yoxviewPanel");
    yoxviewPanelWrap = $("#yoxviewPanelWrap");
    dataUrl = $("#dataUrl");
    dataUrlDefaultValue = dataUrl.val();
    submitBtn = $("#submitBtn");
    directLink = $("#directLink");
    facebookLink = $("#facebookLink");
    twitterLink = $("#twitterLink");
    ajaxPreLoader = $("#ajaxPreLoader");
    examplesSelect = $("#examplesSelect");
    
    submitBtn.click(function(e){
        window.location.hash = "dataurl=" + escape(dataUrl.val());
    });
    
    $.address.change(function (e) {
        var urlAnchor = e.value.split("=");
        var url = urlAnchor.length == 2 && urlAnchor[0] === "dataurl" ? unescape(urlAnchor[1]) : null;
        if (url)
        {
            $(document).scrollTop(0);
            dataUrl.val(url);
            startLoading(url, true);
        }
    });
    examplesSelect.change(function(e){
        var exampleUrl = $(e.currentTarget).children(":selected").val();
        if (exampleUrl.match(/^http:\/\//))
            window.location.hash = "dataurl=" + escape(exampleUrl);
    });
    dataUrl.bind({
        focus: function(){
            if (this.value == dataUrlDefaultValue)
                this.value = "";
        },
        blur: function(){
            if (this.value == "")
                this.value = dataUrlDefaultValue;
        },
        keypress: function(event){
            if (event.keyCode == '13')
            {
                event.preventDefault();
                if (isLoading)
                    return false;

                submitBtn.trigger("click");
            }
        }
    });
    
    directLink.focus(function(e){
        e.preventDefault();
        this.select();
    })
    .mouseup(function(e){
        e.preventDefault();
    });
    
    $(".tabs").tabs();
});

function onLoadBegin()
{
    if (!isOpen){
        ajaxPreLoader.css("display", "block")
        .animate({ opacity : 1 }, "fast");
    }
}
function onLoadComplete()
{
    ajaxPreLoader.animate({ opacity : 0 }, "fast", function(){
        ajaxPreLoader.css("display", "none");
        yoxviewPanelWrap.slideDown("slow");
        isOpen = true;
    });
    var linkUrl = dataUrl.val();
    currentUrl = linkUrl;
    linkUrl = "http://" + pageUrl + "?dataurl=" + escape(linkUrl);
    directLink.val(linkUrl);
    var galleryTitle = "My+gallery+@+YoxView";
    facebookLink.attr("href", "http://www.facebook.com/sharer.php?u=" + linkUrl + "&t=" + galleryTitle);
    twitterLink.attr("href", "http://twitter.com/home?status=" + galleryTitle + ":" + linkUrl);
    endLoading();
    
}
function onLoadError(errorMsg)
{
    ajaxPreLoader.animate({ opacity : 0 }, "fast", function(){
        ajaxPreLoader.css("display", "none");
        alert(errorMsg);
    });
    endLoading();
}
function onNoData()
{
    ajaxPreLoader.animate({ opacity : 0 }, "fast", function(){
        ajaxPreLoader.css("display", "none");
        alert("No public albums found to display.");
    });
    endLoading();
}
submitUrl = function(url)
{
    var yoxviewOptions = { 
        dataUrl: url, 
        skin: url.match(Yox.Regex.data.youtube) ? "top_menu" : undefined
    };
      
    if (yoxviewOptions.skin)
        yoxviewOptions.thumbnailsOptions = { setHeader: true, headerElement: "<h2>" };
        
    if (!$.yoxview.firstViewWithImages){
        $.extend(yoxviewOptions, {
            dataUrl: url,
            onLoadBegin : onLoadBegin,
            onLoadComplete : onLoadComplete,
            onNoData : onNoData,
            onLoadError : onLoadError,
            dataSourceOptions: {
                imgmax: '800'
            }
        });
        yoxviewPanel.yoxview(yoxviewOptions);
    }
    else{
        yoxviewPanelWrap.slideUp("medium", function(){
            isOpen = false;
            yoxviewPanel.empty();
            yoxviewPanel.yoxview("options", yoxviewOptions);
        });
    }
}
function startLoading(url, forceLoad)
{
    url = url || dataUrl.val();
    if ((url != dataUrlDefaultValue && escape(url) != currentUrl) || forceLoad)
    {
        isLoading = true;
        submitBtn.attr("disabled","disabled");
        submitUrl(url);
    }
    var dataSourceName = Yox.getDataSourceName(url);
    if (dataSourceName)
        _gaq.push(['_trackEvent', 'plugins', dataSourceName]);
}
function endLoading()
{
    isLoading = false;
    submitBtn.removeAttr("disabled");
}
function setHelp(target, helpPanel, trigger)
{
    trigger.hover(
        function()
        { 
            var targetPosition = target.position();
            helpPanel.css({
                "left" : targetPosition.left,
                "top" : targetPosition.top + target.outerHeight() - 1
            });
            helpPanel.show(); 
        },
        function(){ helpPanel.hide(); }
    )
    .click(function(){ return false; });
}

// From http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html:
// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1] ? hash[1].replace("%20", " ") : null;
    }
    return vars;
}
function getUrlFromJson(obj)
{
    var url = window.location.protocol + "//" + window.location.host + window.location.pathname + "?";
    var lettersRegex = /[^\d]+/g;
    
    for(objKeyName in obj)
    {
        if (objKeyName.match(lettersRegex) && obj[objKeyName] && obj[objKeyName] != "")
        {
            url += objKeyName + "=" + obj[objKeyName] + "&";
        }
    }
    if (!obj.datasource)
        url += "datasource=" + currentDatasource;
    else
        url = url.substr(0, url.length - 1);
        
    url = url.replace(" ", "%20");
    return url;
}
