function visibilityByClass(className, mode) {
    if(mode) {
        jQuery("." + className).show();
    } else {
        jQuery("." + className).hide();
    }
}

function fadeByClass(className, mode){
    if(mode) {
        jQuery("." + className).fadeIn();
    } else {
        jQuery("." + className).fadeOut();
    }
}

function hideButton(button){
    jQuery(button).fadeOut();
}

/* Validation if AGBs were checked */
function chkAGBs(form){
    if (!this.document.getElementById(form+':agbConfirm').checked){
        jQuery('#agbMessage').html("<div class='errorMSGitem' style='padding-bottom:5px;'>Bitte bestätigen Sie die Datenschutzhinweise und die Allgemeinen Geschäftsbedingungen.</div>");
        return false;
    }else{
        jQuery('#agbMessage').html("")
    }
    return true;
}

// ---- indidvidual field validation methods
// ----------------------------------------------------------------------------
function checkOneChecked(fieldID, msg){
    var selector = "#" + fieldID.replace(/:/g, "\\:");
    if (jQuery(selector + " input:checked").length > 0){
        removeErrorMessage(fieldID);
        return true;
    }else{
        addErrorMessage(fieldID,  msg);
        return false;
    }
}
function checkNotEmptyField(fieldID, msg){
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    if (field.val() != null && field.val()== ""){
        addErrorMessage(fieldID,  msg);
        return false;
    }else{
        removeErrorMessage(fieldID);
        return true;
    }
}

function checkLoginNoCheckDigit(fieldID1){
    var missingMsg = "Bitte geben Sie Ihre Kunden-Nummer an.";
    var invalidMsg = "Login darf nur aus Ziffern bestehen.";

    var field1 = jQuery("#" + fieldID1.replace(/:/g, "\\:"));

    var value1 = field1.val();
    var length = 7;

    removeErrorMessage(fieldID1);

    if (value1 == ""){
        addErrorMessage(fieldID1,  missingMsg);
        return false;
    }else if (!Validator.isNumber(value1)){
        addErrorMessage(fieldID1,  invalidMsg);
        return false;
    }else if (value1.length != length){
        addErrorMessage(fieldID1,  "Bitte geben Sie eine " + length + "-stellige Zahl ein.");
        return false;
    }else{
        return true;
    }
}


function checkNotEmptyLoginFields(fieldID1, fieldID2){
    var missingMsg = "Bitte geben Sie Ihre Kunden-Nummer an.";
    var invalidMsg = "Login darf nur aus Ziffern bestehen.";

    var field1 = jQuery("#" + fieldID1.replace(/:/g, "\\:"));
    var field2 = jQuery("#" + fieldID2.replace(/:/g, "\\:"));

    var value1 = field1.val();
    var value2 = field2.val();
    var length = 7;

    removeErrorMessage(fieldID1);
    removeErrorMessage(fieldID2);

    if (value1 == "" || value2 == "") {
        addErrorMessage(fieldID1, missingMsg);
        addErrorClass(field2);
        return false;
    } else if (!Validator.isNumber(value1)) {
        addErrorMessage(fieldID1, invalidMsg);
        return false;
    } else if (!Validator.isNumber(value2)) {
        addErrorMessageAt(fieldID2, fieldID1, invalidMsg);
        return false;
    } else if (value1.length != length) {
        addErrorMessage(fieldID1, "Bitte geben Sie eine " + length + "-stellige Zahl ein.");
        return false;
    } else {
        return true;
    }
}

function checkLoginByCustomerID(fieldID1){
    var length = store.usesCheckDigit ? 8 : 7;
    var missingMsg = "Bitte geben Sie Ihre Kunden-Nummer an.";

    var field1 = jQuery("#" + fieldID1.replace(/:/g, "\\:"));
    var value = field1.val();// .replace(/-/g, "");

    removeErrorMessage(fieldID1);
    if (value == ""){
        addErrorMessage(fieldID1,  missingMsg);
        return false;
    }else if (!Validator.isCustomerNumber(value, store.usesCheckDigit)){
        addErrorMessage(fieldID1,  "Bitte geben Sie eine " + length + "-stellige Zahl ein.");
        return false;
    }else{
        return true;
    }
}

function checkPasswordFields(fieldID1, fieldID2, inRequired){

    var passwd = jQuery("#" + fieldID1.replace(/:/g, "\\:")).val();
    var passwd2 = jQuery("#" + fieldID2.replace(/:/g, "\\:")).val();
    var isRequired = (typeof inRequired != "undefined") ? inRequired : false;

    removeErrorMessage(fieldID1);
    removeErrorMessage(fieldID2);

    if (isRequired && passwd == "" ){
        addErrorMessage(fieldID1, "Bitte geben Sie Ihr Passwort an.");
        return false;
    }else if (passwd != "" && passwd.length < 5){
        addErrorMessage(fieldID1, "Das Passwort muss mindestens 5&#160;Zeichen lang sein.");
        return false;
    }else if (passwd != "" && passwd2 == ""){
        addErrorMessage(fieldID2, "Bitte bestätigen Sie das Passwort.");
        return false;
    }else if (passwd != passwd2){
        addErrorMessage(fieldID2,  "Bitte geben Sie zweimal das gleiche Passwort an.");
        return false;
    }else{
        return true;
    }
}

/* Validation of Required Fields of Order-Catalogs Form */
function checkNotEmptyCollection(fieldID, inCount, msg){
    var isOK = false;
    for (i = 0; i < inCount; i++) {
        var aField = document.getElementById(fieldID + i);
        if (aField != null &&  aField.checked) {
            isOK = true;
        }
    }
    if (!isOK){
        addErrorMessage(fieldID + '0',  msg);
        return false;
    }else{
        removeErrorMessage(fieldID + '0');
        return true;
    }
}


function checkDependentPostalcode(postalCodeFieldID, countryFieldID, locale, inRequired) {

    // get form fields
    var postalCodeField = jQuery("#" + postalCodeFieldID.replace(/:/g, "\\:"));
    var countryField = jQuery("#" + countryFieldID.replace(/:/g, "\\:"));

    // use old validation for AT, CH and DE
    if (countryField.val() == "at" || countryField.val() == "ch" || countryField.val() == "de") {
        return checkPostalcode(postalCodeFieldID, locale, inRequired);
    }

    // for other countries accept all postal codes 
    return true;
}

function checkPostalcode(fieldID, locale, inRequired){
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));

    var errorMessage = "";
    var aPostalCodeLength;
    var aPostalCodeExample = "";
    var required = typeof inRequired == 'undefined' ? true : inRequired;

    if (locale == "de"){
        aPostalCodeLength = 5;
        aPostalCodeExample = "45039";
    }
    if (locale == "at" || locale == "ch"){
        aPostalCodeLength = 4;
        aPostalCodeExample = "6900";
    }
    if(required && field.val() == ""){
        errorMessage =  "Bitte geben Sie eine PLZ mit "+ aPostalCodeLength.toString() + " Ziffern an.";
    } else  if (field.val().length < aPostalCodeLength && field.val().length > 0 && Validator.isNumber(field.val())){
        errorMessage =  "Bitte geben Sie eine PLZ mit "+ aPostalCodeLength.toString() + " Ziffern an.";
    } else if (field.val() != "" && !Validator.isNumber(field.val())){
        errorMessage =  "Bitte bei der Postleitzahl nur Ziffern eingeben. Beispiel: " + aPostalCodeExample;
    }
    removeErrorMessage(fieldID);
    if(errorMessage != ""){
        addErrorMessage(fieldID, errorMessage);
        return false;
    } else{
        return true;
    }
}

function checkIsRequredPhoneNumberSetAndValid(fieldID, missingMsg){
    var msgNotSet =  missingMsg != null ? missingMsg : "Bitte geben Sie eine Rückrufnummer ein.";
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var fieldVal = field.val() == undefined ? "" : field.val();
    var errorMessage = "";

    if (fieldVal == ""){
        errorMessage = msgNotSet;
    } else if (fieldVal != "" && !Validator.isNumber(field.val())){
        errorMessage =  "Bitte bei der Telefonnummer nur Ziffern eingeben. Beispiel: 02211234567";
    }

    if(errorMessage != ""){
        addErrorMessage(fieldID, errorMessage);
        return false;
    } else {
        removeErrorMessage(fieldID);
        return true;
    }
}

function checkIsNumber(fieldID, msg){
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));

    if (field.val() != "" && !Validator.isNumber(field.val())){
        addErrorMessage(fieldID, msg);
        return false;
    }else{
        removeErrorMessage(fieldID);
        return true;
    }
}

function checkIsEmailRequired(fieldID, conditionalFieldID, msg){

    var newsletter = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var email = jQuery("#" + conditionalFieldID.replace(/:/g, "\\:"));

    if (newsletter.is(':checked')){
        if ((email.val() == '') || email == undefined ||(email!='')&&(!Validator.isEmail(email.val()))){
            addErrorMessage(conditionalFieldID, msg);
            return false;
        } else {
            removeErrorMessage(conditionalFieldID);
        }
    } else {
        removeErrorMessage(conditionalFieldID);
    }
    return true;
}

function checkIsAppointmentDataRequired(fieldID, conditionalFieldID, msg){
    var errorID = conditionalFieldID + "_errorMSG";
    var newsletter = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var email = jQuery("#" + conditionalFieldID.replace(/:/g, "\\:"));
    var errorField = jQuery("#" + errorID.replace(/:/g, "\\:"));
    var isOK = true;

    if (newsletter.is(':checked')){
        if ((email.val() == '') || email == undefined ||(email!='')&&(!Validator.isEmail(email.val()))){
            addErrorMessage(conditionalFieldID, msg);
            return false;
        } else {
            removeErrorMessage(conditionalFieldID);
        }
    }  else {
        removeErrorMessage(conditionalFieldID);
    }
    return true;
}

function checkIsRequiredEmailSetAndValid(fieldID, inMsgNotSet, inMsgNotValid) {

    var msgNotSet =  inMsgNotSet != null ? inMsgNotSet : "Bitte geben Sie eine E-Mail-Adresse ein.";
    var msgNotValid =  inMsgNotValid != null ? inMsgNotValid : "Bitte geben Sie eine gültige <br/>E-Mail-Adresse ein.";

    var email = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var emailVal = email.val() == undefined ? "" : email.val();

    var errorMessage = "";

    if (emailVal == ""){
        errorMessage = msgNotSet;
    } else if( !Validator.isEmail(emailVal)){
        errorMessage = msgNotValid;
    }

    if(errorMessage != ""){
        addErrorMessage(fieldID, errorMessage);
        return false;
    } else {
        removeErrorMessage(fieldID);
        return true;
    }
}

function checkIsRequiredEmailSetAndValid_alt(fieldID, msg){
    var email = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    if (email.val() == "" || !Validator.isEmail(email.val())){
        addErrorMessage(fieldID, msg);
        return false;
    }else{
        removeErrorMessage(fieldID, errorID);
        return true;
    }
}

function checkIsValidEmail(fieldID, msg){
    var email = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var emailVal = email.val() == undefined ? "" : email.val();

    if (emailVal != "" && !Validator.isEmail(emailVal)){
        addErrorMessage(fieldID, msg);
        return false;
    }else{
        removeErrorMessage(fieldID);
        return true;
    }
}

function isCheckBoxChecked(fieldID) {
	var newsletter = jQuery("#" + fieldID.replace(/:/g, "\\:"));
	return newsletter.is(':checked');
}

function checkEmail(fieldID, conditionalFieldID, msg){
    var newsletter = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var eMailNotOK = 0;
    if (newsletter.is(':checked')){
        eMailNotOK += checkIsEmailRequired(fieldID, conditionalFieldID, msg);
    } else {
        eMailNotOK += checkIsValidEmail(conditionalFieldID, msg);
    }
    return eMailNotOK;
}

function checkDateOfBirth(inBirthDay, inBirthMonth, inBirthYear){

    var birthDayVal   = jQuery("#" + inBirthDay.replace(/:/g, "\\:")).val();
    var birthMonthVal = jQuery("#" + inBirthMonth.replace(/:/g, "\\:")).val();
    var birthYearVal  = jQuery("#" + inBirthYear.replace(/:/g, "\\:")).val();

    removeErrorMessage(inBirthDay);
    removeErrorMessage(inBirthMonth);
    removeErrorMessage(inBirthYear);

    if (("" != birthDayVal) || ("" != birthMonthVal) || ("" != birthYearVal)) { // if
        // one
        // is
        // filled,
        // all
        // need
        // to
        // filled
        // out
        if ("" == birthDayVal || "" == birthMonthVal || "" == birthYearVal) {
            if ("" == birthDayVal){
                addErrorMessage(inBirthDay, "Bitte geben Sie einen gültigen Wert für \"Tag\" (zwischen 01 und 31) an.");
            }else if("" == birthMonthVal){
                addErrorMessageAt(inBirthMonth, inBirthDay, "Bitte geben Sie einen gültigen Wert für \"Monat\" (zwischen 01 und 12) an.");
            }else if("" == birthYearVal) {
                addErrorMessageAt(inBirthYear, inBirthDay, "Bitte geben Sie eine gültige vierstellige Zahl für \"Jahr\" an.");
            }
            return false;
        }
        else if (( !Validator.isNumber(birthDayVal) ) || ( (Validator.isNumber(birthDayVal)) && (!(0 < birthDayVal && birthDayVal < 32))  )) {
            addErrorMessage(inBirthDay, "Bitte geben Sie einen gültigen Wert für \"Tag\" (zwischen 01 und 31) an.");
            return false;
        }
        else if (( !Validator.isNumber(birthMonthVal) ) || ( (Validator.isNumber(birthMonthVal)) && (!(0 < birthMonthVal && birthMonthVal < 13))  )) {
                addErrorMessageAt(inBirthMonth, inBirthDay, "Bitte geben Sie einen gültigen Wert für \"Monat\" (zwischen 01 und 12) an.");
                return false;
            }
            else if (( !Validator.isNumber(birthYearVal) ) || ( (Validator.isNumber(birthYearVal)) && (!(1900 <= birthYearVal && birthYearVal <= 2100))  )) {
                    addErrorMessageAt(inBirthYear, inBirthDay, "Bitte geben Sie eine gültige vierstellige Zahl für \"Jahr\" an.");
                    return false;
                }
    }

    return true;
}

function checkArticleNumber(inPart1, inPart2, inPart3){

    var part1 = jQuery("#" + inPart1.replace(/:/g, "\\:")).val();
    var part2 = jQuery("#" + inPart2.replace(/:/g, "\\:")).val();
    var part3 = jQuery("#" + inPart3.replace(/:/g, "\\:")).val();

    removeErrorMessage(inPart1);
    removeErrorMessage(inPart2);
    removeErrorMessage(inPart3);

    if (part1 == "" || !Validator.isNumber(part1)){
        addErrorMessage(inPart1, "Bitte geben Sie im ersten Feld 2 Zahlen an.");
        return false;
    }else if (part2 == "" || !Validator.isNumber(part2)){
        addErrorMessageAt(inPart2, inPart1, "Bitte geben Sie im zweiten Feld 4 Zahlen an.");
        return false;
    }else if (part3 == "" || !Validator.isNumber(part3)){
        addErrorMessageAt(inPart3, inPart1, "Bitte geben Sie im dritten Feld 1 Zahl an.");
        return false;
    }else{
        return true;
    }
}

function checkArticleNumberAvena(inMediaCode, inPart1, inPart2, inPart3){

    var mediaCode = jQuery("#" + inMediaCode.replace(/:/g, "\\:")).val();
    var part1 = jQuery("#" + inPart1.replace(/:/g, "\\:")).val();
    var part2 = jQuery("#" + inPart2.replace(/:/g, "\\:")).val();
    var part3 = jQuery("#" + inPart3.replace(/:/g, "\\:")).val();

    removeErrorMessage(inMediaCode);
    removeErrorMessage(inPart1);
    removeErrorMessage(inPart2);
    removeErrorMessage(inPart3);

    if (mediaCode == "" || !Validator.isChar(mediaCode)){
        addErrorMessage(inMediaCode, "Bitte geben Sie im ersten Feld 2 Buchstaben an.");
        return false;
    }else if (part1 == "" || !Validator.isNumber(part1)){
        addErrorMessageAt(inPart1, inMediaCode, "Bitte geben Sie im zweiten Feld 2 Zahlen an.");
        return false;
    }else if (part2 == "" || !Validator.isNumber(part2)){
        addErrorMessageAt(inPart2, inMediaCode, "Bitte geben Sie im dritten Feld 4 Zahlen an.");
        return false;
    }else if (part3 == "" || !Validator.isNumber(part3)){
        addErrorMessageAt(inPart3, inMediaCode, "Bitte geben Sie im vierten Feld 1 Zahl an.");
        return false;
    }else{
        return true;
    }
}

function checkAllowedCountry(fieldID){
    return true;  // stub to be implemented in template page
}

function checkAllowedEmailCountryCode(fieldID){
    return true;  // stub to be implemented in template page
}

function chkLengthAndGoToNext(form,source,target,length){
    var formId = form;

    if(form != '') {
        formId = form + ':';
    }

    var src = document.getElementById(formId+source);
    var trg = document.getElementById(formId+target);

    if (src.value.length >= length ){
        trg.focus();
    }
}
// ---- internal helper methods
// -----------------------------------------------------------------------------------------
function addErrorMessage(fieldID, msg){
    removeErrorMessage(fieldID);
    var errorID =  fieldID + "_errorMSG";
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var errorField = jQuery("#" + errorID.replace(/:/g, "\\:"));

    if(errorField.length == 0){
        field.before("<span id='" + errorID + "' class='errorMSG'>" + msg + "<br /></span> ");
        addErrorClass(field);
    }
}
function addErrorMessageAt(fieldID, beforeFieldID, msg){
    var errorID =  fieldID + "_errorMSG";
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var beforeField = jQuery("#" + beforeFieldID.replace(/:/g, "\\:"));
    var errorField = jQuery("#" + errorID.replace(/:/g, "\\:"));

    if(errorField.length == 0){
        beforeField.before("<span id='" + errorID + "' class='errorMSG'>" + msg + "<br /></span> ");
        addErrorClass(field);
    }
}
function removeErrorMessage(fieldID){
    var errorID =  fieldID + "_errorMSG";
    var field = jQuery("#" + fieldID.replace(/:/g, "\\:"));
    var errorField = jQuery("#" + errorID.replace(/:/g, "\\:"));
    if(errorField.length != 0){
        errorField.remove();
        removeErrorClass(field);
    }
}

function removeAllErrorMessages(){
    removeGeneralMessage();
    jQuery(".errorMSG").remove();
    jQuery(".errorMSGInput").removeClass('errorMSGInput');
}

function removeErrorMessages(selector){
    jQuery(selector + " .errorMSG").remove();
    jQuery(selector + " .errorMSGInput").removeClass('errorMSGInput');
}

function addMessage(container, selector, msg){
    container.find(selector).removeClass("messagePlaceHolder").addClass("errorMSG").html(msg);
}
function removeMessage(container, selector){
    container.find(selector).text("").removeClass("errorMSG").addClass("messagePlaceHolder");
}

function addGeneralMessage(msg){
    var aMessage = msg != null ? msg : "Bitte geben Sie alle mit (*) gekennzeichneten Felder ein:";
    jQuery('#generalMessageField').removeClass("messagePlaceHolder").addClass("errorMSG").html(aMessage);
}

function addGeneralMessageAt(formID, msg){
    var form = jQuery("#" + formID.replace(/:/g, "\\:"));
    var aMessage = msg != null ? msg : "Bitte geben Sie alle mit (*) gekennzeichneten Felder ein:";
    form.find('.messagePlaceHolder').addClass("errorMSG").html(aMessage);
}

function addErrorClass(field){
    if (isSelect(field)){
        addErrorClassOnSelect(field);
    }else{
        jQuery(field).addClass('errorMSGInput');
    }
}
function removeErrorClass(field){
    if (isSelect(field)){
        removeErrorClassOnSelect(field);
    }else{
        jQuery(field).removeClass('errorMSGInput');
    }
}

function addErrorClassOnSelect(select){
    if (jQuery.browser.msie){
        if (!jQuery(select).parent().hasClass('errorMSGcontainer'))
            jQuery(select).wrap("<span class='errorMSGcontainer'></span>");
    }else{
        jQuery(select).addClass('errorMSGInput');
    }
}
function removeErrorClassOnSelect(select){
    if (jQuery.browser.msie){
        if (jQuery(select).parent().hasClass('errorMSGcontainer'))
            jQuery(select).unwrap();
    }else{
        jQuery(select).removeClass('errorMSGInput');
    }
}


function removeGeneralMessage(){
    jQuery('#generalMessageField').text("").removeClass("errorMSG").addClass("messagePlaceHolder");
}
function removeGeneralMessageAt(formID){
    var form = jQuery("#" + formID.replace(/:/g, "\\:"));
    form.find(".messagePlaceHolder").text("").removeClass("errorMSG");
}
function isSelect(node){
    return  jQuery(node).get(0).tagName.toUpperCase() == 'SELECT';
}

function scrollToFirstError(form){
    var firstError = jQuery("#" + form).find("span.errorMSG");
    if (firstError.length > 0)
        scrollIntoView(firstError, 10);
}

// ---- form validation methods
// -----------------------------------------------------------------------------------------

/* Validation of Required Fields of Login Form */
function chkLoginForm(doNotRemoveMessages){
    if (!doNotRemoveMessages)
        removeAllErrorMessages();
    var field1 = "login";
    var field2 = "password";
    var loginValue = jQuery("#" + field1).val();

    var isOK = checkNotEmptyField(field1, store.hasLoginPerMail
            ? "Bitte geben Sie Ihre E-Mail-Adresse an."
            : "Bitte geben Sie Ihre E-Mail-Adresse<br/>  oder Ihre Kunden-Nummer an.");

    if (isOK){
        if (store.hasLoginPerMail || !Validator.matches(loginValue, '^[-0-9]+$')){
            isOK = checkIsRequiredEmailSetAndValid(field1, null, null);
        } else {
            isOK = checkLoginByCustomerID(field1);
        }
    }
    isOK &= checkNotEmptyField(field2, "Bitte geben Sie Ihr Passwort ein.");

    return isOK;
}


/*
 * Validation of Required Fields of ComfortLogin on OrderSamplesForm
 * Stoffmusterkollektion
 */
function chkLoginOnSamplesForm(inForm){
    removeAllErrorMessages();
    var isOK = true;
    isOK &= checkNotEmptyCollection(inForm + ":catalog", 2, "Bitte wählen Sie mindestens eine Bestellung aus.");
    isOK &= chkLoginForm(true);

    if (isOK){
        removeGeneralMessage();
        return true;
    }else{
        addGeneralMessage(null);
        scrollToFirstError(inForm);
        return false;
    }
}

function chkQuickAddToCartForm(){
    return checkArticleNumber("productCode1", "productCode2", "productCode3");
}

function chkQuickAddToCartFormAvena(){
    return checkArticleNumberAvena("mediaCode", "productCode1", "productCode2", "productCode3");
}

function chkRequestPassword(form, withLogin){
    removeAllErrorMessages();
    var isOK = true;
    isOK &= checkIsRequiredEmailSetAndValid(form + ":email", "Bitte geben Sie Ihre E-Mail-Adresse an.", "Bitte geben Sie eine gültige E-Mail-Adresse an.")
    if (withLogin){
        if (store.usesCheckDigit)
            isOK &= checkNotEmptyLoginFields("loginPart1", "loginPart2");
        else
            isOK &= checkLoginNoCheckDigit("loginPart1");
    }
    return isOK;
}

function chkPasswordChangeForm(form) {
    var isOK = checkPasswordFields(form+":password_new", form+":password_confirmed", true);
    if (isOK){
        removeGeneralMessage();
        return true;
    }else{
        addGeneralMessage(null);
        return false;
    }
}

function chkAccountRemindForm(){
    removeAllErrorMessages();
    return checkNotEmptyLoginFields("login1", "login2");
}

/* Validation of Required Fields of Order-Catalogs Form */
function chkOrderCatalogForm1(form){
    var allUnChecked = true;
    for (i = 0; i < 10; i++) {
        if (document.getElementById(form + ':catalog' + i) != null) {
            if (document.getElementById(form + ':catalog' + i).checked) {
                allUnChecked = false;
            }
        }
    }
    if (allUnChecked ) {
        addGeneralMessage("Bitte wählen Sie mindestens einen Katalog aus.");
        return false;
    } else {
        removeGeneralMessage();
        return true;
    }
}

/* Validation of Required Fields of Order-Catalogs Form */
function chkOrderCatalogForm2(inForm, inSubform){
    var prefix = inForm + ":" + inSubform;
    var isOK = true;

	var checkCountry = checkAllowedCountry(prefix + ":country");
	var checkEMailSuffix = checkAllowedEmailCountryCode(prefix + ":email", !isCheckBoxChecked(prefix + ":newsletterSubscribed"));

    if(!checkCountry || !checkEMailSuffix){
        addGeneralMessage(null);
        scrollToFirstError(inForm);
        return false;
    }

    var locale = useCountryLocaleIfPossible(store.countryCode, jQuery("#" +inForm + "\\:" + inSubform + "\\:country").val());
    isOK &= checkNotEmptyField(prefix + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(prefix + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField(prefix + ":street", "Bitte geben Sie Ihre Straße und Nr. ein.");
    isOK &= checkNotEmptyField(prefix + ":country", "Bitte geben Sie Ihr Land ein.");
    isOK &= checkNotEmptyField(prefix + ":town", "Bitte geben Sie Ihren Ort ein.");
    isOK &= checkPostalcode(prefix + ":postalcode", locale);
    isOK &= checkIsNumber(prefix + ":phone", "Bitte bei der Telefonnummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(prefix + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(prefix + ":fax", "Bitte bei der Faxnummer nur Ziffern eingeben.");
    isOK &= checkEmail(prefix + ":newsletterSubscribed", prefix + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkDateOfBirth("birthDay", "birthMonth", "birthYear");

    if (isOK){
        removeGeneralMessage();
        return true;
    }else{
        addGeneralMessage(null);
        return false;
    }
}


/* Validation of the login according the email address */
function chkEmailLogin(){

    removeAllErrorMessages();
    var isOK = true;

    isOK &= checkIsRequiredEmailSetAndValid("login", null, null);
    isOK &= checkNotEmptyField("password", "Bitte geben Sie Ihr Passwort ein.");

    return isOK;

}

/* Validation of Required Fields of Order-Samples Form Stoffmusterkollektion */
function chkOrderSamplesForm(form, subform){
    removeAllErrorMessages();

    var locale = useCountryLocaleIfPossible(store.countryCode, jQuery("#" + form + "\\:" + subform + "\\:country").val());
    var prefix = form + ":" + subform;
    var isOK = true;

    isOK  = checkNotEmptyCollection(form + ":catalog", 2, "Bitte wählen Sie mindestens eine Bestellung aus.");
    isOK &= checkNotEmptyField(prefix + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(prefix + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField(prefix + ":street", "Bitte geben Sie Ihre Straße und Nr. ein.");
    isOK &= checkNotEmptyField(prefix + ":town", "Bitte geben Sie Ihren Ort ein.");
    isOK &= checkPostalcode(prefix + ":postalcode", locale);
    isOK &= checkIsNumber(prefix + ":phone", "Bitte bei der Telefonnummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(prefix + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(prefix + ":fax", "Bitte bei der Faxnummer nur Ziffern eingeben.");
    isOK &= checkEmail(prefix + ":newsletterSubscribed", prefix + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkDateOfBirth("birthDay", "birthMonth", "birthYear");

    if (isOK){
        removeGeneralMessage();
        return true;
    }else{
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }

}

function toggleEmailManadatory(){
    var theEmailMandatorryElement = this.document.getElementById('catalogEmail');
    theEmailMandatorryElement.style.visibility = theEmailMandatorryElement.style.visibility == "hidden" ? "visible" : "hidden";
}

function toggleRequiredIndicator(masterFieldID, dependentFieldID, indicatorID){
    var selector = ('#' + masterFieldID).replace(/:/g, "\\:") + ":checked";

    if(jQuery(selector).length){
        jQuery('#' + indicatorID).show();
    }else{
        jQuery('#' + indicatorID).hide();
        removeErrorMessage(dependentFieldID);
    }
}



/* Validation of Required Fields of Email-Contact Form */
function chkContactForm (form) {
    var locale = useCountryLocaleIfPossible(store.countryCode, jQuery("#" +form + "\\:country").val());
    var isOK = true;
    isOK &= checkNotEmptyField(form + ":subject", "Bitte geben Sie einen Betreff an.");
    isOK &= checkNotEmptyField(form + ":feedbacktext", "Bitte geben Sie eine Mitteilung ein.");
    isOK &= checkNotEmptyField(form + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(form + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField(form + ":street", "Bitte geben Sie Ihre Straße und Nr. ein.");
    isOK &= checkPostalcode(form + ":postalcode", locale);
    isOK &= checkNotEmptyField(form + ":town", "Bitte geben Sie Ihren Ort ein.");
    isOK &= checkIsNumber(form + ":phone", "Bitte bei der Telefonnummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(form + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(form + ":fax", "Bitte bei der Faxnummer nur Ziffern eingeben.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":email");

    if (!isOK){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }else {
        removeGeneralMessage();
        return true;
    }
}

function toggleDataTimeDisabledState(callBackRequestDateSelector){
    var callBackRequestDate = jQuery(callBackRequestDateSelector).val();
    var dateField = jQuery("#callbackForm:date".replace(/:/g, "\\:"));
    var timeField  = jQuery("#callbackForm:time".replace(/:/g, "\\:"));
    if(callBackRequestDate == "15min"){
        dateField.attr("disabled", "true");
        timeField.attr("disabled", "true");
        dateField.attr("style", "background: #efefef;");
        timeField.attr("style", "background: #efefef;");
    } else {
        dateField.removeAttr("disabled");
        timeField.removeAttr("disabled");
        dateField.removeAttr("style");
        timeField.removeAttr("style");
    }
}
function initDataTimeDisabledState(){
    toggleDataTimeDisabledState(jQuery(".formCallbackTimeItemLeftItem:checked"));
}

/* Validation of Required Fields of CallbackRequest Form */
function chkCallbackForm(form){

    var isOK = true;
    isOK &= checkNotEmptyField(form + ":MailSubject", "Bitte wählen Sie ein Thema.");
    isOK &= checkNotEmptyField(form + ":FirstNameTextfield", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(form + ":LastNameTextfield", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkIsRequredPhoneNumberSetAndValid(form + ":telTextfield");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkNotEmptyField(form + ":FeedbackText", "Bitte geben Sie eine Mitteilung ein.");

    if (!isOK){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }else {
        removeGeneralMessage();
        return true;
    }
}

/* Validation of Required Fields of RecommendationForm */
function chkRecommendForm(form){
    var isOK = true;
    isOK &= checkNotEmptyField(form + ":senderFirstName", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(form + ":senderLastName", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":senderEmail", "Bitte geben Sie eine Absender-E-Mail-Adresse ein.", "Bitte geben Sie eine gültige Absender-E-Mail-Adresse an.");
    isOK &= checkNotEmptyField(form + ":receiverFirstName", "Bitte geben Sie den Vornamen des Empfängers ein.");
    isOK &= checkNotEmptyField(form + ":receiverLastName", "Bitte geben Sie den Nachnamen des Empfängers ein.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":receiverEmail", "Bitte geben Sie eine Empfänger-E-Mail-Adresse ein.", "Bitte geben Sie eine gültige Empfänger-E-Mail-Adresse an.");
    isOK &= checkNotEmptyField(form + ":captcha", "Bitte geben Sie einen Sicherheitscode an.");

    if (!isOK){
        addGeneralMessage(null);
        return false;
    }else {
        removeGeneralMessage();
        return true;
    }
}

function chkWishlistForm(form){
    var isOK = true;
    isOK &= checkNotEmptyField(form + ":senderLastName", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":senderEmail", "Bitte geben Sie eine Absender-E-Mail-Adresse ein.", "Bitte geben Sie eine gültige Absender-E-Mail-Adresse an.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":receiverEmail", "Bitte geben Sie eine Empfänger-E-Mail-Adresse ein.", "Bitte geben Sie eine gültige Empfänger-E-Mail-Adresse an.");
    isOK &= checkNotEmptyField(form + ":captcha", "Bitte geben Sie einen Sicherheitscode an.");

    if (!isOK){
        addGeneralMessage(null);
        return false;
    }else {
        removeGeneralMessage();
        return true;
    }
}

/* Validation of Required Fields of Newsletter-Signup Form */
function chkNewsletterForm (form) {
	var checkCountry = checkAllowedCountry(form + ":country");
	var checkEMailSuffix = checkAllowedEmailCountryCode(form + ":email", false);

    if(!checkCountry || !checkEMailSuffix){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }

    var locale = useCountryLocaleIfPossible(store.countryCode, jQuery("#" +form + "\\:country").val());
    var isOK = true;
    isOK &= checkNotEmptyField(form + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(form + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkPostalcode(form + ":postalcode", locale, false);
    isOK &= checkIsNumber(form + ":phone", "Bitte bei der Telefonnummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(form + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    isOK &= checkIsNumber(form + ":fax", "Bitte bei der Faxnummer nur Ziffern eingeben.");
    isOK &= checkIsRequiredEmailSetAndValid(form + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkDateOfBirth("birthDay", "birthMonth", "birthYear");

    if (!isOK){
        addGeneralMessage(null);
        return false;
    }else {
        removeGeneralMessage();
        return true;
    }
}


/*
 * Validation of Fields in Chnage E-Mail Form: OldEMail, 2times new Email (the
 * latter have to be equal)
 */
function chkChangeEmailFields (oldEmailField, newEmailField1, newEmailField2, form, target) {

    var arrayIndex=0;
    var tempArray=new Array(5);
    var alertText="";

    if (   ( this.document.getElementById(form+':'+oldEmailField).value=="" ) || ( this.document.getElementById(form+':'+newEmailField1).value=="" )  || ( this.document.getElementById(form+':'+newEmailField2).value=="" ) )
    {
        tempArray[arrayIndex]="Bitte geben Sie in allen Feldern E-Mail-Adressen ein.";
        arrayIndex++;
    }

    if (     (!Validator.isEmail(this.document.getElementById(form+':'+oldEmailField).value))  || (!Validator.isEmail(this.document.getElementById(form+':'+newEmailField1).value))  || (!Validator.isEmail(this.document.getElementById(form+':'+newEmailField2).value))    )
    {
        tempArray[arrayIndex]="Bitte geben Sie gültige E-Mail-Adressen an.";
        arrayIndex++;
    }
    if(     (this.document.getElementById(form+':'+newEmailField1).value)  != (this.document.getElementById(form+':'+newEmailField2).value)  )
    {
        tempArray[arrayIndex]="Die letzten beiden Felder müssen übereinstimmen.";
        arrayIndex++;
    }

    if (arrayIndex != 0) {
        var i=0;
        for (i=0; i<arrayIndex; i++) {
            alertText=alertText+tempArray[i]+"\n"
        }
        alert(alertText);
    }
    else {
        // This is an emulation of the action link on the hidden form being
        // clicked and submitted.
        document.getElementById(form+':'+target).onclick(null);
    }
}



function chkRegistrationForm(form, containsTailoredShirt){

    var countryCode = useCountryLocaleIfPossible(store.countryCode, jQuery("#" + form + "\\:country").val());
    var hasTailoredShirt = containsTailoredShirt == 'true';
    removeGeneralMessage();
    removeAllErrorMessages();

    if(store.isCountryRequired && !checkAllowedCountry(form + ":country")){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }

    var isOK = true;
    isOK &= checkNotEmptyField (form + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField (form + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField (form + ":street", "Bitte geben Sie Ihre Straße und Nr. ein.");

    if(store.isCountryRequired)
        isOK &= checkNotEmptyField (form + ":country", "Bitte geben Sie Ihr Land ein.");

    isOK &= checkNotEmptyField (form + ":town", "Bitte geben Sie Ihren Ort ein.");
    // isOK &= checkPostalcode (form + ":postalcode", countryCode);
    isOK &= checkDependentPostalcode(form + ":postalcode", form + ":country", countryCode);
    if (hasTailoredShirt){
        isOK &= checkIsRequredPhoneNumberSetAndValid(form + ":phone", "Bitte geben Sie Ihre Telefonnummer ein.");
    }else{
        isOK &= checkIsNumber  (form + ":phone", "Bitte bei der Telefonnummer nur Ziffern eingeben.");
    }
    isOK &= checkIsNumber      (form + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    // isOK &= checkIsNumber (form + ":fax", "Bitte bei der Faxnummer nur Ziffern
    // eingeben.");
    isOK &= checkIsValidEmail  (form + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkDateOfBirth   ("birthDay", "birthMonth", "birthYear");
    isOK &= checkNotEmptyField (form + ":dataProtection", "Bitte Datenschutz akzeptieren.");
    isOK &= checkPasswordFields(form + ":password", form + ":passwordRepeat", false);

    if(store.isEmailRequired || hasTailoredShirt){
        isOK &= checkIsRequiredEmailSetAndValid(form + ":email", "Bitte geben Sie Ihre E-Mail-Adresse ein");
    }else if(isEmailRequired(form, "password", "passwordRepeat")){
        isOK &= checkIsRequiredEmailSetAndValid(form + ":email", "Wenn Sie die Vorteile des Komfort-Login nutzen möchten, geben Sie bitte Ihre E-Mail Adresse an.");
    }

    if (!isOK){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }else {
        return true;
    }
}

function isEmailRequired(form, fieldID1, fieldID2){
    var passwd = jQuery("#" + (form + ":"+ fieldID1).replace(/:/g, "\\:")).val();
    var passwd2 = jQuery("#" + (form + ":" + fieldID2).replace(/:/g, "\\:")).val();

    if (passwd != "" && passwd.length >= 5 && passwd == passwd2) {
        addRequiredIndicator("#" + form + "\\:emailLabel");
        return true;
    } else {
        removeRequiredIndicator("#" + form + "\\:emailLabel");
        return false;
    }
}


function chkAdressEditForm(form, payment){

    var countryCode = useCountryLocaleIfPossible(store.countryCode, jQuery("#" + form + "\\:country").val());

    removeGeneralMessage();
    removeAllErrorMessages();

    if (payment && !checkAllowedCountry(form + ":country")){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }

    var isOK = true;
    isOK &= checkNotEmptyField(form + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField(form + ":lastname",  "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField(form + ":street",    "Bitte geben Sie Ihre Straße und Nr. ein.");
    isOK &= checkNotEmptyField(form + ":country",   "Bitte geben Sie Ihr Land ein.");
    isOK &= checkNotEmptyField(form + ":town",      "Bitte geben Sie Ihren Ort ein.");
    isOK &= checkIsValidEmail   (form + ":email",     "Bitte geben Sie eine gültige E-Mail-Adresse an.");

    if(store.isEmailRequired){
        isOK &= checkNotEmptyField(form + ":email", "Bitte geben Sie Ihre E-Mail-Adresse ein.");
    }

    isOK &= checkPostalcode   (form + ":postalcode", countryCode);

    if (payment) {
        isOK &= checkIsNumber       (form + ":phone",     "Bitte bei der Telefonnummer nur Ziffern eingeben.");
        isOK &= checkIsNumber       (form + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
        isOK &= checkIsNumber       (form + ":fax",       "Bitte bei der Faxnummer nur Ziffern eingeben.");
        if(store.isEmailRequired){
            isOK &= checkIsRequiredEmailSetAndValid(form + ":email",     null,"Bitte geben Sie eine gültige E-Mail-Adresse an.");
        }
        isOK &= checkDateOfBirth    ("birthDay", "birthMonth", "birthYear");
    }

    if (!isOK){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }else {
        return true;
    }
}
function checkSelectionBeforeCart(el, context, isocode, selectName){
    return chkNotEmptySelection(el, context, isocode, selectName, 'layerPopup');
}

function checkSelectionProductDetailMini(el, context, isocode, selectName){
    var aResult = chkNotEmptySelection(el, context, isocode, selectName);
    if (aResult){
        jQuery("#productDetailMini").hide();
        getLayer().animate({width: 642, height : 260 }, 300, function() {
        });
    }
    return aResult;
}

// Checks if an option is selected in all selects on the product detail page.
function chkNotEmptySelection(el, context, isocode, selectName, target, width, height, left, top)
{
    var form = jQuery(el).parents().map(function () {if (jQuery(this).hasClass("product")) return this;});
    var submit = true;
    var theSelectName = selectName!=null?"select."+selectName:"select.variants_select";

    form.find(theSelectName).each(function () {
        submit = submit * (this.value != "0");
        if (this.value == 0){
            addErrorClassOnSelect(this);
        }else{
            removeErrorClassOnSelect(this);
        }
    });
    if(!submit){
        addMessage(form, '.generalMessageField', 'Bitte wählen Sie aus allen Bereichen etwas aus!');
    }else{
        removeMessage(form, '.generalMessageField');
    }

    // Check if cookies are enabled, if no go to specific errorpage
    if (!document.cookie)
    {
        var browser = navigator.appName;
        if (browser == 'Netscape')
        {
            var url = "pages/page.jsf?pageid=datenschutz_cookies_" + isocode + "_textpage";
        }
        else
        {
            var url = context + "/pages/page.jsf?pageid=datenschutz_cookies_" + isocode + "_textpage";
        }
        cookieErrorPage = window.open( url , '_self' );
        cookieErrorPage.focus();
        submit = false;
    }
    var aWidth =  typeof width != 'undefined' ? width : 642;
    var aHeight =  typeof height != 'undefined' ? height : 260;
    var aLeft =  typeof left != 'undefined' ? left : 76;
    var aTop = jQuery(el).offset().top - 300;

    if (submit && typeof target != 'undefined'){
        openLayer("", aWidth, aHeight, aLeft, aTop);
    }
    return submit;
}
function checkAllSelections(productSelector){
    var products = jQuery(productSelector);
    var ok = true;
    products.find("select").each(function () {
        ok *= (this.value != "0");
        if (this.value == 0){
            addErrorClassOnSelect(this);
        }else{
            removeErrorClassOnSelect(this);
        }
    });
    if(!ok){
        addGeneralMessage('Bitte wählen Sie aus allen Bereichen etwas aus!');
    }else{
        removeGeneralMessage();
        openLayer("", 675, 350, 76, 30, "layerPopup");
    }
    return ok;
}

function loadCartContent(context) {
    jQuery('#cartContentDiv').load(context + 'components/miniCartBox.jsf?t=' + new Date().getTime());
}

// Checks if an option is selected in all selects on the product detail page.
function checkAllSelectionsBeforeCart(element, width, height, left, top)
{

    var aWidth = (typeof width != 'undefined') ? width : 642;
    var aHeight = (typeof height != 'undefined') ? height : 546;
    var aLeft = (typeof left != 'undefined') ? left : 76;
    var aTop = (typeof top != 'undefined') ? top : 80;


    var form = jQuery(element).parents().map(function () {if (jQuery(this).is("form")) return this;});

    var submit = true;
    jQuery(form).find(".show select.variants_select").each(function () {
        submit = submit * (this.value != "0");
        if (this.value == 0){
            addErrorClassOnSelect(this);
        }else{
            removeErrorClassOnSelect(this);
        }
    });

    if(!submit){
        addMessage(form, '.generalMessageField', 'Bitte wählen Sie aus allen Bereichen etwas aus!');
    }else{
        removeMessage(form, '.generalMessageField');
    }


    // jQuery(form).find(".show select.variants_select").each(function () {
    // submit = submit * (this.value != "0")
    // });

    // if(!submit) alert("Bitte wählen Sie aus allen Bereichen etwas aus!");

    // Check if cookies are enabled, if no go to specific errorpage
    if (!document.cookie)
    {
        var browser = navigator.appName;

        var page = "pages/page.jsf?pageid=datenschutz_cookies_de_textpage";
        var context = "/walbusch-de";
        var url = (browser == 'Netscape') ? page : context + "/" + page;

        cookieErrorPage = window.open( url , '_self' );
        cookieErrorPage.focus();
        submit = false;
    }
    if (submit){
        openLayer("", aWidth, aHeight, aLeft, aTop);
    }
    return submit;
}

function chkOrderGiftVoucherForm2(form){


    removeGeneralMessage();
    removeAllErrorMessages();

    var isOK = true;

    // sender (1st part of form)
    var countryCode = useCountryLocaleIfPossible(store.countryCode, jQuery("#" + form + "\\:country").val());

    isOK &= checkNotEmptyField (form + ":firstname", "Bitte geben Sie Ihren Vornamen ein.");
    isOK &= checkNotEmptyField (form + ":lastname", "Bitte geben Sie Ihren Nachnamen ein.");
    isOK &= checkNotEmptyField (form + ":street", "Bitte geben Sie Ihre Straße und Nr. ein.");
    isOK &= checkNotEmptyField (form + ":country", "Bitte geben Sie Ihr Land ein.");

    isOK &= checkNotEmptyField (form + ":town", "Bitte geben Sie Ihren Ort ein.");
    isOK &= checkPostalcode    (form + ":postalcode", countryCode);
    isOK &= checkIsRequredPhoneNumberSetAndValid(form + ":phone", "Bitte geben Sie Ihre Telefonnummer ein.");

    isOK &= checkIsNumber      (form + ":cellphone", "Bitte bei der Handynummer nur Ziffern eingeben.");
    isOK &= checkIsNumber      (form + ":fax", "Bitte bei der Faxnummer nur Ziffern eingeben.");
    isOK &= checkIsValidEmail  (form + ":email", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
    isOK &= checkDateOfBirth   ("birthDay", "birthMonth", "birthYear");


    // receiver (2nd part of form)
    var separateDelivery = jQuery("#sendGiftVoucherToDeliveryAddress").is(":checked");
    if(separateDelivery){
        var countryCode2 = useCountryLocaleIfPossible(store.countryCode, jQuery("#" + form + "\\:country2").val());

        isOK &= checkNotEmptyField (form + ":firstname2", "Bitte geben Sie Ihren Vornamen ein.");
        isOK &= checkNotEmptyField (form + ":lastname2", "Bitte geben Sie Ihren Nachnamen ein.");
        isOK &= checkNotEmptyField (form + ":street2", "Bitte geben Sie Ihre Straße und Nr. ein.");
        isOK &= checkNotEmptyField (form + ":country2", "Bitte geben Sie Ihr Land ein.");

        isOK &= checkNotEmptyField (form + ":town2", "Bitte geben Sie Ihren Ort ein.");

        isOK &= checkPostalcode    (form + ":postalcode2", countryCode2);
        isOK &= checkIsNumber      (form + ":phone2", "Bitte bei der Telefonnummer nur Ziffern eingeben.");

        isOK &= checkIsNumber      (form + ":cellphone2", "Bitte bei der Handynummer nur Ziffern eingeben.");
        isOK &= checkIsNumber      (form + ":fax2", "Bitte bei der Faxnummer nur Ziffern eingeben.");
        isOK &= checkIsValidEmail  (form + ":email2", "Bitte geben Sie eine gültige E-Mail-Adresse an.");
        isOK &= checkDateOfBirth   (form + ":birthDay2", form + ":birthMonth2", form + ":birthYear2");
    }

    if (!isOK){
        addGeneralMessage(null);
        scrollToFirstError(form);
        return false;
    }else {
        return true;
    }
}

function chkAndGoNext(form,source,target,length){
	var src = document.getElementById(form+':'+source);
	var trg = document.getElementById(form+':'+target);
	if (!Validator.isNumber(src.value)){
		alert("Bitte geben Sie nur Zahlen ein!");
		var newValue =new Array();
		for (var i = 0; i < src.value.length; i++){
			if (Validator.isDigit(src.value[i])){
				newValue[i] = src.value[i];
			}
		}
		src.value = "";
		for (var i = 0 ; i < newValue.length; i++){
			if (Validator.isDigit(newValue[i])){
				src.value = src.value + newValue[i];
			}
		}
		return;
	}
	if (src.value.length >= length ){
		trg.focus();
	}
}

function incrementAmount(form,field) {
    // alert(form+":"+field);
    var elem = document.getElementById(form+":"+field);
    var value = elem.value;
    if (!Validator.isNumber(value)){
        elem.value = 1;
    } else {
        elem.value = (value*1)+1;
    }
}

function decrementAmount(form,field) {
    // alert(form+":"+field);
    var elem = document.getElementById(form+":"+field);
    var value = elem.value;
    if (!Validator.isNumber(value)){
        elem.value = 1;
    } else {
        if(value>1) {
            elem.value = (value*1)-1;
        } else {
            elem.value = 1;
        }
    }
}

/*******************************************************************************
 * ********************************** External Code
 * **************************************************
 ******************************************************************************/

/**
 * Various form validation methods.
 *
 * @author Moxiecode
 * @copyright Copyright Ãƒâ€šÃ‚Â© 2004-2007, Moxiecode Systems AB, All rights
 *            reserved.
 */

/**
 * // String validation:
 *
 * if (!Validator.isEmail('myemail')) alert('Invalid email.');
 *  // Form validation:
 *
 * var f = document.forms['myform'];
 *
 * if (!Validator.isEmail(f.myemail)) alert('Invalid email.');
 */
var Validator = {
    isEmail : function(s) {
        return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
    },

    isAbsUrl : function(s) {
        return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
    },

    isSize : function(s) {
        return this.test(s, '^[0-9]+(px|%)?$');
    },

    isChar : function(s) {
        return this.test(s, '^[A-Za-z]*$');
    },

    isId : function(s) {
        return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
    },

    isEmpty : function(s) {
        var nl, i;

        if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
            return true;

        if (s.type == 'checkbox' && !s.checked)
            return true;

        if (s.type == 'radio') {
            for (i=0, nl = s.form.elements; i<nl.length; i++) {
                if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
                    return false;
            }

            return true;
        }

        return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
    },

    isNumber : function(s, d) {
        return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
    },

    isDigit : function(s) {
        var p = '[0-9]';
        return s == '' || new RegExp(p).test(s);
    },

    test : function(s, p) {
        s = s.nodeType == 1 ? s.value : s;

        return s == '' || new RegExp(p).test(s);
    },

    isCustomerNumber : function(s, withCheckDigit) {
        if (withCheckDigit)
            return this.test(s, '^[0-9]{7}-?[0-9]{1}$');
        return this.test(s, '^[0-9]{7}$');
    },

    matches : function(s, p){
        return  this.test(s, p);
    }
};

function useCountryLocaleIfPossible(storeCountry, selectedCountry) {
    if(storeCountry == selectedCountry || selectedCountry == 'de' || selectedCountry == 'ch' || selectedCountry == 'at'){
        return selectedCountry;
    }
    return storeCountry;
}

function addRequiredIndicator(labelSelector){
    var label = jQuery(labelSelector);
    if (label.find("img.checkmandatory").length == 0){
        label.append("<img src='" + store.requiredIndicator + "' alt='Pflichtfeld' class='checkmandatory'/>");
    }
}

function removeRequiredIndicator(labelSelector){
    jQuery(labelSelector + " img.checkmandatory").remove();
}

/*******************************************************************************
 * ********************************** End Of External Code
 * ********************************************
 ******************************************************************************/


