var connectTwitterInited = false;
var homeScrollbarApi;
var loveThemeInterval;
var loveThemeHover = false;

$(document).ready(function() {

    $('#btnHeaderBook').click(function() {
        $('#boxHeaderMap').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderMap').removeClass('active');
        });
        $('#boxHeaderSocial').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderSocial').removeClass('active');
        });
        $('#boxHeaderBook').slideToggle('slow', function() {
            // Animation complete.
            $('#btnHeaderBook').toggleClass('active');
        });
    });
    $('#boxHeaderBook a.close').click(function() {
        $('#boxHeaderBook').slideToggle('slow', function() {
            // Animation complete.
            $('#btnHeaderBook').toggleClass('active');
        });
    });


    $('#btnHeaderMap').click(function() {
        $('#boxHeaderBook').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderBook').removeClass('active');
        });
        $('#boxHeaderSocial').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderSocial').removeClass('active');
        });
        $('#boxHeaderMap').slideToggle('slow', function() {
            // Animation complete.
            getMapData();
            $('#btnHeaderMap').toggleClass('active');
        });
    });
    $('#boxHeaderMap a.close').click(function() {
        $('#boxHeaderMap').slideToggle('slow', function() {
            // Animation complete.
            $('#btnHeaderMap').toggleClass('active');
        });
    });

    $('#btnHeaderSocial').click(function() {
        $('#boxHeaderBook').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderBook').removeClass('active');
        });
        $('#boxHeaderMap').slideUp('slow', function() {
            // Animation complete.
            $('#btnHeaderMap').removeClass('active');
        });
        $('#boxHeaderSocial').slideToggle('slow', function() {
            // Animation complete.
            getTwitter();
            $('#btnHeaderSocial').toggleClass('active');
        });
    });
    $('#boxHeaderSocial a.close').click(function() {
        $('#boxHeaderSocial').slideToggle('slow', function() {
            // Animation complete.
            $('#btnHeaderSocial').toggleClass('active');
        });
    });

    // wire up custom scrollbars
    $('.containerModSmB .scrollableContainer').jScrollPane({ hideFocus: true, verticalDragMinHeight: 20, verticalDragMaxHeight: 100 });
    $('.containerModLgC .scrollableContainer').jScrollPane({ hideFocus: true, verticalDragMinHeight: 20, verticalDragMaxHeight: 100 });

    var containerModulesHome = $('#containerModulesHome');
    containerModulesHome.jScrollPane({ horizontalDragMaxWidth: 80, hideFocus: true, animateScroll:true, animateDuration:100 });
    homeScrollbarApi = containerModulesHome.data('jsp');

    // only wire up twitter on click
    function getTwitter() {
        if (!connectTwitterInited) {
            $.ajax({
                url: '/httphandlers/GenericProxy.ashx?url=http://search.twitter.com/search.json%3Fq=' + twitterSearchString + '%26rpp=' + twitterResultsCount,
                dataType: 'json',
                success: function(data) {
                    bindTwitter(data);
                    connectTwitterInited = true;
                },
                error: function(request, status, errorMsg) {
                    //alert("error retrieving twitter " + errorMsg);
                }
            });
        }
    }

    function bindTwitter(data) {
        var template = $('.tweetbox:first');
        var twitterContainer = $('#allTweetsContainer');
        $.each(
            data.results,
            function(idx, item) {
                var container = $(template).clone();
                var img = $(container).find('.twitterImg img');
                var un = $(container).find('.twitterUsername');
                var comment = $(container).find('.twitterComment');

                $(img).attr('src', item.profile_image_url);
                $(un).html(item.from_user);
                $(comment).html(ify.clean(item.text));

                $(container).show();
                $(twitterContainer).append($(container));
            }
        );
        $(template).remove();
        $('.twitterComment a').attr('target', '_blank');

        $('#loadingTweets').fadeOut('fast', function() {
            $(twitterContainer).fadeIn('fast', function() {
                $('#twitterScrollBox').jScrollPane();
            });
        });
    }
    //;

    // connect - I Love...
    $('#txtConnectTellUsInput').data('defaultVal', $('#txtConnectTellUsInput').val());
    $('#txtConnectTellUsInput').focus(function() {
        if ($(this).val() == $(this).data('defaultVal')) {
            $(this).val('');
        }
    });
    $('#txtConnectTellUsInput').blur(function() {
        if ($(this).val() == '') {
            $(this).val($(this).data('defaultVal'));
        }
    });
    $('#connectTellUsButtonTweet').hover(function() {
        $(this).toggleClass('active');
    });
    $('#connectTellUsButtonPost').hover(function() {
        $(this).toggleClass('active');
    });
    $('#connectILoveFacebookIcon').hover(function() {
        $(this).toggleClass('active');
    });
    $('#connectILoveTwitterIcon').hover(function() {
        $(this).toggleClass('active');
    });
    $('#connectPollVoteButton').hover(function() {
        $(this).toggleClass('active');
    });
    $('#connectPollVoteButton').click(function() {
        var pollVal = $('input[name=rbPoll]:checked').val();
        if (pollVal == undefined) {
            alert("Please select an option before submitting this poll");
        }
        else {
            $.ajax({
                url: '/httphandlers/PollHandler.ashx?action=submitPoll&val=' + pollVal,
                dataType: 'json',
                success: function(data) {
                    var showResults = data.results.showResults;
                    $('#connectPollVoteButton').hide();
                    if (showResults) {
                        $('#connectPollThankYou').fadeIn('fast');
                        $('#spnAnswer1Count').html(data.results.question1 + "%");
                        $('#spnAnswer2Count').html(data.results.question2 + "%");
                        $('#spnAnswer3Count').html(data.results.question3 + "%");
                        $('#spnAnswer4Count').html(data.results.question4 + "%");
                        $('.pollRb').fadeOut('fast', function() {
                            $('.spnAnswer').fadeIn('fast');
                        });
                    }
                    else {
                        $('#connectPollAnswers').fadeOut('fast', function() {
                            $('#connectPollThankYou').fadeIn('fast');
                        });
                    }
                },
                error: function(request, status, errorMsg) {
                    alert("We're sorry, an error occurred submitting the poll: " + errorMsg);
                }
            });
        }
    });


    $('#connectTellUsButtonTweet').click(function() {
        var s = $('#txtConnectTellUsInput').val() + ' ' + tweetSuffix;
        popWindow('http://twitter.com/?status=' + escape(s), 'twitter', 800, 600, 'yes', 'no');
    });
    $('#connectTellUsButtonPost').click(function() {
        var s = $('#txtConnectTellUsInput').val();
        popWindow('http://www.facebook.com/sharer.php?u=' + escape(window.location) + '&t=' + escape(s), 'fb', 800, 600, 'yes', 'no');
    });

    // BEGIN MAIN DROP DOWN NAVIGATION
    // documentation - flowplayer.org/tools/tooltip.html
    var nav1Class = $('.nav_1').attr("class");
    var nav2Class = $('.nav_2').attr("class");
    var nav3Class = $('.nav_3').attr("class");
    var nav4Class = $('.nav_4').attr("class");
    var nav5Class = $('.nav_5').attr("class");
    var nav6Class = $('.nav_6').attr("class");
    var nav7Class = $('.nav_7').attr("class");
    var nav8Class = $('.nav_8').attr("class");

    $(".nav_1").tooltip({
        relative: true,
        position: 'bottom right',
        offset: [0, -83],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_1').removeClass('navBreadcrumb');
            $('.nav_1').addClass('navActive');
        },
        onHide: function() {
            $('.nav_1').removeClass('navActive');
            $('.nav_1').addClass(nav1Class);
        }
    });

    $(".nav_2").tooltip({
        relative: true,
        position: 'bottom right',
        offset: [0, -202],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_2').removeClass('navBreadcrumb');
            $('.nav_2').addClass('navActive');
        },
        onHide: function() {
            $('.nav_2').removeClass('navActive');
            $('.nav_2').addClass(nav2Class);
        }
    });

    $(".nav_3").tooltip({
        relative: true,
        position: 'bottom right',
        offset: [0, -295],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_3').removeClass('navBreadcrumb');
            $('.nav_3').addClass('navActive');
        },
        onHide: function() {
            $('.nav_3').removeClass('navActive');
            $('.nav_3').addClass(nav3Class);
        }
    });

    $(".nav_4").tooltip({
        relative: true,
        position: 'bottom right',
        offset: [0, -411],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_4').removeClass('navBreadcrumb');
            $('.nav_4').addClass('navActive');
        },
        onHide: function() {
            $('.nav_4').removeClass('navActive');
            $('.nav_4').addClass(nav4Class);
        }
    });

    $(".nav_5").tooltip({
        relative: true,
        position: 'bottom left',
        offset: [0, 567],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_5').removeClass('navBreadcrumb');
            $('.nav_5').addClass('navActive');
        },
        onHide: function() {
            $('.nav_5').removeClass('navActive');
            $('.nav_5').addClass(nav5Class);
        }
    });

    $(".nav_6").tooltip({
        relative: true,
        position: 'bottom left',
        offset: [0, 0],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_6').removeClass('navBreadcrumb');
            $('.nav_6').addClass('navActive');
        },
        onHide: function() {
            $('.nav_6').removeClass('navActive');
            $('.nav_6').addClass(nav6Class);
        }
    });

    $(".nav_7").tooltip({
        relative: true,
        position: 'bottom left',
        offset: [0, 0],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_7').removeClass('navBreadcrumb');
            $('.nav_7').addClass('navActive');
        },
        onHide: function() {
            $('.nav_7').removeClass('navActive');
            $('.nav_7').addClass(nav7Class);
        }
    });

    $(".nav_8").tooltip({
        relative: true,
        position: 'bottom left',
        offset: [0, 140],
        effect: 'toggle',
        predelay: 300,
        onBeforeShow: function() {
            $('.nav_8').removeClass('navBreadcrumb');
            $('.nav_8').addClass('navActive');
        },
        onHide: function() {
            $('.nav_8').removeClass('navActive');
            $('.nav_8').addClass(nav8Class);
        }
    });


    // END MAIN DROP DOWN NAVIGATION

    /*
    $('#containerLoveTheme').hover(function() {
    $('#btnLove').toggleClass('active');
    $('#boxLoveTheme').slideToggle('slow');
    });
    */

    $('#btnLove').mouseover(function() {
        $(this).addClass('active');
        loveThemeHover = true;
        $('#boxLoveTheme').slideDown(500, function() {

        });
    });
    $('#btnLove').mouseout(function() {
        loveThemeHover = false;
        setTimeout(function() {
            hideLoveThemeButtons();
        }, 750);
    });
    $('#boxLoveTheme').mouseover(function() {
        loveThemeHover = true;
    });
    $('#boxLoveTheme').mouseout(function() {
        loveThemeHover = false;
        setTimeout(function() {
            hideLoveThemeButtons();
        }, 750);
    });
    function hideLoveThemeButtons() {
        if (!loveThemeHover) {
            $('#boxLoveTheme').slideUp(500);
            $('#btnLove').removeClass('active');
        }
    }

    /*
    $('#containerLoveTheme').hover(
    function() {
    $('#btnLove').addClass('active');
    $('#boxLoveTheme').hide('slow');
    },
    function() {
    $('#btnLove').removeClass('active');
    $('#boxLoveTheme').show('slow');
    }
    );	
    */
    /*
    $('.more').each(function() {
    var $thisMore = $(this);
    $thisMore.click(function() {
    $thisMore.closest('.boxSortResultFooter').siblings('div.boxSortResultFull').slideToggle('slow', function() {
    // Animation complete.
    $thisMore.toggleClass('active');
    });
    });
    });
    */

    $('#headerEmailSignupSubmit').click(function() {
        var urlToUse = "/enews-signup.aspx";
        var email = $('#headerEmailSignup').val();

        if (email == document.getElementById('headerEmailSignup').defaultValue) {
            email = '';
        }
        var queryString = "?email=" + email;
        window.location = urlToUse + queryString;
    });

    $('#headerEmailSignup').keypress(function(e) {
        if (window.event) {
            key = window.event.keyCode;
        }
        else {
            key = e.which;
        }
        if (key == 13) {
            e.preventDefault();
            $('#headerEmailSignupSubmit').click();
        }
    });

    // weather
    $('.forecastDayContainer').mouseover(function() {
        $('.forecastDetailContainer').hide();
        $(this).find('.forecastPlus').hide();
        $(this).find('.forecastDetailContainer').show();
    });
    $('.forecastDayContainer').mouseout(function() {
        $(this).find('.forecastDetailContainer').hide();
        $(this).find('.forecastPlus').show();
    });

    $("a.mediaLinkVideo").fancybox({
        'titleShow': false,
        'transitionIn': 'elastic',
        'transitionOut': 'elastic',
        'href': this.href,
        'type': 'swf',
        'swf': { 'wmode': 'transparent', 'allowfullscreen': 'true' }
    });

    $("a.mediaLinkPhoto").fancybox({ 'type': 'image' });

    // any link tagged to open in a lightbox
    $('.quickLightbox').fancybox();
    $('.quickLightboxIframe').fancybox({
        'width': '90%',
        'height': '90%',
        //'autoScale': false,
        'type': 'iframe'
    });

});

function parseDate(str) {
    var v = str.split(' ');
    return new Date(Date.parse(v[1] + " " + v[2] + ", " + v[5] + " " + v[3] + " UTC"));
}
window.ify = function() {
    var entities = {
        '"': '&quot;',
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;'
    };

    return {
        "link": function(t) {
            return t.replace(/[a-z]+:\/\/[a-z0-9-_]+\.[a-z0-9-_:~%&\?\/.=]+[^:\.,\)\s*$]/ig, function(m) {
                return '<a href="' + m + '">' + ((m.length > 25) ? m.substr(0, 24) + '...' : m) + '</a>';
            });
        },
        "at": function(t) {
            return t.replace(/(^|[^\w]+)\@([a-zA-Z0-9_]{1,15})/g, function(m, m1, m2) {
                return m1 + '@<a href="http://twitter.com/' + m2 + '">' + m2 + '</a>';
            });
        },
        "hash": function(t) {
            return t.replace(/(^|[^\w'"]+)\#([a-zA-Z0-9_]+)/g, function(m, m1, m2) {
                return m1 + '#<a href="http://search.twitter.com/search?q=%23' + m2 + '">' + m2 + '</a>';
            });
        },
        "clean": function(tweet) {
            if (tweet != undefined && tweet != '') {
                return this.hash(this.at(this.link(tweet))).replace('\n', '<br />');
            }
            else {
                return "";
            }
        }
    };
} ();
function relative_time(time_value) {
    // Tue Feb 01 12:44:15 +0000 2011
    var values = time_value.split(" ");
    var parsed_date = Date.parse(values[1] + " " + values[2] + ", " + values[5] + " " + values[3]);
    var date = new Date(parsed_date);
    var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
    var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
    var r = '';

    function formatTime(date) {
        var hour = date.getHours(),
                min = date.getMinutes() + "",
                ampm = 'AM';

        if (hour == 0) {
            hour = 12;
        } else if (hour == 12) {
            ampm = 'PM';
        } else if (hour > 12) {
            hour -= 12;
            ampm = 'PM';
        }

        if (min.length == 1) {
            min = '0' + min;
        }

        return hour + ':' + min + ' ' + ampm;
    }

    function formatDate(date) {
        var ds = date.toDateString().split(/ /),
                mon = months[date.getMonth()],
                day = date.getDate() + '',
                dayi = parseInt(day),
                year = date.getFullYear(),
                thisyear = (new Date()).getFullYear(),
                th = 'th';

        // anti-'th' - but don't do the 11th, 12th or 13th
        if ((dayi % 10) == 1 && day.substr(0, 1) != '1') {
            th = 'st';
        } else if ((dayi % 10) == 2 && day.substr(0, 1) != '1') {
            th = 'nd';
        } else if ((dayi % 10) == 3 && day.substr(0, 1) != '1') {
            th = 'rd';
        }

        if (day.substr(0, 1) == '0') {
            day = day.substr(1);
        }

        return mon + ' ' + day + th + (thisyear != year ? ', ' + year : '');
    }

    delta = delta + (relative_to.getTimezoneOffset() * 60);
    //alert(date + " ::: " + relative_to + " ::: delta:" + delta);

    if (delta < 5) {
        r = 'less than 5 seconds ago';
    } else if (delta < 30) {
        r = 'half a minute ago';
    } else if (delta < 60) {
        r = 'less than a minute ago';
    } else if (delta < 120) {
        r = '1 minute ago';
    } else if (delta < (45 * 60)) {
        r = (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if (delta < (2 * 90 * 60)) { // 2* because sometimes read 1 hours ago
        r = 'about 1 hour ago';
    } else if (delta < (24 * 60 * 60)) {
        r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
    } else {
        if (delta < (48 * 60 * 60)) {
            r = formatTime(date) + ' yesterday';
        } else {
            r = formatTime(date) + ' ' + formatDate(date);
            // r = (parseInt(delta / 86400)).toString() + ' days ago';
        }
    }

    return r;
}
function formatFBTime(fbDate) {
    //2010-11-29T17:23:24+0000
    var arrDateTime = fbDate.split("T");
    var strTimeCode = arrDateTime[1].substring(0, arrDateTime[1].indexOf("+"));

    var arrDateParts = arrDateTime[0].split("-");
    var year = arrDateParts[0];
    var month = parseInt(arrDateParts[1] - 1);
    var day = arrDateParts[2];

    //var valid_date = new Date(arrDateTime[0]);
    //var valid_date = new Date(year, month, day);


    var valid_date = new Date();
    valid_date.setUTCFullYear(year);
    valid_date.setUTCMonth(month);
    valid_date.setUTCDate(day);

    var arrTimeCode = strTimeCode.split(":");
    valid_date.setUTCHours(arrTimeCode[0]);
    valid_date.setUTCMinutes(arrTimeCode[1]);
    valid_date.setUTCSeconds(arrTimeCode[2]);

    /*
    var valid_date = new Date();
    valid_date.setFullYear(year);
    valid_date.setMonth(month);
    valid_date.setDate(day);
	
	var arrTimeCode = strTimeCode.split(":");
    valid_date.setHours(arrTimeCode[0]);
    valid_date.setMinutes(arrTimeCode[1]);
    valid_date.setSeconds(arrTimeCode[2]);
    */
    return valid_date;
}
Date.prototype.toRelativeTime = function(now_threshold) {
    var delta = new Date() - this;

    now_threshold = parseInt(now_threshold, 10);

    if (isNaN(now_threshold)) {
        now_threshold = 0;
    }

    if (delta <= now_threshold) {
        return 'Just now';
    }

    var units = null;
    var conversions = {
        millisecond: 1, // ms    -> ms
        second: 1000,   // ms    -> sec
        minute: 60,     // sec   -> min
        hour: 60,     // min   -> hour
        day: 24,     // hour  -> day
        month: 30,     // day   -> month (roughly)
        year: 12      // month -> year
    };
    var conversions = { millisecond: 1 }
    /*
    for (var key in conversions) {
    if (delta < conversions[key]) {
    break;
    } else {
    units = key; // keeps track of the selected key over the iteration
    delta = delta / conversions[key];
    }
    }
    */
    delta = delta / 1000;
    var r = "";

    if (delta < 5) {
        r = 'less than 5 seconds ago';
    } else if (delta < 30) {
        r = 'half a minute ago';
    } else if (delta < 60) {
        r = 'less than a minute ago';
    } else if (delta < 120) {
        r = '1 minute ago';
    } else if (delta < (45 * 60)) {
        r = (parseInt(delta / 60)).toString() + ' minutes ago';
    } else if (delta < (2 * 90 * 60)) { // 2* because sometimes read 1 hours ago
        r = 'about 1 hour ago';
    } else if (delta < (24 * 60 * 60)) {
        r = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
    } else {
        if (delta < (48 * 60 * 60)) {
            //r = formatTime(date) + ' yesterday';
            r = dateFormat(this, "h:MM TT") + ' yesterday';
        } else {
            //r = formatTime(date) + ' ' + formatDate(date);
            r = dateFormat(this, "h:MM TT") + ' ' + dateFormat(this, "mmm d");
            // r = (parseInt(delta / 86400)).toString() + ' days ago';
        }
    }

    return r;
    // pluralize a unit when the difference is greater than 1.
    /* 
    delta = Math.floor(delta);
    if (delta !== 1) { units += "s"; }
    return [delta, units, "ago"].join(" ");
    */
};

/*
* Wraps up a common pattern used with this plugin whereby you take a String
* representation of a Date, and want back a date object.
*/
Date.fromString = function(str) {
    return new Date(Date.parse(str));
};
function popWindow(url, popname, popwidth, popheight, scrolling, status) {
    window.name = "daddy";
    var scrollBoolean = "yes";
    if (scrolling) {
        scrollBoolean = scrolling;
    }
    var statusBoolean = "yes";
    if (status) {
        statusBoolean = status;
    }
    var newWidth = popwidth;
    var newHeight = popheight;
    var newTop = 0, newLeft = 0;
    if (window.outerHeight) {
        newTop = window.screenY + ((window.outerHeight - newHeight) / 2);
    }
    else {
        newTop = window.screenTop + ((document.body.offsetHeight - newHeight) / 2);
    }
    if (window.outerWidth) {
        newLeft = window.screenX + ((window.outerWidth - newWidth) / 2);
    }
    else {
        newLeft = window.screenLeft + ((document.body.offsetWidth - newWidth) / 2);
    }
    var popupWin = window.open(url, popname,
		'screenX=' + newLeft +
		',screenY=' + newTop +
		',left=' + newLeft +
		',top=' + newTop +
		',width=' + newWidth +
		',height=' + newHeight +
		',menubar=no' +
		',toolbar=no' +
		',location=no' +
		',status=' + statusBoolean +
		',resizable=yes' +
		',scrollbars=' + scrollBoolean);

    if (!document.all && window.focus) popupWin.focus();
}
function xreplace(checkMe, toberep, repwith) {
	var temp = checkMe;
	var i = temp.indexOf(toberep);
	while (i > -1) {
		temp = temp.replace(toberep, repwith);
		i = temp.indexOf(toberep, i + repwith.length + 1);
	}
	return temp;
}
