/// <reference path="~\Headers\Scripts\jquery-1.3.2-vsdoc.js" />

/* === Additional Selectors === */
jQuery.expr[':'].containsTextNoCase = function(a, i, m) {
    return (a.textContent || a.innerText || '').toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
}

jQuery.expr[':'].startsWithNoCase = function(a, i, m) {
    return (a.textContent || a.innerText || '').toUpperCase().indexOf(m[3].toUpperCase()) == 0;
}

jQuery.expr[':'].regex = function(elem, index, match) {
    var matchParams = match[3].split(','),
        validLabels = /^(data|css):/,
        attr = {
            method: matchParams[0].match(validLabels) ?
                        matchParams[0].split(':')[0] : 'attr',
            property: matchParams.shift().replace(validLabels, '')
        },
        regexFlags = 'ig',
        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g, ''), regexFlags);
    return regex.test(jQuery(elem)[attr.method](attr.property));
}
/* === */

$.ajaxSetup({
    // Disable caching of AJAX responses */
    cache: false
});

jQuery.preloadImages = function() {
    for (var i = 0; i < arguments.length; i++) {
        jQuery("<img>").attr("src", arguments[i]);
    }
}

// JavaScript Document
$(document).ready(function() {
    $(".loadingBox").modalPanel('Daten werden geladen...');
    $(".savingBox").modalPanel('Bitte warten...');
    // SearchBox aktivieren: Heißt, Value verschwindet bei Focus
    $(".jqSearchBox").searchBox();

    // Konstanten
    var KEY = {
        RETURN: 13,
        TAB: 9,
        SHIFT: 16
    };

    // Fix für einige Browser
    $("#gValidationSummary").height($("#gValidationSummary").height() - 5);

    $("#gValidationSummary a").click(function(event) {
        $(this).parent().parent().fadeOut();
        return false;
    });

    // Skip aktivieren: Wenn maximale Länge erreicht ist, in nächstes Textfeld springen
    $(".jqSkip").keyup(function(event) {
        if (event.keyCode == KEY.SHIFT || event.keyCode == KEY.TAB) // TAB/Shift Kombinationen etc. erlaubt
            return;

        if ($(this).val().length >= $(this).attr("maxlength")) { //>= "zur Sicherheit"...

            if ($(this).next(":text").size() > 0) {
                $(this).next(":text").focus();
                $(this).next(":text").select();
            }
            else if ($(this).attr("id") == "Zu2FS") {
                $("#Zu3FS").focus();
                $("#Zu3FS").select();
            }
        }
    });

    // Hover Intent: Dropdown mit leicht verzögertem Öffnen und Schließen
    $("ul.toolBar .ddd").hoverIntent({
        sensitivity: 2,
        interval: 200,
        timeout: 500,
        over: function() {
            $(".toolBarMenu", this).fadeIn("fast");
        },
        out: function() {
            $(".toolBarMenu", this).fadeOut("normal");
        }
    });
    $("ul.toolBar .ddd a.trigger").click(function() {
        $(".toolBarMenu", $(this).parent()).toggle();
    });

    // Hover Instant: Dropdown mit sofortigem Öffnen und Schließen


    // Hover Intent: Dropdown mit leicht verzögertem Öffnen und Schließen
    $("ul.toolBar .eee").hoverIntent({
        sensitivity: 2,
        interval: 1,
        timeout: 0,
        over: function() {
            $(".toolBarMenu", this).fadeIn("fast");
        },
        out: function() {
            $(".toolBarMenu", this).fadeOut("normal");
        }
    });
    $("ul.toolBar .eee a.trigger").click(function() {
        $(".toolBarMenu", $(this).parent()).toggle();
    });

    // Alternate Rows (Styling)
    $(".alternateRows tr:not(.na)").each(function(i) {
        $(this).addClass(i % 2 == 0 ? "evenRow" : "oddRow");
    });

    // rel="ext" für Links, die im neuen Fenster geöffnet werden sollen
    $("a[rel='ext']").attr("target", "_blank");

    $(".clean").click(function() {
        $(this).parents("form").each(function() {
            $(':input', this).each(function() {
                var type = this.type, tag = this.tagName.toLowerCase();
                if (type == 'text' || type == 'password' || tag == 'textarea')
                    this.value = '';
                else if (type == 'checkbox' || type == 'radio')
                    this.checked = false;
                else if (tag == 'select')
                    this.selectedIndex = -1;
            });
        });

        $(this).parents("form").find("input:first").focus();
        return false;
    });

    // Collapse Controls
    $(".collapseCtrl").click(function(event) {
        var cls = "." + $(this).attr("id");
        $(this).toggleClass("collapseCtrlClosed");
        $(cls).toggleClass("hidden");
        return false;
    });

    // Sind gleich zu Anfang bestimmte Felder geschlossen?
    $(".collapseCtrlClosed").each(function(event) {
        var cls = "." + $(this).attr("id");
        $(cls).toggleClass("hidden");
    });


    // Submit Buttons
    $(".submit").click(function() {
        if ($(this).attr("href").length > 2)
            $(this).parents("form").attr("action", $(this).attr("href"));

        $(this).parents("form").submit(); // Klasse Submit: Immer direkt Submit auslösen
        return false;
    });


    // Autosubmit forms anmelden... Die Parent-Form wird automatisch abgeschickt
    // Zunächst war "change" als Aktion hinterlegt, doch die greift im IE erst beim "Blur"
    $(":checkbox.autosubmit,:radio.autosubmit").click(function() {
        $(this).parents("form").submit();
    });


    // Forms mit Klasse "submitonenter" können mit der ENTER Taste ausgelöst werden
    // Keydown zwecks IE, keypress hätte für FF gereicht etc.
    $("form.submitOnEnter").keypress(function(event) {
        if (event.keyCode == KEY.RETURN) {
            event.preventDefault();
            $(this).submit();
        }
        return true;
    });

    $("img.clickable").click(function(event) {
        var objOffset = $(this).offset();
        var x = event.pageX - objOffset.left;
        var y = event.pageY - objOffset.top;
        $(this).parent().attr("href", $(this).parent().attr("href") + x + "/" + y);
    });

    // Tabellen, die Links mit einer "def" Klasse besitzen
    $(".defaultClickTable tr:has(a.def)").click(function(event) {
        // Gibt es innerhalb dieser Zeile einen Link mit css Klasse "def"?
        if ($("a.def:first", this).attr("href") &&
            $(event.target).is("tr,td,span,div,li") &&
            !$(event.target).parent().is("a")) {

            location.href = $("a.def:first", this).attr("href");
        }
    });


    // ATP Sortiment Icons
    $(".expCol.o").append('<div class="star" title="Angebote vorhanden"></div>');
    $(".expCol.t").append('<div class="text" title="Beschreibung vorhanden"></div>');
    $(".expCol.i").append('<div class="pic" title="Weitere Bilder vorhanden"></div>');
    $(".expCol.d").append('<div class="down" title="Downloads vorhanden"></div>');

    $(".ajaxHover").hover(function() {
        var objThisRef = this;

        if ($("a.ajaxHref", this).length > 0) // Es existiert noch ein Url Loader Link...
            this.ajaxHref = $("a.ajaxHref", this).attr("href"); // Was soll gelanden werden?

        $(".ajaxHoverArea", this).fadeIn("normal", function() {
            $(".ajaxHoverArea", $(objThisRef)).load(objThisRef.ajaxHref); // Laden und einsetzen - damit wird das ajaxHref Objekt zerstört!
        });
    }, function() {
        $(".ajaxHoverArea", this).fadeOut("normal");
    });
    $("a.ajaxHref").click(function() { return false; });

    $(".input-validation-error").eq(0).focus();

    $("div.images div.image a").click(function() {
        ChangeBigImage($(this));
        return false;
    });

    $("div.images div.image:first a").ready(function() {
        ChangeBigImage($(this));
    });

    function ChangeBigImage(Link) {
        $("div.images div.image").removeClass("selected");
        Link.parent().addClass("selected");
        var strUrl = Link.find("img").attr("src");

        if (strUrl != null) {
            var intIndexOf = strUrl.indexOf('?');
            var intMaxWidth = $("#idBigImage").width();
            strUrl = strUrl.substr(0, intIndexOf) + "?h=" + intMaxWidth + "&w=" + intMaxWidth;
            $("#idBigImage").find("img").attr("src", strUrl);
        }
    }

    $(".ajaxClick").click(function() {
        var $objParent = $(this).parent();
        var strUrl = $(this).attr("href");

        $(this).toggleClass("expanded");

        if ($(this).hasClass("expanded")) {

            $(".ajaxClickArea", $objParent).fadeIn("normal", function() {
                $(".ajaxClickArea", $objParent).load(strUrl, function() {
                    $(".ajaxClickArea ul li", $objParent).click(function() {
                        location.href = $("a:first", this).attr("href");
                        return false;
                    });
                });
            });
        }
        else {
            $(".ajaxClickArea", $objParent).fadeOut("normal");
        }

        return false;
    });
});
