/* Image caching */
(function($) {
    var cache = [];

    $.preLoadImages = function()
    {
        var args_len = arguments.length;
        for (var i = args_len; i--;)
        {
            var cacheImage = document.createElement('img');
            cacheImage.src = arguments[i];
            cache.push(cacheImage);
        }
    }
})(jQuery)

/* Get page language */
function get_lang()
{
    return $("html").attr("lang");
}

/* Get page URI */
function get_uri()
{
    if ($("meta[name='uri']").length > 0)
    {
        return $("meta[name='uri']").attr("content");
    }
    else
    {
        var str = window.location.href.replace(base_url(), '');
        str = str.replace(/\/$/, "");
        if (str === '')
        {
            str = 'work/index';
        }
        else if (str.match(/^[^\/]*$/))
        {
            str += '/index';
        }
        return str;
    }
}

/* Set page URI parameters */
function set_uri(param, val)
{
    if ($("meta[name='uri']").length > 0)
    {
        var cur = $("meta[name='uri']").attr("content");
        if (param === 'lang')
        {
            $("meta[name='uri']").attr("content", cur.replace(/(\/index)(\/en|\/es)?/, '$1/'+val));
        }
        else if (param === 'project')
        {
            $("meta[name='uri']").attr("content", cur.replace(/(\/index)(\/en|\/es)?(\/project\/\d+)?/, (val === null) ? '$1$2' : '$1$2/project/'+val));
        }
        else if (param === 'tiles')
        {
            $("meta[name='uri']").attr("content", cur.replace(/(\/index)(\/en|\/es)?(\/project\/\d+)?(\/.*)?$/, (val === null) ? '$1$2$3' : '$1$2$3/'+val));
        }
    }
}

function setup_pageinit()
{
    setup_stateimg('.state-image');
    setup_extlinks('a[rel="external"]');

    if (get_lang() === 'es')
    {
        $("#lang-en").click(function(e)
        {
            set_uri('lang', 'en');
            window.location.href = base_url() + get_uri();
        });
    }
    else
    {
        $("#lang-es").click(function(e)
        {
            set_uri('lang', 'es');
            window.location.href = base_url() + get_uri();
        });
    }

    $("img.icon-share").click(function(e)
    {
        $("div.share-url").find("input").val(base_url() + get_uri());
        var img = $("div.share-url").find("img");
        $(img).attr('src', $(img).attr('src').replace(/-on\./, '-off.'));
        $("div.share-url").fadeIn(400);
    });
    $("div.share-url img").click(function(e)
    {
        $("div.share-url").fadeOut(200);
    });

    /* WTF?
    $.ajax({ url: base_url()+"work/preload_images/"+get_lang(),
             global: false,
             async: true,
             success: function(data, textStatus, jqXHR)
             {
                 $.preLoadImages($.parseJSON(data));
             } });*/
}

function setup_tooltips(selector)
{
    $(selector).find(".tooltip-nw").each(function()
    {
        $(this).tooltip(
        {
            effect: 'fade',
            position: 'top left',
            offset: [ -5, -5 ],
            onBeforeShow: function()
            {
                if (!$(this.getTrigger()).hasClass('tooltip-on'))
                {
                    return false;
                }
            }
        });
    });
    $(selector).find(".tooltip-ne").each(function()
    {
        $(this).tooltip(
        {
            effect: 'fade',
            position: 'top right',
            offset: [ -5, -5 ],
            onBeforeShow: function()
            {
                if (!$(this.getTrigger()).hasClass('tooltip-on'))
                {
                    return false;
                }
            }
        });
    });
    $(selector).find(".tooltip-w").each(function()
    {
        $(this).tooltip(
        {
            effect: 'fade',
            position: 'center left',
            offset: [ 0, -5 ],
            onBeforeShow: function()
            {
                if (!$(this.getTrigger()).hasClass('tooltip-on'))
                {
                    return false;
                }
            }
        });
    });
    $(selector).find("a").mouseover(function(e)
    {
        $(e.currentTarget).children("img.tooltip-on").trigger('mouseover');
    });
    $(selector).find("a").mouseout(function(e)
    {
        $(e.currentTarget).children("img.tooltip-on").trigger('mouseout');
    });
}

function clean_tooltips(selector)
{
    $(selector).find(".tooltip-ne, .tooltip-w, .tooltip-nw").each(function()
    {
        var api = $(this).data("tooltip");
        if (api && api.getTip())
        {
            api.getTip().fadeOut(200, function()
            {
                $(this).remove();
            });
        }
    });
}

function setup_stateimg(selector)
{
    $(selector).mouseenter(function(e)
    {
        $(e.currentTarget).attr('src', $(e.currentTarget).attr('src').replace(/-off\./, '-on.'));
    });
    $(selector).mouseleave(function(e)
    {
        $(e.currentTarget).attr('src', $(e.currentTarget).attr('src').replace(/-on\./, '-off.'));
    });
}

function activate_stateimg(selector)
{
    $(selector).attr("src", $(selector).attr('src').replace(/-inactive\./, '-off.'));
    $(selector).addClass("state-image");
    $(selector).addClass("tooltip-on");
    $(selector).css("cursor", "pointer");
}

function deactivate_stateimg(selector)
{
    $(selector).removeClass("state-image");
    $(selector).removeClass("tooltip-on");
    $(selector).attr("src", $(selector).attr('src').replace(/-(on|off)\./, '-inactive.'));
    $(selector).css("cursor", "default");
}

function setup_extlinks(selector)
{
    $(selector).attr('target', '_blank');
    $(selector).click(function(e)
    {
        if ($("#soundcloudPlayer").length > 0)
        {
            soundcloud.getPlayer('soundcloudPlayer').api_pause();
        }
    });
}

function resize_adjust()
{
    var width = Math.max($(window).width(), 980);
    if (width > 980)
    {
        $("#header").width('100%');
        $("#body").width('100%');
    }
    else
    {
        $("#header").width(width);
        $("#body").width(width);
    }
    $("#main-menu").width(width - 248);
    $("#footer-line").width(width - 40);
    $(".header-line").width(width - 248);
    return width;
}

