// gcsEscId & gcsEscExpr
(function($){
    $.extend({
        gcsEscId: function(s){},
        gcsEscExpr: function(s){}
    });

    var tryescapes = "\\#;&,.+*~':\"!^$[]()=>|/";

    gcsEscape("gcsEscId", "#.");
    gcsEscape("gcsEscExpr", "[id=.]");

    function gcsEscape(fn, pattern) {
        $[fn] = function(s) {
            var esc = test(pattern);
            if (esc) {
                var RE = new RegExp("([" + esc.replace("]", "\\]") + "])", "g");
                $[fn] = function(s) {
                    return s.replace(RE, "\\$1");
                }
            } else {
                $[fn] = returnArg;
            }
            return $[fn](s);
        }
    }

    function returnArg(s) {return s}

    function test(pattern) {
        var test = $("<div/>");
        var toEscape = "";
        for (var i = 0; i < tryescapes.length; i++) {
            var c = tryescapes.substring(i, i + 1);
            var id = "a" + c + "b";
            test.attr("id", id);
            try {
                var escaped = pattern.replace(".", "a\\" + c + "b");
                var unescaped = pattern.replace(".", "a" + c + "b");
                if (test.filter(escaped).length) {
                    toEscape += c;
                } else if (!test.filter(unescaped).length) {
                    if (window['console'] && $.isFunction(console.log))
                    console.log("WARNING: jQuery does not support: " + unescaped + " / " + escaped);
                }
            } catch (e) {
                toEscape += c;
            }
        }
        return toEscape;
    }
})(jQuery);

// default Text for inputs
jQuery(function($){
    var trim = new RegExp("^\\s+|\\s+$", "g");

    $("label.none[for],label.hidden[for]").each(function() {
        var _for = $(this).attr("for");
        var t = $(this).text();
        $('#' + $.gcsEscId(_for)).attr("title", t.replace(trim, ""));
    });

    $("input[type=text][title]").live("focus", defaultTextOnFocus).live("blur", defaultTextOnBlur).each(defaultTextOnBlur);
    $("form").live("submit", defaultTextOnSubmit).live("reset", defaultTextOnReset);

    function defaultTextOnReset(){
        var $$ = $("input[type=text][title]", this);
        window.setTimeout(function(){
            $$.each(defaultTextOnBlur);
        }, 1);
    }

    function defaultTextOnSubmit(){
        $("input[type=text][title]", this).each(defaultTextOnFocus);
    }

    function defaultTextOnFocus() {
        var $$ = $(this);
        if ($$.val() == $$.attr("title")) $$.val("");
        $$.removeClass("defaultValue");
    }

    function defaultTextOnBlur() {
        var $$ = $(this);
        var v = $$.val();
        var t = $$.attr("title");
        if (!v || v == t) {
            $$.val(t);
            $$.addClass("defaultValue");
        }
    }
});

// datepicker
jQuery(function($){
    var datepickerOptions = {
        dayNames: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
        dayNamesMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"],
        dayNamesShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"],
        monthNames: ["Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"],
        monthNamesShort: ["Jan", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"],
        dateFormat: 'dd.mm.yy',
        firstDay: 1,
        changeMonth: true,
        changeYear: true
    };

    var d = new Date(1, 0, (new Date()).getYear() - 30);
    $('input.birthday').datepicker($.extend({ minDate: "-90y", maxDate: "-10y", yearRange: "-90y:-10y", defaultDate: "-30y", gotoCurrent: true}, datepickerOptions));
    $('input.datepicker').datepicker($.extend({ minDate:"01.01.07", maxDate:"+3y", defaultDate: "null" }, datepickerOptions));
});

// tinyMCE
jQuery(function($){
    var tinymceOptions = {
        script_url: "/media/js/tiny_mce/tiny_mce.js",
        theme : "advanced",
        theme_advanced_toolbar_align : "left",
        theme_advanced_buttons1 : "bold,italic,underline,cleanup,justifyleft,justifycenter,justifyright,link,unlink",
        theme_advanced_buttons2 : "",
        theme_advanced_buttons3 : "",
        theme_advanced_toolbar_location : "top",
        width:"500px",
        language: "en"
    };

    $("textarea.mceEditor").tinymce(tinymceOptions);
});

// twoArray Editor
jQuery(function($){
    var escape;
    $("ul.twoArray").each(function() {
        var $$ = $(this);
        $$.wrap("<div/>");
        var wrapper = $$.parent().attr("class", "twoArray-wrapper");
        var available = $$.clone();
        available.removeClass("twoArray").addClass("twoArray-available");
        available.find("input").remove();
        available.appendTo(wrapper);
        wrapper.bind("change", onChange).bind("click", onClick);
        $$.parents("form:first").bind("reset", onReset);
        $$.find("input").trigger("change");
    });

    function onReset(e){
        var form = this;
        window.setTimeout(function(){
            $(".twoArray-wrapper input", form).trigger("change");
        }, 1);
    }

    function onChange(e){
        var target = $(e.target);
        var checked = target.is(":checked");
        $("label[for=" + $.gcsEscExpr(target.attr("id")) + "]", this).each(function(){
            var el = $(this).parents("li:first");
            if (checked ^ el.is(".twoArray-available li")) {
                el.show();
            } else {
                el.hide();
            }
        });
    }

    function onClick(e){
        var target = $(e.target).parents("label:first");
        if (target.is("label[for]")) {
            var input = $(this).find("input#" + $.gcsEscId(target.attr("for")));
            if (input.length) {
                if (input.attr("checked")) {
                    input.attr("checked", "");
                } else {
                    input.attr("checked", "checked");
                }
                input.trigger("change");
                return false;
            }
        }
    }
});

jQuery(function($){
    $("head:first").append('<style type="text/css">.label_tooltip {display: none;}</style>');
    $(".label_tooltipped[id]").live("mouseover", function(){

        $("label[for=" + $.gcsEscExpr($(this).attr("id")) + "]").addClass("jlabel_tooltip").show();
    }).live("mouseout", function(){
        $("label[for=" + $.gcsEscExpr($(this).attr("id")) + "]").hide();
    })
});

