(function($) {
    $.fn.jCarouselLite = function(o) {
        o = $.extend({
            btnPrev : null,
            btnNext : null,
            btnGo : null,
            mouseWheel : false,
            auto : null,
            speed : 200,
            easing : null,
            vertical : false,
            circular : true,
            visible : 3,
            start : 0,
            scroll : 1,
            beforeStart : null,
            afterEnd : null
        }, o || {});
        return this.each(function() {
            var b = false, animCss = o.vertical ? "top" : "left", sizeCss = o.vertical ? "height" : "width";
            var c = $(this), ul = $("ul", c), tLi = $("li", ul), tl = tLi.size(), v = o.visible;
            if(o.circular) {
                ul.prepend(tLi.slice(tl - v - 1 + 1).clone()).append(tLi.slice(0, v).clone());
                o.start += v
            }
            var f = $("li", ul), itemLength = f.size(), curr = o.start;
            c.css("visibility", "visible");
            f.css({
                overflow : "hidden",
                float : o.vertical ? "none" : "left"
            });
            ul.css({
                margin : "0",
                padding : "0",
                position : "relative",
                "list-style-type" : "none",
                "z-index" : "1"
            });
            c.css({
                overflow : "hidden",
                position : "relative",
                "z-index" : "2",
                left : "0px"
            });
            var g = o.vertical ? height(f) : width(f);
            var h = g * itemLength;
            var j = g * v;
            f.css({
                width : f.width(),
                height : f.height()
            });
            ul.css(sizeCss, h + "px").css(animCss, -(curr * g));
            c.css(sizeCss, j + "px");
            if(o.btnPrev)
                $(o.btnPrev).click(function() {
                    return go(curr - o.scroll)
                });
            if(o.btnNext)
                $(o.btnNext).click(function() {
                    return go(curr + o.scroll)
                });
            if(o.btnGo)
                $.each(o.btnGo, function(i, a) {
                    $(a).click(function() {
                        return go(o.circular ? o.visible + i : i)
                    })
                });
            if(o.mouseWheel && c.mousewheel)
                c.mousewheel(function(e, d) {
                    return d > 0 ? go(curr - o.scroll) : go(curr + o.scroll)
                });
            if(o.auto)
                setInterval(function() {
                    go(curr + o.scroll)
                }, o.auto + o.speed);
            function vis() {
                return f.slice(curr).slice(0, v)
            };

            function go(a) {
                if(!b) {
                    if(o.beforeStart)
                        o.beforeStart.call(this, vis());
                    if(o.circular) {
                        if(a <= o.start - v - 1) {
                            ul.css(animCss, -((itemLength - (v * 2)) * g) + "px");
                            curr = a == o.start - v - 1 ? itemLength - (v * 2) - 1 : itemLength - (v * 2) - o.scroll
                        } else if(a >= itemLength - v + 1) {
                            ul.css(animCss, -((v) * g) + "px");
                            curr = a == itemLength - v + 1 ? v + 1 : v + o.scroll
                        } else
                            curr = a
                    } else {
                        if(a < 0 || a > itemLength - v)
                            return;
                        else
                            curr = a
                    }
                    b = true;
                    ul.animate(animCss == "left" ? {
                        left : -(curr * g)
                    } : {
                        top : -(curr * g)
                    }, o.speed, o.easing, function() {
                        if(o.afterEnd)
                            o.afterEnd.call(this, vis());
                        b = false
                    });
                    if(!o.circular) {
                        $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
                        $((curr - o.scroll < 0 && o.btnPrev) || (curr + o.scroll > itemLength - v && o.btnNext) || []).addClass("disabled")
                    }
                }
                return false
            }

        })
    };
    function css(a, b) {
        return parseInt($.css(a[0], b)) || 0
    };

    function width(a) {
        return a[0].offsetWidth + css(a, 'marginLeft') + css(a, 'marginRight')
    };

    function height(a) {
        return a[0].offsetHeight + css(a, 'marginTop') + css(a, 'marginBottom')
    }

})(jQuery);

function ShowHide(layID) {
    var myLayer = document.getElementById(layID);
    if(myLayer.style.display == "none") {
        myLayer.style.display = "";
    } else {
        myLayer.style.display = "none";
    }
}

function getAdr(prefix, postfix, text) {
    document.write('<a href="mailto:' + prefix + '@' + postfix + '">' + ( text ? text.replace(/&quot;/g, '"').replace(/%EMAIL%/, prefix + '@' + postfix) : prefix + '@' + postfix) + '</a>');
}

function swapImage(element, newimage) {
    var oldsrc = element.src
    element.src = newimage
    if(!element.onmouseout)
        element.onmouseout = function(event) {
            swapImage(this, oldsrc);
        };
}

function popup(url, typ, para1, width, height) {
    attrib = "";
    Y = (screen.height - width) / 2;
    X = (screen.width - height) / 2;
    X = Math.round(X);
    Y = Math.round(Y);
    if(para1 == 'CENTER')
        attrib += 'height=' + height + ',width=' + width + ',top=' + Y + ',left=' + X;
    if(typ == 'TYP1')
        attrib += ",scrollbars=no";
    if(typ == 'TYP2')
        attrib += ",scrollbars=yes";
    if(typ == 'TYP3')
        attrib += ",scrollbars=yes,menubar=yes";
    x = Math.random();
    fenster = window.open(url, 'win', attrib);
    return false;
}

// deletes leading and trailing spaces in a string - adds the function directly to the String Object, so that all strings inherit this method
String.prototype.trim = function() {
    return this.replace(/(^\s*)|(\s*$)/g, '');
}
//checkEmail - needed for forms
function checkEmail(val) {
    if(val) {
        var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
        var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
        var regex = "^" + usr + "\@" + domain + "$";
        var myrxp = new RegExp(regex);
        var check = (myrxp.test(val));
        if(check != true) {
            return false;
        } else {
            return true;
        }
    }
}

/*
 validates formfields if they have a value or not
 to check for other options do the following
 specialfields = new Object();
 specialfields.fieldname = new Object();
 specialfields.fieldname.check1 = 'function_to_call,error_message';
 specialfields.fieldname.check2 = 'second_function_to_call,second_error_message';
 specialfields.another_fieldname = new Object();
 specialfields.another_fieldname.check1 = 'function_to_call,error_message';
 */
function validateForm(form, specialfields) {
    var errors = new Array();
    var fields = form.getElementsByTagName('label');
    for( i = 0; i < fields.length; i++) {
        var span = fields[i].getElementsByTagName('span')[0];
        if(span) {
            var label = span.firstChild.data;
            label = label.trim();
            // if there is a '*' in the label - this indicates the inputfield has to be filled
            if(label.charAt(label.length - 1) == '*') {
                label = label.substring(0, label.length - 1).trim();
                // get the inputfield
                var obj_input = fields[i].getElementsByTagName('input');
                if(!obj_input[0])
                    obj_input = fields[i].getElementsByTagName('select');
                if(!obj_input[0])
                    obj_input = fields[i].getElementsByTagName('textarea');

                // if there is an inputfield
                if(obj_input && obj_input[0]) {
                    input = obj_input[0];
                    error = false;

                    // check if the inputfield has a value
                    if(!input.value || input.value.trim().length == 0) {
                        error = true;
                        errors.push(label + ' nicht eingegeben');
                    }

                    // check the inputfield for special things (email, ...)
                    if(!error && specialfields[input.name]) {
                        specialfield = specialfields[input.name];
                        for(check in specialfield) {
                            check_function = specialfield[check].split(',')[0];
                            check_message = specialfield[check].split(',')[1];
                            if(!eval(check_function)(input.value)) {
                                error = true;
                                errors.push(label + ' ' + check_message);
                            }
                        }
                    }

                    // on error give the label the className 'error' otherwise delete the className 'error' (if exists)
                    if(error) {
                        className = fields[i].className;
                        if(className.length > 0) {
                            className = className + ' ';
                        }
                        fields[i].className = className + 'error';
                    } else {
                        className = fields[i].className;
                        if(className.indexOf('error') > -1) {
                            className = className.replace(' error', '');
                            className = className.replace('error', '');
                            fields[i].className = className;
                        }
                    }
                }
            }
        }
    }

    return errors;
}

function showFormErrors(errors) {
    error_message = '';
    for( i = 0; i < errors.length; i++) {
        error_message += errors[i] + '\n';
    }
    alert(error_message);
}

function checkNewsletter(form) {
    if(checkEmail(document.getElementById("checkemail").value)) {
        return true;
    } else {
        alert("Falsche E-Mail Adresse!");
        return false;
    }
}

$(function() {
    $(".premium_partner").bxSlider({
        auto : true,
        controls : false,
        speed : 300,
        randomStart : true,
        pause : 4876,
    });

    $(".normal_partner").bxSlider({
        auto : true,
        controls : false,
        speed : 300,
        randomStart : true,
        pause : 1932,
    });

    $("a.thickbox").fancybox({
        titleShow:false
    });
});

