/*jslint bitwise: true, browser: true, eqeqeq: true, evil: true, forin: true,
nomen: true, onevar: true, plusplus: true, regexp: true, undef: true,
white: true */
/*global jQuery, console, dotLBDetect, nova */

if (typeof dotLBDetect === "undefined") {

    if (typeof String.trim === "undefined") {
        String.prototype.trim = function () {   // missing method trim for all strings
            return this.replace(/^\s+|\s+$/g, "");
        };
    }

    jQuery.noConflict();        // jQuery with no conflict to other js libraries
    nova = this.nova || {};     // container of all our javascript functionality

    nova.cookie = {             // cookie handling
        "get" : function (name) {
            for (var cookie = document.cookie.split(";"),
                    i = cookie.length - 1, element; i > -1; i -= 1) {
                element = cookie[i];
                if (name === element.substring(0, element.indexOf("="))) {
                    return element.substring(element.indexOf("=") + 1,
                            element.length);
                }
            }
            return null;
        },
        "remove" : function (name) {
            document.cookie = name +
                    "=; expires=Thu, 01-Jan-70 00:00:01 GMT;";
            return document.cookie;
        },
        "set" : function (name, value, duration, domain, path, secure) {
            document.cookie = [
                    name, "=", value,
                    (duration ? "; expires=" + new Date(new Date().
                            getTime() + duration).toGMTString() : ""),
                    (domain ? "; domain=" + domain : ""),
                    (path ? "; path=" + path : ""),
                    (secure ? "; secure" : "")
                ].join("");
            return document.cookie;
        }
    };

    nova.glossary = nova.glossary || {};        // glossary entries (created by glossary.vtl) and functionality
    nova.glossary.get = function (key, ajax) {  // gets glossary entry description
        jQuery.ajax({
            "success" : function (data) {
                var text = data.trim();
                if (text && text !== "null") {
                    jQuery("." + key).addClass("inGlossaryActive").
                            attr("title", text);
                }
            },
            "url" : ajax + key
        });
    };
    nova.glossary.make = function () {  // searchs side for glossary entries
        if (nova.glossary.entries) {
            var ajax, key, mark, node, text;

            ajax = "/_global/scripts/glossareintrag.html?id=";
            node = jQuery("#nova-content");
            text = node.html();

            mark = function (id, needle) {
                var i, l, result = [];
                if (text && text.indexOf(needle) > -1) {
                    text = text.split(needle);
                    for (i = 0, l = text.length; i < l; i += 1) {
                        result.push(text[i]);
                        if (i < l - 1) {
                            if (text[i].lastIndexOf("<") <
                                    text[i].lastIndexOf(">") &&
                                    text[i].lastIndexOf("inGlossary") <=
                                    text[i].lastIndexOf("</span>")) {
                                result.push([
                                    '<span class="inGlossary ', id, '">',
                                    needle, '</span>'
                                ].join(""));
                            } else {
                                result.push(needle);
                            }
                        }
                    }
                    text = result.join("");
                } else {
                    delete nova.glossary.entries[id];
                }
            };

            delete nova.glossary.entries.end_____;  // unneeded delimiter

            for (key in nova.glossary.entries) {
                mark(key, nova.glossary.entries[key]);
            }
            node.html(text);

            for (key in nova.glossary.entries) {
                nova.glossary.get(key, ajax);
            }
        }
    };

    nova.footer = function () { // resizes fat-footer entries to the maximum fat-footer entry
        var max = 0;
        jQuery("#fat-footer > ul > li").each(function () {
            jQuery(this).removeAttr("style");
            var height = jQuery(this).height();
            max = max < height ? height : max;
        });
        jQuery("#fat-footer > ul > li").css("height", max + "px");
    };

    nova.font = {   // resizes fonts
        "size" : {
            "normal" : "13px",
            "big" : "15px",
            "huge" : "17px"
        },

        "resize" : function (classname) {
            jQuery("#subnav > ul > li > a").addClass("changing");
            jQuery("body").animate({
                "fontSize" : nova.font.size[classname]
            }, 500, function () {
                document.body.className = classname;
                if (classname === "normal") {
                    jQuery("#subnav > ul > li > a").removeClass("changing");
                }
                nova.footer();
            });
            nova.cookie.set("size", classname, false, false, "/");
        }
    };

    nova.form = {
        "isMail" : function (mail) {
            return (/^[^\s()<>@,;:\/]+@\w[\w\.\-]+\.[a-z]{2,}$/i).
                    test(mail);
        }
    };

    jQuery(document).ready(function () {

        jQuery("a.send-slTopicForm").click(function () {
            if(checkForm()) {
                jQuery(this).addClass("hidden");
                jQuery("a.send-slTopicForm-inactive").removeClass("hidden");
                document.forms.slTopicForm.submit();
            }
        });

        jQuery("a.send-slPostForm").click(function () {
            if(checkForm()) {
                jQuery(this).addClass("hidden");
                jQuery("a.send-slPostForm-inactive").removeClass("hidden");
                document.forms.slPostForm.submit();
            }
        });

        jQuery("#search").click(function () {
            var that = jQuery(this);
            if (that.val() === "Finden Sie Ihr Thema") {
                that.val("");
            }
        });

        jQuery("#search").blur(function () {
            var that = jQuery(this);
            if (that.val() === "") {
                that.val("Finden Sie Ihr Thema");
            }
        });

        jQuery("#font-size-button-normal").click(function () {
            var oldclassname = nova.cookie.get("size");
            if (oldclassname !== "normal") {
                nova.font.resize("normal", oldclassname);
            }
            return false;
        });

        jQuery("#font-size-button-big").click(function () {
            var oldclassname = nova.cookie.get("size");
            if (oldclassname !== "big") {
                nova.font.resize("big", oldclassname || "normal");
            }
            return false;
        });

        jQuery("#font-size-button-huge").click(function () {
            var oldclassname = nova.cookie.get("size");
            if (oldclassname !== "huge") {
                nova.font.resize("huge", oldclassname || "normal");
            }
            return false;
        });

        jQuery("#newsletter-subscribe").click(function () {
            if (this.form.first_name.value && this.form.last_name.value &&
                    nova.form.isMail(this.form.email.value)) {
                this.form.action.value = "subscribe";
                this.form.submit();
                return true;
            }

            jQuery("#newsletter-error .first, #newsletter-error .last, #newsletter-error .mail").
                    removeClass("hidden").addClass("hidden");

            if (!this.form.first_name.value) {
                jQuery("#newsletter-error .first").removeClass("hidden");
            }
            if (!this.form.last_name.value) {
                jQuery("#newsletter-error .last").removeClass("hidden");
            }
            if (!nova.form.isMail(this.form.email.value)) {
                jQuery("#newsletter-error .mail").removeClass("hidden");
            }

            jQuery("#newsletter-error").css("display", "none").
                    removeClass("hidden").show("fast");
            return false;
        });

        jQuery("#newsletter-unsubscribe").click(function () {
            if (nova.form.isMail(this.form.email.value)) {
                this.form.action.value = "unsubscribe";
                this.form.submit();
                return true;
            }
            jQuery("#newsletter-error .first, #newsletter-error .last, #newsletter-error .mail").
                    removeClass("hidden").addClass("hidden");
            jQuery("#newsletter-error .mail").removeClass("hidden");
            jQuery("#newsletter-error").css("display", "none").
                    removeClass("hidden").show("fast");
            return false;
        });

        jQuery(".picstreet .thumb").click(function () {
            jQuery(".picstreet .full").
                    attr("src", jQuery(this).attr("src"));
        });

        jQuery(".print-button").click(function () {
            window.print();
            return false;
        });

        jQuery(".video").click(function () {
            var x = window.open(jQuery(this).attr("href"), "_blank", [
                "dependent = yes", "height = 300", "width = 400",
                "hotkeys = no", "location = no", "menubar = no",
                "resizable = yes", "scrollbars = no", "status = no",
                "toolbar = no"
            ].join(","));
            x.focus();
            return false;
        });

//        if (jQuery("#glossarysite").length < 1) {
//            nova.glossary.make();
//        }

        jQuery("#orderForm").submit(function () {
            var isComplete = true;
            jQuery(".missing").removeClass("missing");
            jQuery("#orderForm [required]").each(function () {
                if (!jQuery(this).val()) {
                    jQuery(this).addClass("missing");
                    isComplete = false;
                } else {
                    if (jQuery(this).attr("required") === "email") {
                        if (!nova.form.isMail(jQuery(this).val())) {
                            jQuery(this).addClass("missing");
                            isComplete = false;
                        }
                    }
                }
            });
            jQuery("#orderForm .short").each(function () {
                if (!/^(\d+)$/.test(jQuery(this).val())) {
                    jQuery(this).addClass("missing");
                    isComplete = false;
                }
            });

            if (!isComplete) {
                jQuery(".error").css("display", "none").removeClass("hidden").
                        show("fast");
            }

            //jQuery("#autoReplyTo").val(jQuery("#email").val());

            return isComplete;
        });

        jQuery(window).load(function () {
            nova.footer();
        });
    });
}
