$(function() {
    
    
    // Strict fix for target = _blank
    $('a[rel$="external"]').live("click", function(){
        this.target = '_blank';
    });
    
    // Accessibility contrast
    if ($.cookie('high_contrast')) $('body').addClass('contrast');
    $('#contrast').click(function(){
        if ($.cookie('high_contrast')) {
            $('body').removeClass('contrast');
            $.cookie('high_contrast', null, {path: '/'});
        } else {
            $('body').addClass('contrast');
            $.cookie('high_contrast', 'true', {path: '/'});
        }
    });
    
    // Accessibility text size
    if ($.cookie('text_size')) $('body').addClass('text-size-' + $.cookie('text_size'));
    $('#text-size > a').click(function(){
        if ($(this).hasClass('large-text') || ($(this).hasClass('change-text-size') && !$('body').hasClass('text-size-large') && !$('body').hasClass('text-size-largest'))) {
            $('body').removeClass('text-size-largest').addClass('text-size-large');
            $.cookie('text_size', 'large', {path: '/'});
        } else if ($(this).hasClass('largest-text') || ($(this).hasClass('change-text-size') && $('body').hasClass('text-size-large'))) {
            $('body').removeClass('text-size-large').addClass('text-size-largest');
            $.cookie('text_size', 'largest', {path: '/'});
        } else {
            $('body').removeClass('text-size-large').removeClass('text-size-largest');
            $.cookie('text_size', null, {path: '/'});
        }
    });
    
    // Adds required * to all required form elements
    $('.required').not('span').each(function () {
        $('label[for = '+this.id+']').not('.radio').append('<span class="required">*</span>');
    });
    
    // Initializes tabs and follows href instead of selecting tab if complete url
    $('.tabs').tabs({
        select: function(event, ui) {
            var url = $.data(ui.tab, 'load.tabs');
            if( url ) {
                location.href = url;
                return false;
            }
            return true;
        }
    });
    
    // File archive
    $('#file-archive > ul').find('.column').hover(
        function () {
            $(this).siblings('.column').andSelf().addClass("highlight");
        },
        function () {
            $(this).siblings('.column').andSelf().removeClass("highlight");
        }
    );
    
    $('#file-archive > ul.menu').find('.column').click(function () {
        if ($(this).parent().hasClass('folder')) {
            if ($(this).nextAll('ul').length > 0) {
                $(this).nextAll('ul').slideToggle('fast', function() {
                    changeIcon($(this));
                });
            } else {
                changeIcon($(this));
            }
        } else {
            window.location = $(this).parent().find('a').attr('href');
        }
    });
    
    initHoverEffect();
    initSubMenu();
});

// Used by file archive
function changeIcon(elm) {
    var icon = elm.parent().children('.name').find('img');
    if (icon.attr('src').search(/icon-folder-open./) != -1) {
        icon.attr('src', icon.attr('src').replace(/icon-folder-open./, 'icon-folder.'));
    } else {
        icon.attr('src', icon.attr('src').replace(/icon-folder./, 'icon-folder-open.'));
    }
}

// Reloads captcha image
function reloadCaptcha(imageId) {
    var src = document.getElementById(imageId).src;
    document.getElementById(imageId).src = src.split('?')[0] + '?' + (new Date()).getTime();
}

function initMembers(linkText) {
    var topLevelElements = $(".members .member");
    $("<a>").addClass("readmore").css("cursor", "pointer").insertBefore($(topLevelElements).find(".detail:last"));
    $("<span>").addClass("readmoretext").text(linkText).css({opacity:0, display:"blocK"}).appendTo(topLevelElements.find(".readmore"));
    topLevelElements.mouseover(function () {
        if (!window.memberOver) $(this).find(".readmore:not(.active)").find(".readmoretext").stop().animate({"opacity": 1});
        window.memberOver = true;
        
    });
    topLevelElements.mouseout(function () {
        window.memberOver = false;
        $(this).find(".readmore").find("span").stop().animate({"opacity": 0});
    });
    topLevelElements.find(".details")
       .find(".description").hide();
    topLevelElements
       .click(function(e) {
           if (e.target.href) return;
           var member = $(this).closest(".members .member");
           var link = $(this).find(".readmore");
           if(link.hasClass("active")) {
               member.find(".description").slideUp("", function() {
                   
                   link.removeClass("active").insertBefore(member.find(".detail:last")).find(".readmoretext").stop().css("visibility", "visible");
               });
           } else {
               link.addClass("active").insertAfter(member.find(".description").slideDown()).find(".readmoretext").stop().css("visibility", "hidden");
           }
       });
}

jQuery.fn.scrollTo = function (duration, easing, callback) {
    var $$ = this;
    $("html, body").animate({
        scrollTop: $$.offset().top
    }, duration, easing, callback);
    return this;
}

jQuery.fn.itemAfter = function (obj) {
    obj = $(obj);
    var idx = -1;
    this.each(function(i) {
        if(this == obj[0]) idx = i;
    });
    if (idx >= 0) {
        return this.eq(idx+1)
    } else {
        return $([]);
    }
}
jQuery.fn.inputHelpText = function () {
    $$ = $(this);
    $$.each(function () {
        this.initialValue = $(this).val();
        $(this).addClass("helptext");
        $(this).focus(function () {
            if ($(this).val() == $(this)[0].initialValue) $(this).val("").removeClass("helptext");
        });
        $(this).blur(function () {
            if ($(this).val() == "") $(this).val($(this)[0].initialValue).addClass("helptext");
        });
    });
    return $$;
}
jQuery.fn.suhlides = function (options) {
    var obj = $(this).eq(0);
    var defaults = {
        animationDuration : 750,
        slideInterval : 10000,
        slideSelector : ".item",
        nextClass : "next",
        prevClass : "prev",
        activeClass : "active",
        navigClass : "navig",
        insertNavigAfter : obj.find("a:has(img)")
    };
    
    
    options = $.extend({}, defaults, options);
    options.insertNavigAfter = $(options.insertNavigAfter);
    var navig = "."+options.navigClass;
    $("<div/>")
        .addClass(options.navigClass)
        .addClass("clearfix")
        .insertAfter(options.insertNavigAfter);
    obj.find(options.slideSelector).each(function(i) {
        $("<a>")
            .text(i+1)
            .click(function (e) {
                e.stopPropagation();
                showSlide(i);
            })
            .appendTo(navig);
    });
    
    obj.hover(function () {
        obj[0].slideShowHover = true;
    },
    function () {
        obj[0].slideShowHover = false;
    });
    obj.find(options.slideSelector)
    .removeClass(options.activeClass)
    .css("display", "none")
    .eq(0).addClass(options.activeClass);
    showSlide(0);
    function showSlide(i) {
        
        obj.find(options.slideSelector).stop(true, true);
        obj.find(options.slideSelector).filter("."+options.activeClass)
        .fadeOut(options.animationDuration, function () {
            obj.find(options.slideSelector).each(function () {
                $(this).find("."+options.navigClass).find("a[class!='prev'][class!='next']")
                .removeClass(options.activeClass)
                .eq(i).addClass(options.activeClass);
            });
        
            obj.find(options.slideSelector).removeClass(options.activeClass).css("display", "none").eq(i)
            .addClass(options.activeClass)
            .fadeIn(options.animationDuration);
        });
    }
    
    function getCurrentSlide() {
        return obj.find(options.slideSelector).index(obj.find(options.slideSelector+"."+options.activeClass)[0]);
    }
    
    function getSlideCount() {
        return obj.find(options.slideSelector).length;
    }
    
    function flipSlides(pageCount) {
        showSlide((getSlideCount() + getCurrentSlide() + pageCount) % getSlideCount());
    }
    
    $(".inner-casenav a.prev").click(function () {
        flipSlides(- 1);
    });
    
    $(".inner-casenav a.next").click(function () {
        flipSlides(1);
    })
    
    window.setInterval(function () {
        if (! obj[0].slideShowHover) flipSlides(1);
    },
    options.slideInterval);
    
    return obj;
}

function initAgreementForm() {
    /* fee calculation */
    function updateTotal(e) {
        var level = parseInt($("input[name=level]:checked").val()) - 1;
        var pickerValues = $("#interval_picker").val().split(",");
        var fee = $("#interval_picker").val().split(",")[level];
        $("#interval").val(pickerValues[pickerValues.length-1]);
        $(".interval-display").text($("#interval").val());
        if (!isNaN(level)) {
            $(".total").val(fee);
            $(".total-display").text(fee);
            $(e.currentTarget).closest(".step").find(".nextbutton").removeAttr("disabled");
        }
    }
    
    $("#accept").click(function (e) {
        var submitButton = $(e.currentTarget).closest(".step").find("input:submit");
        if ($(this).is(":checked")) {
            submitButton.removeAttr("disabled").removeClass("disabled");
        } else {
            submitButton.attr("disabled", "disabled").addClass("disabled");
        }
    });
    
    $("input[name=level], #interval_picker").click(updateTotal);
    
    /* multipart forms */
    
    $(".nextbutton").show().click(function (e) {
        var $$ = $(e.currentTarget);
        //$("h1").scrollTo();
        $(".step.active").removeClass("active").slideUp(function () {
            $(".step").itemAfter($$.closest(".step")).addClass("active").slideDown(function () {
            });
        })
    });
    
    $(".step").eq(0).addClass("active");
    $(".step:not(.active)").hide();
}
function initHoverEffect() {
    $(".list .item, .contacts .contact, .partners .partner, .banners .banner, .searchresults .search-results, .features .feature, .resultgroups .resultgroup, .media-section .media-article")
        .not(".noblockhighlight")
        .filter(":has(a)")
        .css("cursor", "pointer")
        .hover(function () {
            $(this).addClass("listhover");
        }, function () {
            $(this).removeClass("listhover");
        })
        .click(function (e) {
            e.preventDefault();
            var firstLink = $(this).find("a");
            if (firstLink.attr("rel") == "external") {
                window.open(firstLink.attr("href"));
            } else {
                location = firstLink.attr("href");
            }
            
        });
}

function initShareBar() {
    $("<div>").addClass("share-label").insertAfter(".share-bar ul");
    $(".share-bar li").hover(function () {
        $(this).closest(".share-bar").find(".share-label").text($(this).text());
    }, function () {
        $(this).closest(".share-bar").find(".share-label").text("");
    })
    $("#share-bar-tip-dialog input.text, #share-bar-tip-dialog textarea").inputHelpText();
    $(".share-bar .print").click(function () {
        window.print();
    });
    $("#tip-from-email").change(function () {$("#tip-from-name").val($(this).val());}); /* hack to avoid empty from-name bug */
}

function initSubMenu() {
    var links = $("#sub-menu .accordion li:has(ul) > a")
        .closest("li").find("ul").hide().end().end()
        .click(function (e) {
            //e.preventDefault();
            $$ = $(e.currentTarget);
            $$.closest(".accordion").find(".expanded").removeClass("expanded").end()
                .find(".plus-minus").removeClass("hl").text("+").end()
                .find("ul").slideUp("fast").find(".plus-minus");
        });
        
      $("<span>").addClass("plus-minus").addClass("hl").text("+").removeClass("hl").appendTo(links);
      $("#sub-menu .accordion > li ").hover(function () {
        $(this).find(".plus-minus").addClass("hl");
      }, function () {
        $(this).not(".expanded").find(".plus-minus").removeClass("hl");
      });
      var $$ = $("#sub-menu .active").closest("li:has(.toplevel)").find(".toplevel");
      
            var isActive = $$.closest("li").hasClass("expanded");
            $$.closest(".accordion")
               .find("li").removeClass("expanded");
            if (!isActive) {
                $$.closest("li").addClass("expanded")
                   .find("ul").slideDown().end()
                   .find(".plus-minus").text("-").addClass("hl");
            }
            $("#sub-menu li li ").css("min-width", "0"); //ie7 peekabo fix
      $$.closest(".accordion").find("li:not(.expanded) .plus-minus").text("+");
}