$(document).ready(function () {
    function removeH2() { $('.tabTitle', this).hide(); }

    $('.tab_content:not(.ResourceleftPanel .tab_content)').each(removeH2);

    if ($('.tab_text ul li').size() > 1) {

        $('.tabContainer').css('height', '27px')
				.find('.tabmenu').css('display', 'block')
				.find('li').live('click', function () {
				    $('.tabContainer .tabmenu li').removeClass('selected');
				    $(this).addClass('selected');
				    var getContainer = $(this).attr('get');
				    $('.tab_text ul li.selected').css('display', 'none').removeClass('selected');
				    $('.tab_text ul li.' + getContainer).css('display', 'block').addClass('selected');
				    $('.tab_text ul li.' + getContainer).each(removeH2);
				});
        $('.tabContainer .tabmenu li:first').trigger('click');
    } else {
        $('.tabContainer').remove();
    }

    $('.slidertabmenu').tabSlider();

    $('.w940 .thumbnailslider li').each(function (index, val) {
        $(this).attr('thumb', 'thumbslider' + index);
    });



    $('.w940 .large_container').each(function () {
        var liItems = $('li', this).size();

        if (liItems == 0) {
            var classArray = $(this).attr('class').split(' ');
            classItems = classArray.length;
            $('.' + classArray[(classItems - 1)]).remove();
            $('[relate="' + classArray[(classItems - 1)] + '"]').fadeOut('slow', function () { $(this).remove(); });
        }
    });

    $('.w940 .thumbnailslider').jcarousel({
        'scroll': 3,
        itemFirstInCallback: {
            onAfterAnimation: function (a, b, c) {
                $(b).trigger('click');
            }
        }
    });

    $('.w940  #mycarousel:first').each(function () {
        $('li:first', this).Sleep(200, function () {
            $(this).trigger('click');
        });
    });

    $('.w940 .thumbnailslider li').live('click', function () {

        var image = $('.thumbnail_content .image', this).html();
        var title = $('.thumbnail_content .title', this).html();
        var desc = $('.thumbnail_content .browser_content', this).html();
        var link = $('.thumbnail_content .link', this).text();

        $('.slider_large li.selected .main_resource .main_image').html(image);
        $('.slider_large li.selected .main_resource h2').html(title);
        $('.slider_large li.selected .main_resource .containerfooterLink a').attr('href', link);
        $('.slider_large li.selected .main_resource .resource_desc span:first').html(desc);

        $('.w940 .thumbnailslider li .selectedThumb').remove();
        $('.w940 .thumbnailslider li').removeClass('selected');

        if ($('.selectedThumbUp', this).size() == 0) {
            $(this).append("<div class='selectedThumbUp' />");
            $('.selectedThumbUp').css({ 'left': '4px', 'backgroundColor': '#FFFFFF' });
        }

        $(this).animate({ opacity: 1 }).css({ 'height': '64px' }).addClass('selected').find('a').css('outline', 'none');

        $('.w940 li.large_container').each(function () { if ($(this).hasClass('selected')) { $('.thumbnailslider li:not(.thumbnailslider li.selected)', this).animate({ opacity: 0.4 }).css({ 'height': '53px' }); } });
    });

    $('.w940 .thumbnailslider li:not(.w940 .thumbnailslider li.selected)').live('mouseover', function () { $(this).stop().animate({ opacity: 0.8 }); }).live('mouseout', function () { $(this).stop().animate({ opacity: 0.4 }); });


    // Linked Resources
    if ($('ul.moreLinkedResources').size() > 0) {
        $('a.linkedResourcesBtn').bind('click', function (e) {
            $('ul.moreLinkedResources').slideDown(250);
            e.preventDefault();
            removeBtn('a.linkedResourcesBtn');
        });
    }

    function removeBtn(btn) {
        $(btn).unbind('click').remove();
    }

    // Scroll to Reviews
    $('.readReviewList').live('click', function (e) {
        e.preventDefault();
        var scrollId = $('.reviewContainer').attr('id');
        //alert(scrollId);
        scrollToId(scrollId);
    });

    function scrollToId(Id) {
        $('html,body').animate({ scrollTop: $('#' + Id).offset().top }, 500);
    }

    modalFunctions();
    showReviewSummary();
    tooltips();
    characterCount();
});

function showReviewSummary() {
    var moveX = 15,
        moveY = 10;
    $('#reviewSummaryHover').appendTo('body');
    $('ul.reviewRating').not('.reviewContainer > .reviewSummary > .reviewActions > ul.reviewRating, .modalBox ul.reviewRating, #searchResults ul.reviewRating').bind('mouseover', function (e) {
        var self = $(this);
        $('#reviewSummaryHover').show();
        buildReviewSummary(self);
    }).bind('mouseout', function () {
        $('#reviewSummaryHover').hide();
        emptyReviewSummary();
    });

    $('ul.reviewRating').not('.reviewContainer > .reviewSummary > .reviewActions > ul.reviewRating, .modalBox ul.reviewRating, #searchResults ul.reviewRating').bind('mousemove', function (e) {
        $('#reviewSummaryHover').css('top', e.pageY + moveY).css('left', e.pageX + moveX);
    });
}

function buildReviewSummary(thisRating) {
    //var thisReview = (thisRating.closest('div.userReview').size() > 0) ? thisRating.closest('div.userReview') : thisRating.closest('.reviewTotal'),
    var thisReview = (thisRating.closest('div.userReview').size() > 0) ? thisRating.closest('div.userReview') : thisRating.closest('.reviewActions'),
        author = (thisReview.find('.reviewerMeta').size() > 0) ? thisReview.find('.reviewerMeta dd:eq(0)').text() : '',
        authorName = author.substring(0, author.length-3),
        values = thisReview.find('.summaryValues').val().split(','),
        summary = $('#reviewSummaryHover');

    // Don't put in author name if it's for main resource summary
    if ((authorName != undefined) && (authorName != '')) {
        summary.find('h3 span').text('(' + authorName + ')');
    }
    
    $.each(values, function (i, val) {
        var int = parseInt(val);
        summary.find('span.rating:eq(' + i + ')').text(val);
        summary.find('li.currentRating:eq(' + i + ') span').text(val);
        summary.find('li.currentRating:eq(' + i + ')').css({ 'width': val * 30 });
        if (i == values.length - 1) {
            summary.find('div.reviewActions p span').text(val);
            summary.find('li.currentRating:eq(' + i + ')').css({ 'width': val * 12 });
        }
    });
}

function emptyReviewSummary() {
    var summary = $('#reviewSummaryHover');
    summary.find('h3 span').text('');
    summary.find('span.rating').text('');
    summary.find('li.currentRating span').text('');
    summary.find('li.currentRating').css({ 'width': 0 });
    summary.find('div.reviewActions p span').text('');
}

function modalFunctions() {
    
    // Add Review Modal
    $('.addReview').live('click', function (e) {
        $('.modalBox').addClass('submitReview');
        $('.submitReviewWrap').show();
        showModal();
        e.preventDefault();
    });

    // Close Submit Review Modal
    $('.modalBox #submitReview div.cancelBtn input, .modalBox #submitReview .modalClose, .modalBox #submitReview .submitBtn input').unbind('click').bind('click', function (e) {
        $('.modalOverlay, .modalBox').fadeOut(500, emptyModal);
    });

    // Cancel Review Helpful Buttons and Report Review Link in Preview
    $('.modalBox div.previewPanel div.reviewHelpfulBtn, .modalBox div.previewPanel a.reportReview').unbind('click').bind('click', function (e) {
        e.preventDefault();
    });
    
    //Report Review Modal
    $('.reportThisReview').live('click', function (e) {
        $('.modalBox').addClass('reportReview');
        $('.reportReviewWrap').show();
        showModal();
    });

    // Cancel and Close Report Review Modal
    $('.modalBox #reportReview div.cancelBtn input, .modalBox #reportReview .modalClose').live('click', function (e) {
        $('.modalOverlay, .modalBox').fadeOut(500, emptyModal);
    });

    // Force Window Resize on Report Review Client Validation
    $('.modalBox #reportReview div.submitBtn input').live('click', function () {
        $(window).trigger("resize");
    });

}

function showModal() {
    var modal = $('.modalBox'),
        modalOverlay = $('.modalOverlay'),
        windowH = $(window).height(),
        modalH = modal.outerHeight(),
        posTop = (windowH - modalH) / 2,
        OverlayH = ($('#page-container').hasClass('ie6')) ? $(document).height() + 20 : windowH,
        OverlayW = $(window).width();

    if ($('.modalBox').css('display') != 'block') {
        modal.css({ 'top': posTop + 'px', 'display': 'none' });
        modalOverlay.css({ 'top': '0px', 'height': OverlayH, 'display': 'none', 'left': '50%', 'margin-left': -(OverlayW / 2), 'width': OverlayW });
        modal.fadeIn(500);
        modalOverlay.fadeTo(500, 0.7);
    } else if ($('.modalBox').css('display') == 'block') {
        modal.css({ 'top': posTop + 'px' });
        modalOverlay.css({ 'top': '0px', 'height': OverlayH, 'left': '50%', 'margin-left': -(OverlayW / 2), 'width': OverlayW });
    }

    $(window).resize(function () {
        if ($('.modalBox').css('top') != '-999em' && $('.modalBox').css('display') == 'block') {
            var modal = $('.modalBox'),
                modalOverlay = $('.modalOverlay'),
                windowH = $(window).height(),
                modalH = modal.outerHeight(),
                posTop = (windowH - modalH) / 2,
                OverlayH = ($('#page-container').hasClass('ie6')) ? $(document).height() + 20 : windowH,
                OverlayW = $(window).width();

            modal.css({ 'top': posTop + 'px' });
            modalOverlay.css({ 'top': '0px', 'height': OverlayH, 'left': '50%', 'margin-left': -(OverlayW / 2), 'width': OverlayW });
        }
    });
}

function emptyModal() {
    $('.modalBox, .modalOverlay').css({ 'top': '-999em' });
    if ($('.modalBox').hasClass('submitReview')) {
        // Reset Modal Box
        $('.modalBox .rateResource .currentRating').each(function () {
            $(this).css({ 'width': '0px' });
        });
        $('.modalBox .ReviewTitle').val('');
        $('.modalBox .ReviewBody').val('');
        $('.modalBox .previewPanel').hide();
        $('.modalBox .submitReviewWrap').hide();
        $('.modalBox .reviewPanel').show();
        $('.modalBox').removeClass('submitReview');
    } else if ($('.modalBox').hasClass('reportReview')) {
        // Reset Modal Box
        $('.modalBox .reportReviewWrap').hide();
        $('.modalBox').removeClass('reportReview');
    }
}


//
//  Tooltips
//
function tooltips() {
    $('.modalBox .tooltip > a.open').die('click').live('click', function (e) {
        var self = $(this).closest('.tooltip');
        e.preventDefault();
        if (self.find('.tooltipBody').css('display') == 'block') {
            return false;
        } else {
            closeOpenedTooltips();
            if ($('body').hasClass('la')) {
                self.find('.tooltipBody').prepend('<a href="#" class="close" title="Cerrar">Cerrar</a>');
            } else {
                self.find('.tooltipBody').prepend('<a href="#" class="close" title="Close">Close</a>');
            }
            if ($('#page-container').hasClass('ie6') || $('#page-container').hasClass('ie7')) {
                if (!self.closest('fieldset').hasClass('step3')) {
                    $('#submitReview fieldset.step1').css({ zIndex: 3 });
                    $('#submitReview fieldset.step2').css({ zIndex: 2 });
                    $('#submitReview fieldset.step3').css({ zIndex: 1 });
                    self.closest('dt').css({ zIndex: 3 });
                    self.closest('dt').next('dd').css({ zIndex: 2 });
                } else {
                    $('#submitReview fieldset.step1').css({ zIndex: 3 });
                    $('#submitReview fieldset.step2').css({ zIndex: 2 });
                    $('#submitReview fieldset.step3').css({ zIndex: 5 });
                }
            }
            self.find('.tooltipBody').show();
        }
    });

    $('.modalBox .tooltip > .tooltipBody > a.close').die('click').live('click', function (e) {
        e.preventDefault();
        $(this).closest('.tooltipBody').hide();
        $(this).closest('.tooltipBody').find('.close').remove();
        if ($('#page-container').hasClass('ie6') || $('#page-container').hasClass('ie7')) {
            $('#submitReview fieldset').each(function () {
                $(this).css({ zIndex: 1 });
            });
        }
    });
}

function closeOpenedTooltips() {
    $('.modalBox .tooltipBody').each(function () {
        var self = $(this);
        if (self.css('display') == 'block') {
            self.hide(); 
            self.find('.close').remove();
            if ($('#page-container').hasClass('ie6') || $('#page-container').hasClass('ie7')) {
                $('#submitReview fieldset').each(function () {
                    $(this).css({ zIndex: 1 });
                });
            }
        }
    });
}

//
// Character Count
//
function characterCount() {
    $('.modalBox fieldset, .modalBox .formField').each(function () {
        var self = $(this),
		el = self.find('textarea');

        if (el.attr('data-count-chars') == 'true') {
            var counterEl = self.find('.chars-remain'),
			limit = Number(counterEl.text());
            self.find('.char-count').css({ 'display': 'block' });
            countChars(el, counterEl, limit);
        }
    });
}

function countChars(field, counter, limit) {
    // Only allow backspace and delete keys if limit is reached
    // Keylist can be extended
    field.bind('keydown', function (e) {
        var value = field.val(),
		size = value.length,
		newCount = limit - size;
        if (size == limit) {
            limitError(field, limit);
            if ((e.keyCode >= 16 && e.keyCode <= 17) || (e.keyCode >= 35 && e.keyCode <= 40)) {
                clearLimitError(field);
            }
            else if (e.keyCode == 8 || e.keyCode == 46) {
                counter.text(newCount);
                clearLimitError(field);
            } else {
                return false;
            }
        }
    });
    // Show Counter, truncate if limit exceeded
    // ie Cut and Paste
    field.bind('keyup', function (e) {
        var value = field.val(),
		size = value.length,
		newCount = limit - size;
        if (newCount < 0) newCount = 0;
        // only show error if they are typing more code - not navigating textbox
        if (size >= limit && !((e.keyCode >= 16 && e.keyCode <= 17) || (e.keyCode >= 35 && e.keyCode <= 40))) {
            field.val(value.substring(0, limit));
            limitError(field, limit);
            counter.text(newCount);
        } else if (size != limit) {
            counter.text(newCount);
        }
    });

    function limitError(field, limit) {
        var errorDialog = field.parent().children('.limitError');
        field.addClass('error');
        errorDialog.find('.limit').text(limit);
        errorDialog.show();
    }
    function clearLimitError(field) {
        var errorDialog = field.parent().children('.limitError');
        field.removeClass('error');
        errorDialog.hide();
    }

    var value = field.val(),
    size = value.length,
	newCount = limit - size;
    counter.text(newCount);
}

