ck24 = {
    vars : [],
    delays : [],
    isIE6 : $.browser.msie && /6.0/.test(navigator.userAgent),
    isIE7 : (document.all && !window.opera && window.XMLHttpRequest) ? true : false,
    isFF2 : $.browser.mozilla && (parseFloat($.browser.version) < 1.9), 

    
    set : function(name, value) {
        this.vars[name] = value;
    },
    
    get : function(name) {
        return this.vars[name];
    },    
        
    delaySet : function(id, ms, func) {
        this.delayClear(id);
        this.delays[id] = setTimeout(func +'()' , ms);
    },
    
    delayClear : function(id) {
        if (this.delays[id]) {
            clearTimeout(this.delays[id]);
            this.delays[id] = false;
        }
    },    
    
    include : function(src, id) {
        var script = document.createElement('script');
        script.src = src;
        script.type = 'text/javascript';
        script.defer = true;
        if (id) script.id = id;

        var head = document.getElementsByTagName('head').item(0);
        head.appendChild(script);
    },
    
    popup : function() {
        var w = arguments[0] ? arguments[0] : '580';
        var h = arguments[1] ? arguments[1] : '360';
        var popup = window.open('', 'popup', 'width='+w+',height='+h+',scrollbars=yes, toolbar=no,status=no,resizable=yes,menubar=no,location=no,directories=no,top=10,left=10');
        popup.focus();
    }
};

ck24_faqtip = {
        active : false,
        
        //register fagtips
        register : function() {
            
            $('.ck24-faqtip').each(function () {
                var faqtip = $(this);
                var faqtip_content = faqtip.find('.ck24-faqtip-content');
                
                faqtip_content.html(
                    '<div class="ck24-faqtip-inner">' +
                        faqtip_content.html() +                    
                        '<div class="ck24-faqtip-corner">&nbsp;</div>' +
                        '<div class="ck24-faqtip-close">&nbsp;</div>' +
                    '</div>'
                );
                faqtip_content.bgiframe();
                
                faqtip.click(function(e) {
                    if(ck24.isIE6){
                        faqtip_content.show();
                        if(ck24_faqtip.active!=faqtip_content){
                            if (ck24_faqtip.active) {
                                ck24_faqtip.active.hide();
                            }
                            ck24_faqtip.active = faqtip_content;
                            e.stopPropagation();
                        }
                    }
                    else{
                        faqtip_content.fadeIn('fast', function() {
                            ck24_faqtip.active = faqtip_content;
                        });
                    }
                });
                
                
                faqtip.find('.ck24-faqtip-title').hover(
                    function() {
                        $(this).addClass('ck24-faqtip-hover');
                    },
                    function() {
                        $(this).removeClass('ck24-faqtip-hover');
                    }
                );
                
            });
            
            $(document).click(function() {
                ck24_faqtip.close();
            });
        },
        
        close : function() {
            if (this.active) {
                if(ck24.isIE6){
                    this.active.hide();
                }
                else{
                    this.active.fadeOut('fast');
                }
                this.active=false;
            }            
        }
    };

ck24_hotlinetip = {
    //register hotlinetips
    register : function() {
        $('.ck24-hotlinetip').each(function () {
            var hotlinetip = $(this);
            var hotlinetip_content = hotlinetip.find('.ck24-hotlinetip-content');
            
            hotlinetip_content.html(
                '<div class="ck24-hotlinetip-inner">' +
                hotlinetip_content.html() +                    
                    '<div class="ck24-hotlinetip-corner">&nbsp;</div>' +
                '</div>'
            );

            if (hotlinetip.hoverIntent) {
                hotlinetip.hoverIntent({
                    sensivity: 3,
                    interval: 200,
                    over: function(e) { hotlinetip_content.fadeIn('fast'); },
                    out: function(e) { hotlinetip_content.fadeOut('fast'); },
                    timeout: 500
                });
            }
        });
    }
};



ck24_navi = {
    init : function() {
    
        if (ck24.get('menu')) {
            $('.navi-arrow').show().mouseover(function() {
                ck24.delaySet('navi_open', 111, 'ck24_navi.open');
            });            
            
            $('#navi_clickable').mouseover(function() {
                ck24.delaySet('navi_open', 111, 'ck24_navi.open');
            });    
            
            $('#navi_content').mouseout(function(event) {
                var node = $(event.relatedTarget);
                var id = node.attr('id');
                
                if (id != 'navi') {    
                    if (id == '') {
                        var mt =  new Date().getTime();
                        id =  'bubble' + mt;
                        node.attr('id', 'bubble' + mt);
                    }
                    
                    if ($('#navi').find('#'+ id).length == 0) {
                        ck24.delaySet('navi_close', 333, 'ck24_navi.close');
                    }
                }
            });
            
            $('#navi_content').mouseover(function() {
                ck24.delayClear('navi_close');
            });
            
            $('.navi-arrow').mouseout(function() {
                ck24.delayClear('navi_open');
            });            
        
        } else {
            
        }
        
        //register sub menus
        $('.navi-sub').mouseover(function() {
            ck24.delayClear('navi_sub');
            ck24_navi.closeSub();
            $(this).find('.navi-sub-list').show();
        });
        
        $('.navi-sub').mouseout(function() {
            ck24.delaySet('navi_sub', 333, 'ck24_navi.closeSub');
        });        
    },
    
    open : function(instant) {
        var navi = $('#navi_content');
        
        if (navi.attr('open') != '1') {
            ck24_faqtip.close();        
            navi.attr('open', 1);
            $('.navi-arrow').addClass('navi-arrow-hovered');
            $('#navi_clickable').addClass('navi-clickable-hovered');
            navi.show(instant || ck24.isIE6 ? null : 'blind', 333);
            if (ck24.isIE6 || ck24.isIE7) $('.navi').css('zIndex', '100');
        }        
    },
    
    close : function(instant) {
        var navi = $('#navi_content');
        
        if (navi.attr('open') == '1') {
            ck24_faqtip.close();
            navi.attr('open', 0);
            
            navi.hide(instant || ck24.isIE6 ? null : 'blind', 333, function(){
                $('.navi-arrow').removeClass('navi-arrow-hovered');
                $('#navi_clickable').removeClass('navi-clickable-hovered');
                if (ck24.isIE6 || ck24.isIE7) {
                    $('.navi').css('zIndex', '1');
                }
            });
        }        
    },
    
    closeSub : function () {
        $('.navi-sub-list').hide();
    },
    
    toggle : function() {
        var navi = $('#navi_content');
        
        if (navi.attr('open') == '1') {
            navi.attr('open', 0);
            navi.hide('blind');
        } else {
            navi.attr('open', 1);
            navi.show('blind');        
        }        
    }
}

function c24_iframe_resizer(){
    // Set specific variable to represent all iframe tags.
    var iFrames = $('.ck24-resize-iframe');

    // Resize heights.
    function iResize()
    {
        // Iterate through all iframes in the page.
        for (var i = 0, j = iFrames.length; i < j; i++)
        {
            // Set inline style to equal the body height of the iframed content.
            iFrames[i][0].style.height = iFrames[i][0].contentWindow.document.body.offsetHeight + 'px';
        }
    }

    // Check if browser is Safari or Opera.
    if ($.browser.safari || $.browser.opera)
    {
        // Start timer when loaded.
        $('.ck24-resize-iframe').load(function()
            {
                setTimeout(iResize, 0);
            }
        );

        // Safari and Opera need a kick-start.
        for (var i = 0, j = iFrames.length; i < j; i++)
        {
            var iSource = iFrames[i][0].src;
            iFrames[i][0].src = '';
            iFrames[i][0].src = iSource;
        }
    }
    else
    {
        // For other good browsers.
        $('.ck24-resize-iframe').load(function()
            {
                    innerDoc = (this.contentDocument) ? this.contentDocument : this.contentWindow.document;
                    objToResize = (this.style) ? this.style : this;
                    objToResize.height = innerDoc.body.scrollHeight + 10;
            }
        );
    }

}

$(function() {
    ck24_navi.init();
    ck24_faqtip.register();
    ck24_hotlinetip.register();

    
    c24_iframe_resizer();
    
    $('.home').hover(
        function() {
            $('#home_hover').show();
            $('#home_standard').hide();
        },
        function() {
            $('#home_standard').show();
            $('#home_hover').hide();
        }
    );
});



/************** PLUGINS **************/

/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2446 $
 *
 * Version 2.1.1
 */

if (!$.fn.bgIframe){(function($){

/**
 * The bgiframe is chainable and applies the iframe hack to get 
 * around zIndex issues in IE6. It will only apply itself in IE6 
 * and adds a class to the iframe called 'bgiframe'. The iframe
 * is appeneded as the first child of the matched element(s) 
 * with a tabIndex and zIndex of -1.
 * 
 * By default the plugin will take borders, sized with pixel units,
 * into account. If a different unit is used for the border's width,
 * then you will need to use the top and left settings as explained below.
 *
 * NOTICE: This plugin has been reported to cause perfromance problems
 * when used on elements that change properties (like width, height and
 * opacity) a lot in IE6. Most of these problems have been caused by 
 * the expressions used to calculate the elements width, height and 
 * borders. Some have reported it is due to the opacity filter. All 
 * these settings can be changed if needed as explained below.
 *
 * @example $('div').bgiframe();
 * @before <div><p>Paragraph</p></div>
 * @result <div><iframe class="bgiframe".../><p>Paragraph</p></div>
 *
 * @param Map settings Optional settings to configure the iframe.
 * @option String|Number top The iframe must be offset to the top
 *         by the width of the top border. This should be a negative 
 *      number representing the border-top-width. If a number is 
 *         is used here, pixels will be assumed. Otherwise, be sure
 *        to specify a unit. An expression could also be used. 
 *         By default the value is "auto" which will use an expression 
 *         to get the border-top-width if it is in pixels.
 * @option String|Number left The iframe must be offset to the left
 *         by the width of the left border. This should be a negative 
 *      number representing the border-left-width. If a number is 
 *         is used here, pixels will be assumed. Otherwise, be sure
 *        to specify a unit. An expression could also be used. 
 *         By default the value is "auto" which will use an expression 
 *         to get the border-left-width if it is in pixels.
 * @option String|Number width This is the width of the iframe. If
 *        a number is used here, pixels will be assume. Otherwise, be sure
 *         to specify a unit. An experssion could also be used.
 *        By default the value is "auto" which will use an experssion
 *         to get the offsetWidth.
 * @option String|Number height This is the height of the iframe. If
 *        a number is used here, pixels will be assume. Otherwise, be sure
 *         to specify a unit. An experssion could also be used.
 *        By default the value is "auto" which will use an experssion
 *         to get the offsetHeight.
 * @option Boolean opacity This is a boolean representing whether or not
 *         to use opacity. If set to true, the opacity of 0 is applied. If
 *        set to false, the opacity filter is not applied. Default: true.
 * @option String src This setting is provided so that one could change 
 *        the src of the iframe to whatever they need.
 *        Default: "javascript:false;"
 *
 * @name bgiframe
 * @type jQuery
 * @cat Plugins/bgiframe
 * @author Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 */
$.fn.bgIframe = $.fn.bgiframe = function(s) {
    // This is only for IE6
    if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
        s = $.extend({
            top     : 'auto', // auto == .currentStyle.borderTopWidth
            left    : 'auto', // auto == .currentStyle.borderLeftWidth
            width   : 'auto', // auto == offsetWidth
            height  : 'auto', // auto == offsetHeight
            opacity : true,
            src     : 'javascript:false;'
        }, s || {});
        var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
            html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
                       'style="display:block;position:absolute;z-index:-1;'+
                           (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
                           'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
                           'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
                           'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
                           'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
                    '"/>';
        return this.each(function() {
            if ( $('> iframe.bgiframe', this).length == 0 )
                this.insertBefore( document.createElement(html), this.firstChild );
        });
    }
    return this;
};

})(jQuery)};



if (!$.fn.alphanumeric) {(function($){

    $.fn.alphanumeric = function(p) { 


        p = $.extend({
            ichars: "��!@#$%^&*()+=[]\\\';,/{}|\":<>?~�`.- ",
            nchars: "",
            allow: ""
          }, p);    

        return this.each
            (
                function() 
                {

                    if (p.nocaps) p.nchars += "ABCDEFGHIJKLMNOPQRSTUVWXYZ���";
                    if (p.allcaps) p.nchars += "abcdefghijklmnopqrstuvwxyz���";
                    
                    s = p.allow.split('');
                    for ( i=0;i<s.length;i++) if (p.ichars.indexOf(s[i]) != -1) s[i] = "\\" + s[i];
                    p.allow = s.join('|');
                    
                    var reg = new RegExp(p.allow,'gi');
                    var ch = p.ichars + p.nchars;
                    ch = ch.replace(reg,'');
                    

                    $(this).keypress
                        (
                            function (e)
                                {
                                
                                    if (!e.charCode) k = String.fromCharCode(e.which);
                                        else k = String.fromCharCode(e.charCode);
                                    
                                    if (e.ctrlKey&&k=='v') return true;
                                        
                                    if (ch.indexOf(k) != -1) e.preventDefault();
                                    if (e.ctrlKey&&k=='v') e.preventDefault();
                                    
                                }
                                
                        );
                        
                    $(this).bind('contextmenu',function () {return false});
                                    
                }
            );

    };

    $.fn.numeric = function(p) {
    
        var az = "abcdefghijklmnopqrstuvwxyz����";
        az += az.toUpperCase();

        p = $.extend({
            nchars: az
          }, p);    
              
        return this.each (function()
            {
                $(this).alphanumeric(p);
            }
        );
            
    };
    
    $.fn.alpha = function(p) {

        var nm = "1234567890";

        p = $.extend({
            nchars: nm
          }, p);    

        return this.each (function()
            {
                $(this).alphanumeric(p);
            }
        );
            
    };    

})(jQuery)};


/*
 * hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
 * http://cherne.net/brian/resources/jquery.hoverIntent.html
 * 
 * Copyright (c) 2009 Brian Cherne <brian@cherne.net>
 */
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);


/*** CALC ***/

function isValidZipCodeInput(id) {
    var plz = $('#'+ id).val();
    if (ck24_validPlz[plz] != 1) {
        $('#'+ id + '_error').show();
        return false;
    } else {
        $('#'+ id + '_error').hide();
    }
    
    return true;
}

function isValidAreaCodeInput(id) {
    var areacode = $('#'+ id).val();
    if (/^0\d{2,4}$/.test(areacode) == false) {
        alert('Bitte geben Sie eine gültige Vorwahl ein.');
        return false;
    }
    
    return true;
}

function isValidAreaCodeInput2(id) {
    var areacode = $('#'+ id).val();
    if (/^0\d{2,4}$/.test(areacode) == false) {
        $('#'+ id + '_error').show();
        return false;
    } else {
        $('#'+ id + '_error').hide();
    }
    
    return true;
}