if (!com_FlyingCrab) var com_FlyingCrab = {};
else if (com_FlyingCrab && typeof(com_FlyingCrab) != "object")
    throw new Error("com_FlyingCrab is not an Object type");

com_FlyingCrab.EVENTS = {
    NAME: "Event handling module",
    VERSION: 1.0,
    
    addEventHandler: function(oNode, sEvt, fnHandler, bCapture) {
        if(navigator.appName=="Microsoft Internet Explorer") {
            if (typeof(window.event) != "undefined")
                oNode.attachEvent("on" + sEvt, fnHandler);
        } else {
            oNode.addEventListener(sEvt, fnHandler, bCapture);
        }
    },

    removeEventHandler: function(oNode, sEvt, fnHandler, bCapture) {
        if (typeof (window.event) != "undefined")
            oNode.attachEvent("on" + sEvt, fnHandler);
        else
            oNode.addEventListener(sEvt, fnHandler, bCapture);
    },

    getEventTarget: function(evt) {
        if (window.event) return window.event.srcElement;
        else return evt.target;
    },

    stopEvent: function(evt) {
        if (window.event) window.event.cancelBubble=true;
        else evt.stopPropagation();
    },
    
    preventDefault: function(evt) {
        if (window.event) window.event.returnValue=false;
        else evt.preventDefault();
    }
}
com_FlyingCrab.VALID_FORM = {
    NAME: "Form Validating module",
    VERSION: 1.0,
    validateForm: function () {
        go = false;
        if(document.getElementsByTagName("select")[0]) {
            com_FlyingCrab.EVENTS.addEventHandler(document.getElementsByTagName("select")[0], 'change', function() { go=true; }, false);
        }
        for (var i=0; i< document.forms.length; i++) {
            com_FlyingCrab.EVENTS.addEventHandler(document.forms[0], 'submit', SubmitForm, false);
        }
        function SubmitForm(e) {
            myEditor.saveHTML();
            validFrm = false;
            if(!com_FlyingCrab.VALID_FORM.validForm()) {
                validFrm = true;
            }
            if(com_FlyingCrab.HAS_FORM_CHANGED.isFormChanged()) {
                go = true;
            }
            if(validFrm) {
                com_FlyingCrab.EVENTS.preventDefault(e);
            }
            if(!go) {
                alert("Sie haben noch keine Änderung vorgenommen.");
                com_FlyingCrab.EVENTS.preventDefault(e);
            }
        }
    },
    validForm: function() {
        var allGood = true;
        var allTags = document.getElementsByTagName("*");
        for (var i=0; i<allTags.length; i++) {
            if (!validTag(allTags[i])) {
                allGood = false;
            }
        }
        CheckChange();
        return allGood;
        
        function validTag(thisTag) {
            var outClass = "";
            var allClasses = thisTag.className.split(" ");
            
            for (var j=0; j<allClasses.length; j++) {
                outClass += validBasedOnClass(allClasses[j]) + " ";
            }
            
            thisTag.className = outClass;
            
            if (outClass.indexOf("invalid") > -1) {
                invalidLabel(thisTag.id);
                thisTag.focus();
                if (thisTag.nodeName == "INPUT") {
                    thisTag.select();
                }
                return false;
            }
            return true;
            
            function validBasedOnClass(thisClass) {
                var classBack = "";
                
                switch(thisClass) {
                    case "":
                        break;
                    case "invalid":
                        break;
                    case "number":
                        if (allGood && isNaN(thisTag.value)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "req":
                        if (allGood && (thisTag.value == "" || thisTag.value == 0)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "radio":
                        if(allGood && !radioPicked(thisTag.name)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "email":
                        if(allGood && !validEmail(thisTag.value)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "emailAdd":
                        if (allGood && !crossCheck(thisTag,thisClass)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    default:
                        
                        classBack += thisClass;
                }
                return classBack;
            }
            
            function validEmail(email) {
                var regExpEmail = /^[\w\.=-]+\@[\w\.-]+\.[a-z]{2,4}$/;
                return regExpEmail.test(email);
            }
            
            function crossCheck(inTag,otherFieldID) {
                if (!document.getElementById(otherFieldID)) {
                    return false;
                }
                return (inTag.value == document.getElementById(otherFieldID).value);
            }
            
            function radioPicked(radioName) {
                var radioSet = "";
                for(var k=0; k<document.forms.length; k++) {
                    if (!radioSet) {
                        radioSet = document.forms[k][radioName];
                    }
                }
                if(!radioSet) {
                    return false;
                }
                for(k=0; k<radioSet.length; k++) {
                    if(radioSet[k].checked) {
                        return true;
                    }
                }
                return false;
            }
            
            function invalidLabel(parentTag) {
                allLabel = document.getElementsByTagName("LABEL");
                for(var i=0;i<allLabel.length;i++) {
                    for(var j=0;j<allLabel[i].attributes.length;j++) {
                        if(allLabel[i].attributes[0].nodeValue == parentTag) {
                            allLabel[i].className = " invalid";
                        }
                    }
                }
            }
        } // End function validTag(thisTag)
        function CheckChange() {
            return allGood;
        }
    } // End function validForm()
}
com_FlyingCrab.VALID_FORM_PUBLIC = {
    NAME: "Form Validating module",
    VERSION: 1.0,
    validateFormPublic: function () {
        for (var i=0; i< document.forms.length; i++) {
            com_FlyingCrab.EVENTS.addEventHandler(document.forms[0], 'submit', SubmitForm, false);
        }
        function SubmitForm(e) {
            if(!com_FlyingCrab.VALID_FORM_PUBLIC.validForm()) {
                com_FlyingCrab.EVENTS.preventDefault(e);
            }
        }
    },
    validForm: function() {
        var allGood = true;
        var allTags = document.getElementsByTagName("*");
        for (var i=0; i<allTags.length; i++) {
            if (!validTag(allTags[i])) {
                allGood = false;
            }
        }
        CheckChange();
        return allGood;
        
        function validTag(thisTag) {
            var outClass = "";
            var allClasses = thisTag.className.split(" ");
            
            for (var j=0; j<allClasses.length; j++) {
                outClass += validBasedOnClass(allClasses[j]) + " ";
            }
            thisTag.className = outClass;
            if (outClass.indexOf("invalid") > -1) {
                invalidLabel(thisTag.id);
                thisTag.focus();
                if (thisTag.nodeName == "INPUT") {
                    thisTag.select();
                }
                return false;
            }
            return true;
            
            function validBasedOnClass(thisClass) {
                var classBack = "";
                switch(thisClass) {
                    case "":
                        break;
                    case "invalid":
                        break;
                    case "number":
                        if (allGood && isNaN(thisTag.value)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "plz":
                        if (allGood && thisTag.value.match(/^\d{4}$/) == null) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "phone":
                        if (allGood && thisTag.value.match(/^\d{3} \d{3} \d{2} \d{2}$/) == null) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "text":
                        if (allGood && thisTag.value.match(/^[a-zA-ZüöäÜÖéàèÉÀÈÄéèà ]*$/) == null) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "adr":
                        if (allGood && thisTag.value.match(/^[a-zA-Z0-9üöäÜÖéàèÉÀÈÄéèà ]*$/) == null) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "req":
                        if (allGood && (thisTag.value == "" || thisTag.value == 0)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "radio":
                        if(allGood && !radioPicked(thisTag.name)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "email":
                        if(allGood && !validEmail(thisTag.value)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    case "emailAdd":
                        if (allGood && !crossCheck(thisTag,thisClass)) {
                            classBack = "invalid ";
                        }
                        classBack += thisClass;
                        break;
                    default:
                        classBack += thisClass;
                }
                return classBack;
            }
            
            function validEmail(email) {
                var regExpEmail = /^[\w\.=-]+\@[\w\.-]+\.[a-z]{2,4}$/;
                return regExpEmail.test(email);
            }
            
            function crossCheck(inTag,otherFieldID) {
                if (!document.getElementById(otherFieldID)) {
                    return false;
                }
                return (inTag.value == document.getElementById(otherFieldID).value);
            }
            
            function radioPicked(radioName) {
                var radioSet = "";
                for(var k=0; k<document.forms.length; k++) {
                    if (!radioSet) {
                        radioSet = document.forms[k][radioName];
                    }
                }
                if(!radioSet) {
                    return false;
                }
                for(k=0; k<radioSet.length; k++) {
                    if(radioSet[k].checked) {
                        return true;
                    }
                }
                return false;
            }
            
            function invalidLabel(parentTag) {
                allLabel = document.getElementsByTagName("LABEL");
                for(var i=0;i<allLabel.length;i++) {
                    for(var j=0;j<allLabel[i].attributes.length;j++) {
                        if(allLabel[i].attributes[0].nodeValue == parentTag) {
                            allLabel[i].className = " invalid";
                        }
                    }
                }
            }
        } // End function validTag(thisTag)
        function CheckChange() {
            return allGood;
        }
    } // End function validForm()
}

com_FlyingCrab.HAS_FORM_CHANGED = {
    
    isFormChanged: function() {
        for (j=0;j < document.forms.length;j++) {
            for(var i=0; i< document.forms[j].elements.length; i++) {
                if (document.forms[j].elements[i].type == "textarea" || document.forms[j].elements[i].type == "text") {
                    if(document.forms[j].elements[i].value != document.forms[j].elements[i].defaultValue) {
                        //alert("text, textarea");
                        return true;
                    }
                }
                if (document.forms[j].elements[i].type =="select-multiple") {
                    if(document.forms[j].elements[i].options[document.forms[j].elements[i].selectedIndex].selected != document.forms[j].elements[i].options[document.forms[j].elements[i].selectedIndex].defaultSelected ) {
                        //alert("select-multiple");
                        return true;
                    }
                }
                if (document.forms[j].elements[i].type =="checkbox" || document.forms[j].elements[i].type =="radio") {
                    if(document.forms[j].elements[i].checked != document.forms[j].elements[i].defaultChecked) {
                        //alert("radio");
                        return true;
                    }
                }
                if (document.forms[j].elements[i].type == "file") {
                    if(document.forms[j].elements[i].value != "") {
                        //alert("file");
                        return true;
                    }
                }
            }
        }
        return false;
    }
}
com_FlyingCrab.FORM_LAYOUT = {
    layoutForm: function() {
        var allTags = document.getElementsByTagName("*");
        for (var i=0; i<allTags.length; i++) {
            var allClasses = allTags[i].className.split(" ");
            for(var j=0;j<allClasses.length;j++) {
                if(allClasses[j] == "req") {
                    allLabel = document.getElementsByTagName("LABEL");
                    for(var k=0;k<allLabel.length;k++) {
                        for(var l=0;l<allLabel[k].attributes.length;l++) {
                            if(allLabel[k].attributes[0].nodeValue == allTags[i].id) {
                                allLabel[k].innerHTML += " *";
                            }
                        }
                    }
                }
            }
            
        }
    }
}

com_FlyingCrab.DIASHOW = {
    initDiashow: function() {
        com_FlyingCrab.EVENTS.addEventHandler(document.getElementById("Play"),"click", com_FlyingCrab.DIASHOW.play, false);
        com_FlyingCrab.EVENTS.addEventHandler(document.getElementById("Stop"),"click", com_FlyingCrab.DIASHOW.stop, false);
        com_FlyingCrab.EVENTS.addEventHandler(document.getElementById("Prev"),"click", com_FlyingCrab.DIASHOW.prev, false);
        com_FlyingCrab.EVENTS.addEventHandler(document.getElementById("Next"),"click", com_FlyingCrab.DIASHOW.next, false);
        com_FlyingCrab.EVENTS.addEventHandler(document.getElementById("Pause"),"click", com_FlyingCrab.DIASHOW.pause, false);
        com_FlyingCrab.DIASHOW.preLoadImgs();
    },
    showImg: function() {
        var img = document.getElementById("DiashowImg");
        var handleAnimEnd = function() {
            img.src = arrImg[count].src;
            com_FlyingCrab.DIASHOW.layoutImg();
            fadeInAnim.animate();
        }
        fadeOutAnim = new YAHOO.util.Anim(img, { opacity: {to: 0} }, .3 );
        fadeInAnim = new YAHOO.util.Anim(img, { opacity: {to: 1} }, .3 );
        fadeOutAnim.onComplete.subscribe(handleAnimEnd);
        fadeOutAnim.animate();
    },
    intervalImg: function() {
        if(count==imgArr.length-1){
            clearInterval(intv);
        }
        com_FlyingCrab.DIASHOW.increaseCount();
        com_FlyingCrab.DIASHOW.showImg();
    },
    preLoadImgs: function() {
        imgName = "";
        for(var i=0;i<imgArr.length;i++) {
            arrImg[i] = new Image();
            arrImg[i].src = "pictures/"+imgPath+"/normal/"+imgArr[i];
        }
        com_FlyingCrab.EVENTS.addEventHandler(arrImg[0], "load", com_FlyingCrab.DIASHOW.showImg, false);
    },
    increaseCount: function() {
        count++;
        com_FlyingCrab.DIASHOW.checkCount();
    },
    decreaseCount: function() {
        count--;
        com_FlyingCrab.DIASHOW.checkCount();
    },
    checkCount: function() {
        if(count>=imgArr.length){
            count = 0;
        }
        if(count<0){
            count = imgArr.length-1;
        }
    },
    prev: function(e) {
        com_FlyingCrab.DIASHOW.decreaseCount();
        com_FlyingCrab.DIASHOW.showImg();
        com_FlyingCrab.EVENTS.preventDefault(e);
    },
    next: function(e) {
        com_FlyingCrab.DIASHOW.increaseCount();
        com_FlyingCrab.DIASHOW.showImg();
        com_FlyingCrab.EVENTS.preventDefault(e);
    },
    play: function(e) {
        intv=setInterval("com_FlyingCrab.DIASHOW.intervalImg()",3000);
        com_FlyingCrab.EVENTS.preventDefault(e);
    },
    pause: function(e) {
        clearInterval(intv);
        com_FlyingCrab.EVENTS.preventDefault(e);
    },
    stop: function(e) {
        clearInterval(intv);
        count = 0;
        com_FlyingCrab.DIASHOW.showImg();
        com_FlyingCrab.EVENTS.preventDefault(e);
    },
    layoutImg: function () {
        img = document.getElementById("DiashowImg");
        imgH = img.height;
        imgW = img.width;
        parentH = img.offsetParent.clientHeight;
        newY = Math.floor(parentH / 2 - imgH / 2);
        img.style.top = newY;
        parentW = img.offsetParent.clientWidth;
        newX = Math.floor(parentW / 2 - imgW / 2);
        img.style.left = newX;
    }
}
