// JavaScript Document

/*
Licorize Public Bookmarks

If you don't know what Liorize is:
http://licorize.com
*/

/*******************************************************************************
 jquery.mb.components
 Copyright (c) 2001-2011. Matteo Bicocchi (Pupunzi); Open lab srl, Firenze - Italy
 email: mbicocchi@open-lab.com
 site: http://pupunzi.com
 blog: http://pupunzi.open-lab.com
 
 Licences: MIT, GPL
 http://www.opensource.org/licenses/mit-license.php
 http://www.gnu.org/licenses/gpl.html
 ******************************************************************************/

$.fn.generateLicorizeStrips = function(opt) {

    var defaults = {

        /*
        Get Licorize User Public Strips List
        e.g.: http://api.licorize.com/api/1/users/[username]/strips/list.jsonp

        Get Licorize Public Project Strips List
        e.g.:http://api.licorize.com/api/1/users/[username]/[projectName]/strips/list.jsonp

        Get Licorize User Strips - in Visible Projects - Filtered By Tag
        e.g.:http://api.licorize.com/api/1/users/[username]/tags/[tagName]/strips/list.jsonp
        
        Get All Licorize Strips - in Visible Projects - Filtered By Tag
        e.g.:http://api.licorize.com/api/1/tags/[tagName]/strips/list.jsonp
        */

        booklet_url: "http://licorize.com/api/1/users/emmanuel/strips/list.jsonp",
        booklet_stripsNumber: "10",
        booklet_style: "expanded",// or "compact"
        booklet_order: "desc",//or "asc"
        booklet_title: "My Licorize public bookmarks"
    };

    $.extend(defaults, opt);

    var el = this;
    el.append('<h2 class="feedTitle">' + defaults.booklet_title + '</h2>');

    var container = $("<div/>").addClass("container");
    el.append(container);


    if (!defaults.booklet_url || defaults.booklet_url == '') {
        container.html('Missing booklet_url');
        return;
    }

    var isExpanded = "expanded" === defaults.booklet_style;
    var limitResultTo = parseInt(defaults.booklet_stripsNumber);
    var req = {
        "embedded": "yes",
        "millis": 0,
        "limitResultTo": limitResultTo,
        "orderBy": (defaults.booklet_order ? defaults.booklet_order : "")
    };

    $.ajax({
        url: defaults.booklet_url,
        data: req,
        dataType: 'jsonp',
        jsonp: "__jsonp_callback",
        jsonpCallback: "listCallback",
        success: function(response) {

            var strips = response.strips;
            var bookletList = '';

            // do whatever you want with feeds here
            for (var i in strips) {
                var strip = strips[i];

                var dateInt = parseInt(strip.millis);
                var date = new Date(dateInt);
                date = dateToRelative(new Date(date));

                var entry_placeHolder = $("<div/>").addClass("entry_placeHolder");
                var url = strip.url;
                entry_placeHolder.data("url", url);

                var entry_date = $("<span/>").addClass("entry_date").html(date+" - ");
                entry_placeHolder.append(entry_date);

                if (strip.creator) {
                    var entry_author = $("<span/>").addClass("entry_author").html(strip.creator);
                    entry_placeHolder.append(entry_author);
                }

                if (strip.teamName) {
                    var entry_teamName = $("<div/>").addClass("entry_teamName").html("<small>(" + strip.teamName + ")</small>");
                    entry_placeHolder.append(entry_teamName);
                }

                var thumb = strip.thumbUrl;
                if (isExpanded && thumb) {
                    var entry_img = $("<div/>").addClass("entry_img").html("<img src='" + thumb + "'>");
                    entry_placeHolder.append(entry_img);
                }

                var entry_title = $("<h3/>").addClass("entry_title").html(strip.title);
                entry_placeHolder.append(entry_title);

                if (isExpanded && strip.notes) {
                    var entry_notes = $("<div/>").addClass("entry_notes").html(strip.notes);
                    entry_placeHolder.append(entry_notes);
                }

                function openLink(url) {
                    window.open(url, "LicorizeBookmark");
                }

                entry_placeHolder.click(function() {
                    openLink($(this).data("url"));
                });

                container.append(entry_placeHolder);
            }
        },

        error: function(er) {
            alert("ERROR " + er.statusText);
        }
    });
};

function dateToRelative(localTime) {
    var diff = new Date().getTime() - localTime;
    var ret = "";

    var min = 60000;
    var hour = 3600000;
    var day = 86400000;
    var wee = 604800000;
    var mon = 2629800000;
    var yea = 31557600000;

    if (diff < -yea * 2) ret = "in ## years".replace("##", (-diff / yea).toFixed(0));
    else if (diff < -mon * 9) ret = "in ## months".replace("##", (-diff / mon).toFixed(0));
    else if (diff < -wee * 5) ret = "in ## weeks".replace("##", (-diff / wee).toFixed(0));
    else if (diff < -day * 2) ret = "in ## days".replace("##", (-diff / day).toFixed(0));
    else if (diff < -hour) ret = "in ## hours".replace("##", (-diff / hour).toFixed(0));
    else if (diff < -min * 35) ret = "in about one hour";
    else if (diff < -min * 25) ret = "in about half hour";
    else if (diff < -min * 10) ret = "in some minutes";
    else if (diff < -min * 2) ret = "in few minutes";
    else if (diff <= min) ret = "just now";
    else if (diff <= min * 5) ret = "few minutes ago";
    else if (diff <= min * 15) ret = "some minutes ago";
    else if (diff <= min * 35) ret = "about half hour ago";
    else if (diff <= min * 75) ret = "about an hour ago";
    else if (diff <= hour * 5) ret = "few hours ago";
    else if (diff <= hour * 48) ret = "## hours ago".replace("##", (diff / hour).toFixed(0));
    else if (diff <= day * 7) ret = "## days ago".replace("##", (diff / day).toFixed(0));
    else if (diff <= wee * 5) ret = "## weeks ago".replace("##", (diff / wee).toFixed(0));
    else if (diff <= mon * 12) ret = "## months ago".replace("##", (diff / mon).toFixed(0));
    else ret = "## years ago".replace("##", (diff / yea).toFixed(0));
    return ret;
}


$(function() {
    $("#licorize_links").generateLicorizeStrips();
});
