// https://fgnass.github.com/spin.js
(function(a,b){function M(a){F(arguments,function(c,d){a[c]===b&&(a[c]=d)});return a}function L(a){F(arguments,function(b,c){a[l][K(a,b)||b]=c});return a}function K(a,c){var e=a[l],f,g;if(e[c]!==b)return c;c=c.charAt(0).toUpperCase()+c.slice(1);for(g=0;g<C[d];g++){f=C[g]+c;if(e[f]!==b)return f}}function J(a,b){var c=[i,b,~~(a*100)].join("-"),e="{"+i+":"+a+"}",f;if(!D[c]){for(f=0;f<C[d];f++)try{I.insertRule("@"+(C[f]&&"-"+C[f].toLowerCase()+"-"||"")+"keyframes "+c+"{0%{"+i+":1}"+b+"%"+e+"to"+e+"}",I.cssRules[d])}catch(g){}D[c]=1}return c}function H(a,b,c){c&&!c[s]&&H(a,c),a.insertBefore(b,c||null);return a}function G(b){var c=a.createElement(b||"div");F(arguments,function(a,b){c[a]=b});return c}function F(a,b){var c=~~((a[d]-1)/2);for(var e=1;e<=c;e++)b(a[e*2-1],a[e*2])}var c="width",d="length",e="radius",f="lines",g="trail",h="color",i="opacity",j="speed",k="shadow",l="style",m="height",n="left",o="top",p="px",q="childNodes",r="firstChild",s="parentNode",t="position",u="relative",v="absolute",w="animation",x="transform",y="Origin",z="coord",A="#000",B=l+"Sheets",C="webkit0Moz0ms0O".split(0),D={},E;H(a.getElementsByTagName("head")[0],G(l));var I=a[B][a[B][d]-1],N=function(a){this.el=this[f](this.opts=M(a||{},f,12,g,100,d,7,c,5,e,10,h,A,i,.25,j,1))},O=N.prototype={spin:function(a){var b=this,c=b.el;a&&H(a,L(c,n,~~(a.offsetWidth/2)+p,o,~~(a.offsetHeight/2)+p),a[r]),b.on=1;if(!E){var d=b.opts,e=0,h=20/d[j],k=(1-d[i])/(h*d[g]/100),l=h/d[f];(function m(){e++;for(var a=d[f];a;a--){var g=Math.max(1-(e+a*l)%h*k,d[i]);b[i](c,d[f]-a,g,d)}b.on&&setTimeout(m,50)})()}return b},stop:function(){var a=this,b=a.el;a.on=0,b[s]&&b[s].removeChild(b);return a}};O[f]=function(a){function s(b,g){return L(G(),t,v,c,a[d]+a[c]+p,m,a[c]+p,"background",b,"boxShadow",g,x+y,n,x,"rotate("+~~(360/a[f]*q)+"deg) translate("+a[e]+p+",0)","borderRadius","100em")}var b=L(G(),t,u),l=J(a[i],a[g]),q=0,r;for(;q<a[f];q++)r=L(G(),t,v,o,1+~(a[c]/2)+p,x,"translate3d(0,0,0)",w,l+" "+1/a[j]+"s linear infinite "+(1/a[f]/a[j]*q-1/a[j])+"s"),a[k]&&H(r,L(s(A,"0 0 4px "+A),o,2+p)),H(b,H(r,s(a[h],"0 0 1px rgba(0,0,0,.1)")));return b},O[i]=function(a,b,c){a[q][b][l][i]=c};var P="behavior",Q="url(#default#VML)",R="group0roundrect0fill0stroke".split(0);(function(){var a=L(G(R[0]),P,Q),b;if(!K(a,x)&&a.adj){for(b=0;b<R[d];b++)I.addRule(R[b],P+":"+Q);O[f]=function(){function s(d,g,k){H(l,H(L(j(),"rotation",360/a[f]*d+"deg",n,~~g),H(L(G(R[1],"arcsize",1),c,b,m,a[c],n,a[e],o,-a[c]/2,"filter",k),G(R[2],h,a[h],i,a[i]),G(R[3],i,0))))}function j(){return L(G(R[0],z+"size",g+" "+g,z+y,-b+" "+ -b),c,g,m,g)}var a=this.opts,b=a[d]+a[c],g=2*b,l=j(),q=~(a[d]+a[e]+a[c])+p,r;if(a[k])for(r=1;r<=a[f];r++)s(r,-2,"progid:DXImage"+x+".Microsoft.Blur(pixel"+e+"=2,make"+k+"=1,"+k+i+"=.3)");for(r=1;r<=a[f];r++)s(r);return H(L(G(),"margin",q+" 0 0 "+q,t,u),l)},O[i]=function(a,b,c,d){d=d[k]&&d[f]||0,a[r][q][b+d][r][r][i]=c}}else E=K(a,w)})(),window.Spinner=N})(document)
$.fn.spin = function(opts) {
  this.each(function() {
    var $this = $(this),
        spinner = $this.data('spinner');

    if (spinner) {
    	spinner.stop();
    	$this.data('spinner', null);
    	return;
    }
    if (opts !== false) {
      opts = $.extend({color: $this.css('color')}, opts);
      spinner = new Spinner(opts).spin(this);
      $this.data('spinner', spinner);
    }
  });
  return this;
};

function submitRegister(sForm) {
    if (oForm = document.getElementById(sForm)) {
        if (oObj = document.getElementById('name')) {
            if (!checkEmail(oObj.value)) {
                alert(messages.EMAIL_INVALID);
                return false;
            }
        }
        if (oObj = document.getElementById('password')) {
            if (oObj.value == '') {
                alert(messages.PASSWORD_EMPTY);
                return false;
            }
            if (!checkPass('password', 'passwordCheck')) {
                alert(messages.PASSWORD_NO_MATCH);
                return false;
            }
        }
        if (oObj = document.getElementById('Invoice_FirstName')) {
            if (!checkAddressInvoice()) return false;
        }
        oForm.submit();
        return true;
    }
    return false;
}

function submitLogin(sForm, sType) {
    if(oForm = document.getElementById(sForm)) {
       oForm.x.value = sType;
       oForm.submit();
    }
    return false;
}

function submitPassword(sForm) {
    if (oForm = document.getElementById(sForm)) {
        if (checkPass('password', 'passwordCheck')) {
            oForm.submit();
            return true;
        } else alert(messages.PASSWORD_NO_MATCH);
    }
    return false;
}

function submitLost() {
    if (oField = document.getElementById('name')) {
        if (checkEmail(oField.value)) {
            document.lost.submit();
        }
    }
    return false;
}

function submitNewsletter(sType) {
    if (oObj = document.getElementById('EMail')) {
        if (oObj.value != '') {
            document.newsletter.x.value = sType;
            document.newsletter.submit();
        } else alert(messages.EMAIL_EMPTY);
    }
    return false;
}

function submitContact() {
    if (oObj = document.getElementById('FullName')) {
        if (oObj.value == '') {
            alert(messages.NAME_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Email')) {
        if (!checkEmail(oObj.value)) {
            alert(messages.EMAIL_INVALID);
            return false;
        }
    }
    if (oObj = document.getElementById('Message')) {
        if (oObj.value == '') {
            alert(messages.MESSAGE_EMPTY);
            return false;
        }
    }
    document.contact.submit();
    return true;
}

function submitLeaflet() {
    document.product.action = '/leaflet.htm';
    document.product.submit();
    return true;
}

function submitBasket() {
    document.product.action = '/basket.htm';
    if (oObj = document.getElementById('MID')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.SIZE_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('GlobalColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('GlobalColor2')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('GlobalColor3')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('DesignColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('GlobalColor4')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.CARBON_COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Numerics')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.NUMBER_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('GlobalInOut')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.IN_OUT_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('BlackboardColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('LeafColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('FeltColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('BayernColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('ClockColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_CLOCK_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('3DAlphabet')) {
        if (oObj.value.length<1) {
            alert(messages.LETTER_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('TypeFace')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.TYPEFACE_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('TypeFaceSelt')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.TYPEFACE_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('AlenioLightsColor')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.COLOR_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('ZodiacSign')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.ZODIAC_SIGN_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('alenioLightsHalterung')) {
        if (oObj.selectedIndex == 0) {
            alert(messages.MOUNTING_METHOD_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementsByName('form_Attributes_GlobalView')) {
        if (oObj.length > 0) {
            if (!oObj[0].checked && !oObj[1].checked) {
                alert(messages.ORIENTATION_EMPTY);
                return false;
            }
        }
    }
	$(document.product).ajaxSubmit(function() {
		reloadHeaderBasket();
		document.product.reset();
	});
   
    return true;
}

function submitNoRegister(sForm) {
    if (oForm = document.getElementById(sForm)) {
        if (oObj = document.getElementById('name')) {
            if (!checkEmail(oObj.value)) {
                alert(messages.EMAIL_INVALID);
                return false;
            }
        }
        if (oObj = document.getElementById('Invoice_FirstName')) {
            if (!checkAddressInvoice()) return false;
        }
        if (oObj = document.getElementById('Delivery_check')) {
            if (oObj.checked) {
                if (oObj = document.getElementById('Delivery_FirstName')) {
                    if (!checkAddressDelivery()) return false;
                }
            }
        }
        oForm.submit();
        return true;
    }
    return false;
}

function setRadioButtonChecked(id) {
    if (btn = document.getElementById(id)) {
        if (btn.type == 'radio') {
            btn.checked = true;
            btn.onchange();
        }
    }
}

function updatePaymentMethodDiscriptions() {
    if (form = document.forms['payment']) {
        for (var i = 0; i < form.elements.length; i++) {
            var element = form.elements[i];
            if (element.type == 'radio') {
                if (descr = document.getElementById(element.id + 'Description')) {
                    descr.style.display = (element.checked) ? 'block' : 'none';
                }
                if (element.checked) {
                    submitPaymentNoCheck(element.form.id);
                }
            }
        }
    }
}

function submitFormOnEnter(sSubmitButton, event) {
    if (event.keyCode == 13) {
        var oSubmitButton = document.getElementById(sSubmitButton);
        if (oSubmitButton) {
            oSubmitButton.onclick();
        }
    }
    return true;
}

function submitReview(sForm, sID) {
    if (oForm = document.getElementById(sForm + '_' + sID)) {
        if (oObj = document.getElementById('rating_' + sID)) {
            if (oObj.value != '0') {
                if (oObj = document.getElementById('review_' + sID)) {
                    if (oObj.value != '') {
                        oForm.submit();
                        return true;
                    } else alert(messages.COMMENT_EMPTY);
                }
            } else alert(messages.RATING_EMPTY);
        }
    }
    return false;
}

function checkEmail(sValue) {
    reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)(\\@)([a-zA-Z0-9\\-\\.]+)(\\.)([a-zA-Z]{2,4})$');
    return reg.test(sValue);
}

function checkPass(sPass1, sPass2) {
    if ((oPass = document.getElementById(sPass1)) && (oPassCheck = document.getElementById(sPass2))) {
        return (oPass.value == oPassCheck.value);
    }
    return false;
}

function checkAddressInvoice() {
    if (oObj = document.getElementById('Invoice_FirstName')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_FIRST_NAME_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Invoice_LastName')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_LAST_NAME_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Invoice_Street')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_STREET_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Invoice_StreetNr')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_HOUSE_NO_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Invoice_Postcode')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_ZIP_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Invoice_City')) {
        if (oObj.value == '') {
            alert(messages.INVOICE_CITY_EMPTY);
            return false;
        }
    }
    return true;
}

function checkAddressDelivery() {
    if (oObj = document.getElementById('Delivery_FirstName')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_FIRST_NAME_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Delivery_LastName')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_LAST_NAME_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Delivery_Street')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_STREET_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Delivery_StreetNr')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_HOUSE_NO_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Delivery_Postcode')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_ZIP_EMPTY);
            return false;
        }
    }
    if (oObj = document.getElementById('Delivery_City')) {
        if (oObj.value == '') {
            alert(messages.DELIVERY_CITY_EMPTY);
            return false;
        }
    }
    return true;
}

function changeLargeImage(oElem, sTrg) {
    if (oObj = document.getElementById('largeImage')) oObj.src = oElem.src.replace(/\/\w\//i, sTrg);
    if (oObj = document.getElementById('zoomer')) oObj.href = oElem.src.replace(/\/\w\//i, '/');
    return false;
}

function previewColorByOption(oObjSource) {
    oOption = null;
    if (oDest = document.getElementById('GlobalColorPreview')) {
        for (i = 0; i < oObjSource.options.length; i++) {
            if (oObjSource.options[i].selected == true) {
                oOption = oObjSource.options[i];
                break;
            }
        }
        if (oOption) {
            if (oOption.value != 'None') oDest.style.background = oOption.style.backgroundColor;
            else oDest.style.background = 'transparent url(/gfx/shop/bg_color.gif) no-repeat;';
        }
    }
    return false;
}

function previewColorByOption2(oObjSource) {
    oOption = null;
    if (oDest = document.getElementById('GlobalColor2Preview')) {
        for (i = 0; i < oObjSource.options.length; i++) {
            if (oObjSource.options[i].selected == true) {
                oOption = oObjSource.options[i];
                break;
            }
        }
        if (oOption) {
            if (oOption.value != 'None') oDest.style.background = oOption.style.backgroundColor;
            else oDest.style.background = 'transparent url(/gfx/shop/bg_color.gif) no-repeat;';
        }
    }
    return false;
}

function setPriceByOption(oObjSource) {
    var oOption = null;
    var oDest = document.getElementById('price');
    var oArtNr = document.getElementById('artnr');
    var price_val;
    if (oDest  && oArtNr ) {
        for (i = 0; i < oObjSource.options.length; i++) {
            if (oObjSource.options[i].selected == true) {
                oOption = oObjSource.options[i];
                break;
            }
        }
        if (oOption) {
        	var parts = oOption.title.split('|');
        	oDest.innerHTML = messages.PRICE.replace(/__PRICE__/, parts[0]);
        	oArtNr.innerHTML = parts[1];
        	$(oDest).next().hide();
        }
    }
    return false;
}

function decryptHref(sHref, sText) {
    if (oHref = document.getElementById(sHref)) {
        sResult = '';
        for (c = 0; c < sText.length; c += 2) {
            sResult += String.fromCharCode(parseInt(sText.substr(c, 2), 16) ^ 0xAA);
        }
        oHref.href = 'mailto:' + sResult;
        oHref.innerHTML = sResult;
    }
}

function Extraproduct2Basket(obj) {
    obj.action = '/basket.htm';
    obj.ep_PID.name = 'form_PID';
    obj.ep_ext.name = 'x';
    obj.ep_amount.name = 'form_Amount';
    obj.ep_MID.name = 'form_MID';
    SeoId = obj.ep_seo_root.value;
    if (confirm(messages.BASKET_ADD_ITEM.replace(/__ITEM_NAME__/, obj.ep_name.value))) {
        $("#" + obj.id).ajaxSubmit(function () {
            reloadHeaderBasket();
        });
    }
    obj.ep_MID.selectedIndex = 0;
}

function showExtraproductInfo(id) {
    $("#" + id).show(200);
}

function hideExtraproductInfo(id) {
    $("#" + id).hide(200);
}

function refreshBasket(sForm, sType, sKey) {
	var overlay = new Overlay('#box_basket');
    $('#box_basket').load('/basket.htm', {
        x: sType + 'Ajax',
        form_Key: sKey,
        form_Amount: $('#' + sForm + '_form_Amount').val()
    }, function () {
    	overlay.hide();
        reloadHeaderBasket();
        if ($('#box_payment_method').length) refreshPaymentMethod();
        
    });
}

function reloadHeaderBasket() {
    $('#header_basket').load('/ajax.htm', {
        x: 'header_basket'
    }, function() {
    	if (!initBasketDetails()) return;
    	$('#basket-details').slideDown('fast', function() {
    		setTimeout(function() {
    			$('#basket-details').slideUp();
    		}, 1000);
    	});
    });
}

function reloadBasket() {
	var overlay = new Overlay('#box_basket');
    $('#box_basket').load('/basket.htm', {
        x: 'reload'
    }, function () {
    	overlay.hide();
        reloadHeaderBasket();
    });
}

function submitVoucher(sForm, sField) {
    var voucherNr = $('#VoucherNr').val();
    if (!voucherNr) {
        alert(messages.VOUCHER_CODE_EMPTY);
        return;
    }
	var overlay = new Overlay('#box_basket');
    $('#box_basket').load('/basket.htm', {
        x: 'voucherAjax',
        form_VoucherNr: voucherNr
    }, function () {
    	overlay.hide();
        refreshPaymentMethod();
    });
}

function refreshPaymentMethod(callback) {
	var overlay = new Overlay('#box_payment_method');
    $('#box_payment_method').load('/basket.htm', {
        x: 'refreshPaymentMethod'
    }, function() {
    	overlay.hide();
    	
    	/**
    	 * callback is only used in the final
    	 * submit process of the basket. if
    	 * it's not there assume that the change
    	 * is the result of some other action; in
    	 * which case we need to resubmit the payment method
    	 * for free in order to display the correct values in the
    	 * calculation table.
    	 */
    	if (callback)
    		callback();
    	/*else if ($('#FREE').length)
    		$('#FREE').get(0).onchange();*/
    	
    });
}

function refreshShipmentMethod() {
    $('#box_shipment_method').load('/basket.htm', {
        x: 'refreshShipmentMethod'
    });
}

function submitAccount(sForm) {
    var oForm;
    var oElement;
    if (oForm = document.getElementById(sForm)) {
        oChkNoAccount = oForm.form_NoAccount;
        oAcctFlags = oForm.form_Flags;
        oElement = oForm.x;
        if (oChkNoAccount.checked) {
            oAcctFlags.value = '';
            oElement.value = 'reservation';
            submitNoRegister(sForm);
        } else {
            oAcctFlags.value = 'activ';
            oElement.value = 'create';
            submitRegister(sForm);
        }
    }
}

function togglePasswordEntry(enabled) {
    var oPasswd = document.getElementById('PasswordEntry');
    var oPasswdCheck = document.getElementById('PasswordCheckEntry');
    var oBtnRegister = document.getElementById('btnRegisterText');
    if (oPasswd && oPasswdCheck && oBtnRegister) {
        oPasswd.style.display = enabled ? 'none' : 'block';
        oPasswdCheck.style.display = enabled ? 'none' : 'block';
        oBtnRegister.innerHTML = enabled ? 'Weiter' : 'Registrieren';
    }
}

function submitOrderSpecialButton(oSelf, sElem, sPic, sClass) {
    var oObj;
    if (oObj = document.getElementById(sElem)) {
        OrderedButton = new Image();
        OrderedButton.src = sPic;
        oObj.className = sClass;
    }
    oSelf.onclick = function () {
        return false;
    };
    return true;
}

function submitPayment(sForm) {
    var retval = false;
    var options = $('[name="form_Payment_Name"]:checked');
    if (!options.length) {
        alert(messages.PAYMENT_METHOD_EMPTY);
    } else {
        switch (options[0].id) {
        case 'Creditcard':
            if (!$('#Creditcard_Number').val()) {
                alert(messages.CC_NUMBER_EMPTY);
                break;
            }
            if (!$('#Creditcard_Owner').val()) {
                alert(messages.CC_NAME_EMPTY);
                break;
            }
            if (!$('#Creditcard_Code').val()) {
                alert(messages.CC_CVV_EMPTY);
                break;
            }
        default:
            retval = true;
        }
    }
    if (retval) {
        $('#' + sForm + '_ext').val('setPaymentMethodAjax');
        $('#' + sForm)[0].submit();
        window.errorTimeout = setTimeout(function() {
    		//document.getElementById('payment_error').value = messages.UNKNOWN_ERROR;
    		onTransactionProcessed(document.getElementById('box_payment_method').innerHTML);
        }, 10000);
    }
    return retval;
}

function submitAddress(sForm, showConfirmation, disableRefresh, callback) {
    if ($('#name').length && !checkEmail($('#name').val())) {
        alert(messages.EMAIL_INVALID);
        return false;
    }
    var overlay = null;
    if (!disableRefresh) {
    	overlay = new Overlay('#'+sForm);
    }
    if ($('#Invoice_Firstname').length && !checkAddressInvoice()) return false;
    if (($('#delivery_check').length && $('#delivery_check').attr('checked')) && !checkAddressDelivery()) return false;
    $('#' + sForm).ajaxSubmit({
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        },
        complete: function (jsXHR, status) {
        	if (overlay) {
        		overlay.hide();
        		
        	}
            if (showConfirmation) {
                alert(messages.ADDRESS_CHANGE_SUCCESS);
            }
            if ($('#box_shipment_method').length && !disableRefresh) {
                refreshPaymentMethod(function() {
                    reloadBasket();
                });
            }
            if (callback) {
            	callback();
            }
        }
    });
    return true;
}

function submitPaymentNoCheck(sForm) {
    $('#basketpayment_ext').val('setPaymentMethodNoCheckAjax');
    var overlay = new Overlay('#box_basket');
    $('#' + sForm).ajaxSubmit({
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        },
        complete: function (jsXHR, status) {
        	overlay.hide();
            $('#box_basket').html(jsXHR.responseText);
        }
    });
}

function submitOrder(sForm) {
    var oForm;
    var oObj;
    if (oForm = document.getElementById(sForm)) {
        if (oObj = document.getElementById('agb')) {
            if (oObj.checked == false) {
                alert(messages.AGB_NOT_CHECKED);
                return false;
            }
        }
        oForm.submit();
        return true;
    }
    return false;
}

function onTransactionProcessed(result) {
	clearTimeout(window.errorTimeout);
    document.getElementById('box_payment_method').innerHTML = result;
    if (!(oErrElement = document.getElementById('basket_error')) && !(oErrElement = document.getElementById('payment_error'))) {
        document.location.pathname = '/basket.submit.htm';
    } else {
        window.orderSubmitted = false;
        OrderOverlay.hide();
        refreshPaymentMethod();
        alert(oErrElement.value);
    }
}

function submitAllAjax() {
	var retval = true;	
    if (typeof window.orderSubmitted == 'undefined' || !window.orderSubmitted) {
        var oAgb = null;
        if ((oAgb = document.getElementById('agb')) != null && !oAgb.checked) {
            alert(messages.AGB_NOT_CHECKED);
            retval = false;
        }
        if (!retval) return retval;
        window.orderSubmitted = true;
        OrderOverlay.show();
        var addressForm = document.forms['address'];
        var paymentMethodForm = document.forms['payment'];
        var oErrElement = null;
        if (addressForm && paymentMethodForm) {
        	var onSubmitAddressComplete = function() {
                if (!submitPayment(paymentMethodForm.id)) {
                    window.orderSubmitted = false;
                    OrderOverlay.hide();
                    retval = false;
                }
        	};
            if (!submitAddress(addressForm.id, false, true, onSubmitAddressComplete)) {
                window.orderSubmitted = false;
                OrderOverlay.hide();
                retval = false;
            }
            retval = true;
        }
        retval = false;
    } else {
        alert(messages.PROCESSING_ORDER);
        retval = false;
    }
    return retval;
}

function _3DAlphabet_Recalc(default_price) {
    // Daten holen
    var ProductPrice = document.getElementById("ProductPrice");
    var in_word = document.getElementById("3DAlphabet");
    var word = in_word.value;
    var price = ProductPrice.firstChild.nodeValue;
    // Wenn es ein Modell gibt muss der default_price angepasst werden
    var model = $('#MID option:selected');
    if(model!=null && (model.val()!=null)) default_price=model.attr('title');

    // Grundsätzlich alle Buchstaben groß schreiben.
    // Grund: Kunden sollen nicht verwirrt werden! :-)
    in_word.value = in_word.value.toUpperCase();

    // Trifft RegEx nicht zu wird die letzte Eingabe gelöscht.
    var re = /[^A-Z0-9\&\ ]/i;
    var isValid = !re.test(word);
    if (!isValid) {
        // Hinweis ausgeben.
        alert(messages.LETTER_INVALID.replace(/__LETTER__/, word[word.length - 1]));

        // Fehleingabe korrigieren
        in_word.value = word.substr(0, word.length - 1);
    }

    // Grundsätzlich Leerzeichen entfernen damit diese den Preis nicht hoch treiben.
    word = word.replace(/ /g, "");
    // Preis immer zurücksetzen falls die Eingabe leer ist.
    if (word.length < 1) ProductPrice.firstChild.nodeValue = "0,00";

    // nur behandeln wenn der RegExp stimmt
    if (isValid) {
        // neuen Preis bestimmen und runden
        default_price = parseFloat(default_price.replace(",", "."));
        price = default_price * word.length;
        price = Math.round(price * 100) / 100;

        // Preis sauber formatieren und ggf. mit Nullen auffüllen
        price = price.toString();
        var parts = price.split(".", 2);

        if (parts.length == 2) {
            if (parts[1].length < 2) parts[1] += "0";
            price = parts[0] + "," + parts[1];
        } else price = price + ",00";

        // neuen Preis für den Benutzer anzeigen
        ProductPrice.firstChild.nodeValue = price;
    }
}

// Dialog + Rendering für die Vorschau
function _3DAlphabet_Preview(size) {
    // Daten holen
    var word = document.getElementById("3DAlphabet");
    // IDs überprüfen
    var font = null;
    var felt = false;
    if($('#TypeFace').length!=0) font = $("#TypeFace");
    else if($('#TypeFaceFelt').length!=0) { font = $("#TypeFaceFelt"); felt=true; }
    font = font.val();
    // Daten anpassen + Übertragungsfehler vorbeugen
    word = encodeURIComponent(word.value);
    // TODO: Temporärer Hack
    switch (font) {
    case '1':
    	// Courier New Bold
        if(!felt) font = 'courbd';
	else font = 'avgardd';
        break;
    case '2':
    	// Swiss 721
        if(!felt) font = 'tt0102m';
	else font = 'avgardd';
        break;
    default:
        if(!felt) font = 'courbd';
	else font = 'avgardd';
        break;
    }
    // Wenn Eingabe leer dann soll "MUSTER" erscheinen
    if (word.length < 1) word = "MUSTER";
    // Fancybox anzeigen
    $.fancybox({
        'padding': 20,
        'type': 'image',
        'href': '/ttfgen.php?text=' + word + '&font=' + font + '&fsize=' + size + '&trans=1&margin=0,35,0,35&type=png&ext=.png',
        'title': 'Vorschau',
        'transitionIn': 'elastic',
        'transitionOut': 'elastic'
    });
}

function initDropdownMenus() {
	$('nav ul li').each(function (index, element) {
		if (!element.id) return;
		var menu = $('#'+element.id+'Menu');
		menu.css('left', $(element).position().left - 1);
		$(element).hover(function() {
			menu.get(0).timeout = setTimeout(function() {
				menu.slideDown(300);
			}, 500);
		}, function() {
			menu.get(0).close = true;
			setTimeout(function() {
				if (!menu.get(0).close) return;
				clearTimeout(menu.get(0).timeout);
				menu.slideUp(300);
			}, 250);
		});
	});
	
    $('.DropMenu').each(function (index, element) {
    	$(element).hover(function() {
    		element.close = false;
    	}, function() {
    		$(element).slideUp();
    	});
    });
}

function initBasketDetails() {
	if (document.location.pathname.match(/basket/) || typeof ielt8 != 'undefined') return false;
	var floater = $('#basket-details');
	var origHeight = floater.height();
	var keepOpen = false;
	
	floater.hover(
		function() {
			keepOpen = true;
		},
		function() {
			keepOpen = false;
			floater.slideUp();
		}
	);
	
	$('div.bagbox').hover(
		function (evt) {
			floater.css({height: '0px', paddingBottom: '10px'})
				   .show()
				   .animate({height: '8px'})
				   .delay(100)
				   .animate({height: origHeight});
		},
		function (evt) {
			setTimeout(
				function() {
					if (!keepOpen)
						floater.clearQueue().slideUp();
				}, 250
			);
		}
	);
	return true;
}

$(document).ready(function(){
	$(document).append('<script type="text/javascript" src="/js/shop.messages.de.js" charset="utf-8"></script>');
	initBasketDetails();
	initDropdownMenus();
	/** 
	 * Before an ajax request is sent make sure all data
	 * is converted from UTF-8 to ISO-8859-1
	 */

	$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
		// only makes sense if there is data to convert
		if (options.data) {
			// break query string into it's key value pairs
			// and iterate over them
			options.data = options.data.split('&');
			for (i in options.data) {
				// break the key value pairs into their components
				options.data[i] = options.data[i].split('=');
				// reencode the value part
				options.data[i][1] = escape(decodeURIComponent(options.data[i][1]));
				// rebuild the pair
				options.data[i] = options.data[i].join('=');
			}
			// rebuild the query string to be sent
			options.data = options.data.join('&');
		}
	});
});

function Overlay(target) {
	this.target = target;
	this.overlay = null;
	this.show();
}

Overlay.prototype = {
		show: function() {
			this.overlay = $('<div />').css({ 
				position: 'absolute', 
				top: $(this.target).position().top + 'px', 
				left: $(this.target).position().left + 'px', 
				width: $(this.target).outerWidth() + 'px', 
				height: $(this.target).outerHeight() + 'px',
			   	backgroundColor: '#000',
				zIndex: 20,
				opacity: 0.75
		   	}).appendTo(document.body);
			
			$(this.overlay.get(0)).spin({
				lines: 12, // The number of lines to draw
				length: 7, // The length of each line
				width: 5, // The line thickness
				radius: 10, // The radius of the inner circle
				color: '#fff', // #rbg or #rrggbb
				speed: 1, // Rounds per second
				trail: 100, // Afterglow percentage
				shadow: true // Whether to render a shadow
			});
		},
		hide: function() {
			this.overlay.remove();
		}
};

function OrderOverlay() {
	if (OrderOverlay.instance) throw new Error('Singleton');
	Overlay.call(this, $(".claerfix.basket_wrapper").get(0));
}
OrderOverlay.prototype = Overlay.prototype;
OrderOverlay.prototype.constructor = OrderOverlay;
OrderOverlay.show = function() {
	if (!OrderOverlay.instance) {
		OrderOverlay.instance = new OrderOverlay();
	} else {
		OrderOverlay.instance.show();
	}
};

OrderOverlay.hide = function() {
	if (OrderOverlay.instance) {
		OrderOverlay.instance.hide();
	}
};

function ProductSearch(width) {
        var holder = document.createElement('div');
        var element = document.createElement('ul');
        var selectedElement = null;
        var openLock = false;
        var onChangeHandler = null;

        $(holder).hover(function() {
                openLock = true;
        }, function() {
                openLock = false;
        });

        document.getElementById('header').appendChild(holder);
        holder.appendChild(element);
        holder.id = 'ajax-search';

        function processResults(data, textStatus, jqXHR) {
                data = $.parseJSON(data);
                for (i in data) {
                        var li = document.createElement('li');
                        var link = document.createElement('a');

                        link.setAttribute('href', data[i].url);
                        link.setAttribute('name', data[i].name);
                        link.innerHTML = data[i].title;
                        li.style.overflow = 'hidden';
                        li.appendChild(link);
                        element.appendChild(li);

                        $(link).hover(function(evt){
                                selectedElement = this.parentElement;
                                updateSelection();
                        });
                }
        }

        function getSelectedTerm() {
                if (selectedElement)
                        return selectedElement.firstChild.getAttribute('name');
                else
                        return '';
        }

        function updateSelection() {
                var el = element.firstChild;
                while (el) {
                        el.setAttribute('class', el == selectedElement ? 'ajax-search-hover' : 'ajax-search-normal');
                        el = el.nextSibling;
                }
                if (onChangeHandler) {
                        onChangeHandler(getSelectedTerm());
                }
        }

        this.setOnChangeHandler = function(callback) {
                if (callback && callback instanceof Function) onChangeHandler = callback;
        };

	this.selectNext = function() {
                if (!selectedElement)
                        selectedElement = element.firstChild;
                else if (selectedElement.nextSibling)
                        selectedElement = selectedElement.nextSibling;
                updateSelection();
        };

        this.selectPrev = function() {
                if (!selectedElement)
                        selectedElement = element.lastChild;
                else if (selectedElement.previousSibling)
                        selectedElement = selectedElement.previousSibling;
                updateSelection();
        };

        this.show = function() {
                holder.style.display = 'block';
        };

        this.hide = function() {
                if (openLock) return;
                holder.style.display = 'none';
        };

        this.getSelectedTerm = function() {
                return getSelectedTerm();
        };

        this.doSearch = function (query) {
                selectedElement = null;
                element.innerHTML = '';
                if (!query.length) return;
                $.ajax({
                        url: '/redirect/',
                        success: processResults,
                        data: {
                                t: 'search',
                                form_query: escape(query)
                        }
                });
        };
}


$(document).ready(function() {
	//return; // disabled until db is updated
        var el = $(document.search.s);
        var productSearch = new ProductSearch;
        var timeout = null;

        productSearch.setOnChangeHandler(function(newValue) {
                el.val(newValue);
        });

        el.focusin(productSearch.show);
        el.focusout(productSearch.hide);
        el.keyup(function (evt) {
                if (evt.keyCode >= 37 && evt.keyCode <= 40) {
                        switch(evt.keyCode) {
                        case 37: // left
                        case 38: // up
                                productSearch.selectPrev();
                                break;
                        case 39: // right
                        case 40: // down
                                productSearch.selectNext();
                                break;
                        }
                        el.val(productSearch.getSelectedTerm());
                } else if (evt.keyCode == 8 || evt.keyCode >= 65 && evt.keyCode <= 90) {
                        if (timeout) {
                                clearTimeout(timeout);
                        }
                        timeout = setTimeout(function() {
                                        productSearch.doSearch(el.val());
                        }, 250);
                }
        });
});


