﻿$.fn.centerInClient = function(options) {
    var opt = { forceAbsolute: false,
        container: window,    // selector of element to center in
        completeHandler: null
    };
    $.extend(opt, options);

    return this.each(function(i) {
        var el = $(this);
        var jWin = $(opt.container);
        var isWin = opt.container == window;
        
        // force to the top of document to ENSURE that 
        // document absolute positioning is available
        if (opt.forceAbsolute) {
            if (isWin)
                el.remove().appendTo("body");
            else
                el.remove().appendTo(jWin.get(0));
        }

        // have to make absolute
        el.css("position", "absolute");

        // height is off a bit so fudge it
        var heightFudge = isWin ? 2.0 : 1.8;

        var x = (isWin ? jWin.width() : jWin.outerWidth()) / 2 - el.outerWidth() / 2;
        var y = (isWin ? jWin.height() : jWin.outerHeight()) / heightFudge - el.outerHeight() / 2;

        el.css("left", x + jWin.scrollLeft());
        el.css("top", y + jWin.scrollTop());

        // if specified make callback and pass element
        if (opt.completeHandler)
            opt.completeHandler(this);
    });
}

function GetSiblingNumber(oElement) {
    return $(oElement).parent().children(oElement.nodeName).index(oElement);
}

var Animating = false;

function AllowClicks(obj, pos) {
    // Fix for IE bug. To get the position we want, subtract 1 from the position we want (only when the position is wrong!!!)
    // Otherwise, setting left to (e.g.) -510 will just set it to -509 when the bug occurs
    // Why? I have no idea. Confirmed this as a bug in IE, not in jQuery. Setting style to pos directly through JavaScript still results in incorrect value
    if (obj.position().left != pos) {
        obj.css("left", pos - 1);
    }
    Animating = false;
}

$(document).ready(function() {
    $("ul.SectionTopNav + div.PeepholeWrapper").css("display", "block").siblings("div.PeepholeWrapper").css("display", "none");
    $("a.ShiftLeft").hide();

    $("h2 a").bind("click", function() {
        $(this).parent("h2").next("div.Section").slideToggle(400);
        $(this).parent("h2").next("div.Section").siblings("div.Section").not(this).each(function(i) {
            if ($(this).css("display") == "block")
                $(this).slideToggle(400);
        });
    });

    $("ul.SectionTopNav li").bind("click", function() {
        var ClickedIndex = GetSiblingNumber(this);
        $(this).addClass("Selected");
        $(this).siblings().removeClass("Selected");
        $(this).parent().siblings("div.PeepholeWrapper:not(:eq(" + ClickedIndex + "))").hide();
        $(this).parent().siblings("div.PeepholeWrapper:eq(" + ClickedIndex + ")").fadeIn(1000);
    });

    $("a.ShiftRight").bind("click", function() {
        var Pos = $(this).next("div.Peephole").children("div").position();
        var t = $(this);
        var TotalWidth = $(this).next("div.Peephole").children("div").innerWidth();
        var ThumbWidth = TotalWidth / $(this).next("div.Peephole").children("div").children("div.Thumbnail").size();
        var NewLeft = Math.round(Pos.left - ThumbWidth);
        if (TotalWidth + NewLeft > 0 && !Animating) {
            Animating = true;
            $(this).next("div.Peephole").children("div").animate({ left: NewLeft + "px" }, function() { AllowClicks(t.next("div.Peephole").children("div"), NewLeft); });
            $(this).next().next().show();
        }
        if (TotalWidth - (ThumbWidth - Pos.left + ThumbWidth) <= 0) {
            $(this).hide();
        }
    });
    $("a.ShiftLeft").bind("click", function() {
        var Pos = $(this).prev("div.Peephole").children("div").position();
        var t = $(this);
        var TotalWidth = $(this).prev("div.Peephole").children("div").innerWidth();
        var ThumbWidth = TotalWidth / $(this).prev("div.Peephole").children("div").children("div.Thumbnail").size();
        var NewLeft = Math.round(Pos.left + ThumbWidth);
        if (Pos.left < 0 && !Animating) {
            Animating = true;
            $(this).prev("div.Peephole").children("div").animate({ left: NewLeft + "px" }, function() { AllowClicks(t.prev("div.Peephole").children("div"), NewLeft); });
            $(this).prev().prev().show();
        }
        if (Pos.left + ThumbWidth >= 0) {
            $(this).hide();
        }
    });
    
    if(location.href.indexOf("wallpapers=1") >= 0)
    	$("#Wallpapers").trigger("click");
    	
    if(location.href.indexOf("powerpoint=1") >= 0)
    	$("#PowerPoint").trigger("click");    	
    
    if(location.href.indexOf("fridays=1") >= 0)
    	$("#BearWearFriday").trigger("click");

     if (location.href.indexOf("ringtones=1") >= 0)
         $("#Ringtones").trigger("click");

     if (location.href.indexOf("decorations=1") >= 0)
         $("#Decorations").trigger("click");
         
     if (location.href.indexOf("concrete=1") >= 0)
         $("#BoomerBearConcrete").trigger("click");

     if (location.href.indexOf("socialmedia=1") >= 0)
         $("#SocialMedia").trigger("click");
});
function showModal(href) {
    $("#rokbox-overlay").height($(document).height()).width($(document).width());
    $("#rokbox-overlay").css({ display: "block" });
    $("#rokbox-wrapper").fadeIn("slow");
    $("#rokbox-container").fadeIn("fast");
    $("#RokBoxiFrame").attr("src", function() { return href; });
    $("#rokbox-wrapper").centerInClient();
}
function hideModal() {
    $("#rokbox-overlay").fadeOut("slow");
    $("#rokbox-wrapper").fadeOut("slow");
    $("#rokbox-container").fadeOut("fast");
}

//JQuery Tweet

(function ($) {

    $.fn.tweet = function (o) {
        var s = {
            username: ["seaofclouds"],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
            avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
            count: 3,                               // [integer]  how many tweets to display?
            intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
            outro_text: null,                       // [string]   do you want text AFTER your tweets?
            join_text: null,                       // [string]   optional text in between date and tweet, try setting to "auto"
            auto_join_text_default: "i said,",      // [string]   auto text for non verb: "i said" bullocks
            auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
            auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
            auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
            auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
            loading_text: null,                     // [string]   optional loading text, displayed while tweets load
            query: null                             // [string]   optional search query
        };

        $.fn.extend({
            linkUrl: function () {
                var returning = [];
                var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, "<a href=\"$1\">$1</a>"))
                });
                return $(returning);
            },
            linkUser: function () {
                var returning = [];
                var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, "<a href=\"http://twitter.com/$1\">@$1</a>"))
                });
                return $(returning);
            },
            linkHash: function () {
                var returning = [];
                var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
                this.each(function () {
                    returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from=' + s.username.join("%2BOR%2B") + '">#$1</a>'))
                });
                return $(returning);
            },
            capAwesome: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/(a|A)wesome/gi, 'AWESOME'))
                });
                return $(returning);
            },
            capEpic: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/(e|E)pic/gi, 'EPIC'))
                });
                return $(returning);
            },
            makeHeart: function () {
                var returning = [];
                this.each(function () {
                    returning.push(this.replace(/[&lt;]+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
                });
                return $(returning);
            }
        });

        function relative_time(time_value) {
            var parsed_date = Date.parse(time_value);
            var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
            var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
            if (delta < 60) {
                return 'less than a minute ago';
            } else if (delta < 120) {
                return 'about a minute ago';
            } else if (delta < (45 * 60)) {
                return (parseInt(delta / 60)).toString() + ' minutes ago';
            } else if (delta < (90 * 60)) {
                return 'about an hour ago';
            } else if (delta < (24 * 60 * 60)) {
                return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
            } else if (delta < (48 * 60 * 60)) {
                return '1 day ago';
            } else {
                return (parseInt(delta / 86400)).toString() + ' days ago';
            }
        }

        if (o) $.extend(s, o);
        return this.each(function () {
            var list = $('<ul class="tweet_list">').appendTo(this);
            var intro = '<p class="tweet_intro">' + s.intro_text + '</p>'
            var outro = '<p class="tweet_outro">' + s.outro_text + '</p>'
            var loading = $('<p class="loading">' + s.loading_text + '</p>');
            if (typeof (s.username) == "string") {
                s.username = [s.username];
            }
            var query = '';
            if (s.query) {
                query += 'q=' + s.query;
            }
            query += '&q=from:' + s.username.join('%20OR%20from:');
            var url = 'http://search.twitter.com/search.json?&' + query + '&rpp=' + s.count + '&callback=?';
            if (s.loading_text) $(this).append(loading);
            $.getJSON(url, function (data) {
                if (s.loading_text) loading.remove();
                if (s.intro_text) list.before(intro);
                $.each(data.results, function (i, item) {
                    // auto join text based on verb tense and content
                    if (s.join_text == "auto") {
                        if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
                            var join_text = s.auto_join_text_reply;
                        } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
                            var join_text = s.auto_join_text_url;
                        } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
                            var join_text = s.auto_join_text_ed;
                        } else if (item.text.match(/^(\w*ing) .*/i)) {
                            var join_text = s.auto_join_text_ing;
                        } else {
                            var join_text = s.auto_join_text_default;
                        }
                    } else {
                        var join_text = s.join_text;
                    };

                    var join_template = '<span class="tweet_join"> ' + join_text + ' </span>';
                    var join = '<a href="http://twitter.com/' + item.from_user + '">' + item.from_user + '</a>' + ((s.join_text) ? join_template : ' ')
                    var avatar_template = '<a class="tweet_avatar" href="http://twitter.com/' + item.from_user + '"><img src="' + item.profile_image_url + '" height="' + s.avatar_size + '" width="' + s.avatar_size + '" alt="' + item.from_user + '\'s avatar" border="0"/></a>';


                    var avatar = (s.avatar_size ? avatar_template : '')
                    var date = ' <span class="tweet_date"><a href="http://twitter.com/' + item.from_user + '/statuses/' + item.id + '" title="view tweet on twitter">' + relative_time(item.created_at) + '</a></span>';
                    var text = '<span class="tweet_text">' + $([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0] + '</span>';

                    // until we create a template option, arrange the items below to alter a tweet's display.
                    list.append('<li>' + avatar + join + text + date + '</li>');

                    list.children('li:first').addClass('tweet_first');
                    list.children('li:odd').addClass('tweet_even');
                    list.children('li:even').addClass('tweet_odd');
                });
                if (s.outro_text) list.after(outro);
            });

        });
    };
})(jQuery);
