
var tusind1 = (function() {

    // Delay before ajax loaders appear
    var LOAD_DELAY = 400;
    var PHONEY_DELAY = 0;


    var cache = {}, loadables = {};

    function _load(url, success, options, loadArgs) {        
        options = $.extend({
            error: tusind1.defaultError,
            dataType: 'html',
            load: null
        }, options || {});

        if( options.load ) {
            var toLoad = setTimeout(options.load, LOAD_DELAY);
        }

        var f = function() {

            var xhr = $.ajax($.extend({
                url: url,
                type: "GET",
                success: function(data) {
                    clearTimeout(toLoad);
                    var json = xhr.getResponseHeader('X-JSON');                    
                    if( json ) {
                        json = eval('(' + json + ')');
                    }
                    success(data, json);
                },
                dataType: options.dataType,
                error: options.error
            }, loadArgs));
        }
        
        if( PHONEY_DELAY > 0 ) {
            setTimeout(f, PHONEY_DELAY);
        } else {
            f();
        }
    }


    return {

        debug: function(s) {
            if( !window.debugDiv ) {
                debugDiv = $("<div style='background-color: white;color:black'></div>").prependTo("body");
            }

            window.debugDiv.append($("<div></div>").text(s));
        },

        
        args: function(url, args) {
            url += url.indexOf("?") == -1 ? "?" : "&";
            var first = true;
            for( var s in args ) {
                first ? first = false : url += "&";
                url += s + "=" + encodeURI(args[s]);                
            }            
            return url;
        },

        get: function (url, success, options) {

            return _load(tusind1.args(url, {unique: 1*(new Date())+'-'+Math.random()}), success, options, {
                type: "GET"
            });
            
        },


        post: function (url, data, success, options) {            
            return _load(url, success, options, {
                type: "POST",                
                data: data
            });
        },

        notification: function(data) {
            

            var htmlMsg = '';
            if (data.user_feedback.sharer == undefined) {
                data.user_feedback.sharer = true;
            }
            if (data.user_feedback != undefined && data.user_feedback.sharer == true) {
                   htmlMsg += "<div class='share-links'><a href='javascript:void(0);' onclick=\"sf_fb.feed('" + data.user_feedback.message.description + "', '" + data.user_feedback.message.link + "');\" class='share-facebook-original ico'><span class='ico'>" + SHARE_FACEBOOK + "</span></a><br />"
                           + "<a href='javascript:void(0);' onclick=\"tusind1.shareTwitter('" + data.user_feedback.message.description + "');\" class='share-twitter-original ico'><span class='ico'>" + SHARE_TWITTER + "</span></a></div>";
            }

            if (data.status != undefined && data.user_feedback != undefined) {
                $.fn.colorbox({
                    html: "<div id='tusind1-sharer'><h3 class='" + data.status +"'>" + data.user_feedback.action_feedback + "</h3>"
                          + htmlMsg + "</div>",
                    close: LIGHTBOX_CLOSE
                });
            }
        },

        shareTwitter: function(message)
        {
            return window.open ("http://twitter.com/home?status=" + encodeURIComponent(message), "twittersharer","location=1,status=1,scrollbars=1, width=650,height=400");
        },

        shareFacebook: function(url, title)
        {
            facebookUrl = 'http://www.facebook.com/sharer.php?u=' + encodeURIComponent(url);

            if (title != undefined) {
                facebookUrl += '&t=' + encodeURIComponent(title);
            }
            
            return window.open (facebookUrl, "facebooksharer","location=1,status=1,scrollbars=1, width=650,height=400");
        },
        
            loadOverlay: function($trigger, $area) {
            var $overlay;
            
            return {
                show: function() {
                    $overlay = $("<div class='ajax-load-overlay'></div>");
                    $overlay.appendTo("body");
                    $overlay.css({
                        opacity: 0,
                        'z-index': 99,
                        width: $area.outerWidth()+"px",
                        height: $area.outerHeight()+"px"
                    });
                    $overlay.position({
                        my: 'top left',
                        at: 'top left',
                        of: $area
                    });
                    
                    $overlay.animate({
                        opacity: 0.5
                    }, 400);
                },
                hide: function() {
                    if( $overlay ) {
                        $overlay.fadeOut(100, function() {
                            $overlay.remove()
                        });
                    }
                }
            }

        },

        defaultError: function (req) {
            //alert("Whoa! An error occured: " + req.responseText);
        },



        /** Registers/caches the object in the clients browser.
         *
         *  @key The unique key for the object
         *  @o The object to register/cache
         *  @prefetchUrl An optional url to prefetch for the object (e.g. an image url). If true the value of o is used
         */
        registerObject: function(key, o, prefetchUrl) {
            if( prefetchUrl ) {
                if( prefetchUrl === true ) {
                    prefetchUrl = o;
                }
                var img = new Image();
                img.src = prefetchUrl;
            }
            cache[key] = o;
        },

        /** Returns an object registered with registerObject
         *
         * @key The objects unqiue key
         */
        getObject: function(key) {
            return cache[key];
        },

        registerLoadable: function(key, loader) {
            loadables[key] = loader;
        },

        load: function(loadableKey) {
            var f = loadables[loadableKey];
            if( f ) {
                f();
            }
        },

        sameHeight: function(e1, e2, minHeight) {

            var sizers = [];
            var es = !e2 ? e1 : [e1, e2];

            var height = minHeight || 0;
            for( var i = 0; i < es.length; i++ ) {
                sizers[i] = $(".sizer", es[i]);                
                if( !sizers[i].length ) {
                    $(es[i]).append("<div class='sizer'></div>");
                    sizers[i] = $(".sizer", es[i]);
                }                
                sizers[i].css("height", "");
                height = Math.max(height, $(es[i]).outerHeight());                
            }            
            
            for( var i = 0; i < es.length; i++ ) {                
                var newHeight = (height - $(es[i]).outerHeight()) + "px";                
                sizers[i].css("height", newHeight);                
            }            
            
        /*e1.css("border", "solid 2px pink");
            e2.css("border", "solid 2px pink");

            sizer1.css("backgroundColor", "green");
            sizer2.css("backgroundColor", "green");*/
        },

        feedbackPopup: function() {
            $.fn.colorbox({
                html: "<div style='width:590px;height:460px;padding:30px;text-align: center;'>" +
                    "<iframe src='http://spreadsheets.google.com/embeddedform?formkey=dEoyOHJoRXhVSWtvUnpyTGF5bzBBMVE6MQ&entry_5=" + document.title + "' width='530' height='893' frameborder='0' marginheight='0' marginwidth='0'>Loading...</iframe>" +
                    "</div>",
                close: LIGHTBOX_CLOSE
            });
        },

        userpanelPopup: function() {
            $.fn.colorbox({
                html: "<div style='width:590px;height:460px;padding:30px;text-align: center;'>" +
                    "<iframe src='http://spreadsheets.google.com/embeddedform?formkey=dHpVVzFHMzllSGRINTlOVzBnZGVoWWc6MQ' width='530' height='860' frameborder='0' marginheight='0' marginwidth='0'>Loading...</iframe>" +
                    "</div>",
                close: LIGHTBOX_CLOSE
            });
        },

        promptMessage: function(message) {
            $.fn.colorbox({
                html: "<div class=\"prompt_message\">" + message + "</div>",
                close: LIGHTBOX_CLOSE
            });
        }
    }
})();


/* Common behaviors */
$(function() {
    bindCommonEvents();
});


function bindCommonEvents(parent) {
    // Forms til bidrag
    function tieBoxForms() {

        //The body of the opened light box
        var $box = $("#cboxLoadedContent");

        $("a.ajax", $box).click(function(event) {            
            var loader = tusind1.loadOverlay($(this), $box);
            tusind1.get(tusind1.args($(this).attr("href")), function(data) {
                loader.hide();
                $.fn.colorbox({
                    html: data,
                    close: LIGHTBOX_CLOSE,
                    onComplete: tieBoxForms
                });
            }, {
                load: function() {
                    loader.show();
                }
            });

            event.preventDefault();
        });

    $("input[type=submit]", $box).click(function(event) {
        var $form = $(this).parents("form");
        if( $form.attr('enctype') != 'multipart/form-data' ) {

            var url = $form.attr("action");
            var loader = tusind1.loadOverlay($(this), $box);

            tusind1.post(url, $form.serialize(), function(html, json) {
                loader.hide();
                if(json ) {
                    //$.fn.colorbox.close();
                    document.location = json.successUrl;
                } else {
                    $.fn.colorbox({
                        html: html,
                        close: LIGHTBOX_CLOSE,
                        onComplete: tieBoxForms
                    });
                }
            }, {
                load: function() {
                    loader.show();
                }
            });
            event.preventDefault();
        }
    });
}

$("a.light-box", parent).each(function() {
    $(this).colorbox({
        onComplete: tieBoxForms,

        close: LIGHTBOX_CLOSE,

        href: tusind1.args($(this).attr('href'), {
            nest_path: $(this).attr('nest-path') || "content"
        })
    });
});

// Generic external link modifier
$('a[rel="external"]').click(function() {
    window.open($(this).attr('href'));
    return false;
});
}
