/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magentocommerce.com for more information.
 *
 * @copyright  Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
 * @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */

var Mzcheckout =  Class.create();
Mzcheckout.prototype = {
    initialize: function(){
        this.loadAddressForm = '/mzcheckout/standard/loadAddressForm';
        this.removeShippingAddressFormRegisterUrl = '/mzcheckout/standard/removeRegisterShippingAddressRegister';
        this.removeShippingAddressFormGuestUrl = '/mzcheckout/standard/removeGuestShippingAddressGuest';

        this.loadShippingAddressFormLoggedinUrl = '/mzcheckout/standard/loadRegisterShippingAddressLoggedin';
        this.removeShippingAddressFormLoggedinUrl = '/mzcheckout/standard/removeRegisterShippingAddressLoggedin';

        this.loadShippingAddressFormLoggedinUrlNew = '/mzcheckout/standard/loadLoggedinBillingAddressLoggedinNew';
        this.removeShippingAddressFormLoggedinUrlNew = '/mzcheckout/standard/removeLoggedinShippingAddressLoggedinNew';
        this.removeBillingAddressFormLoggedinUrlNew = '/mzcheckout/standard/removeLoggedinBillingAddressNew';

        this.reloadShippingmethodByExistingAddressUrl = '/mzcheckout/standard/reloadShippingmethodByExistingAddress';
        this.reloadShippingmethodByCountryIdUrl = '/mzcheckout/standard/reloadShippingmethodByCountryId';
        this.reloadShippingMethodUrl = '/mzcheckout/standard/reloadShippingmethod';

        this.setBillingIsShippingUrl = '/mzcheckout/standard/setBillingIsShippingAddress';

        this.loadingHtml = '<div class="loading"><span>Wird geladen, bitte warten...</span></div>';
    },

    addAddressForm: function(elementid,addblock,newshipping){
        $(elementid).innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.loadAddressForm,
            {
                method:'post',
                parameters: 'block='+addblock+'&newshipping='+newshipping,
                onSuccess: function(e) {                    
                    $(elementid).innerHTML = e.responseText;                    
                },
                onFailure: function(e) {}
            }
         );
    },

    removeShippingAddressFormRegister: function(elementid){
        $(elementid).innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.removeShippingAddressFormRegisterUrl,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $(elementid).innerHTML = e.responseText;                   
                },
                onFailure: function(e) {}
            }
         );
    },

    removeShippingAddressFormGuest: function(elementid){
        $(elementid).innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.removeShippingAddressFormGuestUrl,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $(elementid).innerHTML = e.responseText;
                    mzcheckout.reloadShippingmethod();
                },
                onFailure: function(e) {}
            }
         );
    },

    removeShippingAddressFormLoggedin: function(){
        $('shipping-address').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.removeShippingAddressFormLoggedinUrl,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $('shipping-address').innerHTML = e.responseText;
                    mzcheckout.reloadShippingmethod();
                },
                onFailure: function(e) {}
            }
         );
    },

    setBillingIsShipping: function(addblock){
        $('shipping-address').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.setBillingIsShippingUrl,
            {
                method:'post',
                parameters: 'block='+addblock,
                onSuccess: function(e) {
                    $('shipping-address').innerHTML = e.responseText;
                    mzcheckout.reloadShippingmethod();
                },
                onFailure: function(e) {}
            }
         );

        
    },

    removeBillingAddressFormLoggedinNew: function(){
        $('billing-address').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.removeBillingAddressFormLoggedinUrlNew,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $('billing-address').innerHTML = e.responseText;
                    mzcheckout.reloadShippingmethod();
                },
                onFailure: function(e) {}
            }
         );
    },

    removeShippingAddressFormLoggedinNew: function(){
        $('shipping-address').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.removeShippingAddressFormLoggedinUrlNew,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $('shipping-address').innerHTML = e.responseText;
                    mzcheckout.reloadShippingmethod();
                },
                onFailure: function(e) {}
            }
         );
    },

    reloadShippingmethod: function(){
        $('shipping-method-load').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.reloadShippingMethodUrl,
            {
                method:'post',
                parameters: null,
                onSuccess: function(e) {
                    $('shipping-method-load').innerHTML = e.responseText;
                },
                onFailure: function(e) {}
            }
         );
    },

    reloadShippingmethodByExistingAddress: function(addressId,type){
        $('shipping-method-load').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.reloadShippingmethodByExistingAddressUrl,
            {
                method:'post',
                parameters: 'address='+addressId+'&type='+type,
                onSuccess: function(e) {
                    $('shipping-method-load').innerHTML = e.responseText;                   
                },
                onFailure: function(e) {}
            }
         );
    },

    reloadShippingmethodByCountryId: function(countryId,type){
        $('shipping-method-load').innerHTML = this.loadingHtml;

        var request = new Ajax.Request(
            this.reloadShippingmethodByCountryIdUrl,
            {
                method:'post',
                parameters: 'country='+countryId.value+'&type='+type,
                onSuccess: function(e) {
                    $('shipping-method-load').innerHTML = e.responseText;                   
                },
                onFailure: function(e) {}
            }
         );
    }
}

var Payment = Class.create();
Payment.prototype = {
    initialize: function(form){
        this.form = form;
    },

    init : function () {
        var elements = Form.getElements(this.form);
        var method = null;
        for (var i=0; i<elements.length; i++) {
            if (elements[i].name=='payment[method]') {
                if (elements[i].checked) {
                    method = elements[i].value;
                }
            } else {
                elements[i].disabled = true;
            }
        }        
        if (method) this.switchMethod(method);
    },

    submitForm: function(){
        $(this.form).submit();
    },

    switchMethod: function(method){        
        
        $('p_method_info_'+method).removeClassName('active');
        if (this.currentMethod)
            $('p_method_info_'+this.currentMethod).removeClassName('active');

        if (this.currentMethod && $('payment_form_'+this.currentMethod)) {
            var form = $('payment_form_'+this.currentMethod);
            form.style.display = 'none';           
            
            var elements = form.select('input', 'select', 'textarea');
            for (var i=0; i<elements.length; i++) elements[i].disabled = true;
            this.currentMethod = method;
        }else{           
            this.currentMethod = method;
        }

        if ($('payment_form_'+method)){
            var form = $('payment_form_'+method);
            form.style.display = '';
            var elements = form.select('input', 'select', 'textarea');
            for (var i=0; i<elements.length; i++) elements[i].disabled = false;      

            this.currentMethod = method;
        }
   
        $('p_method_info_'+method).addClassName('active');
    },

    switchUrl: function(url){
        $(this.form).action = url;
    },

    validate: function() {
        var methods = document.getElementsByName('payment[method]');
        if (methods.length==0) {
            alert(Translator.translate('Your order can not be completed at this time as there is no payment methods available for it.'));
            return false;
        }
        for (var i=0; i<methods.length; i++) {
            if (methods[i].checked) {
                return true;
            }
        }
        alert(Translator.translate('Please specify payment method.'));
        return false;
    },

    save: function(){
        var validator = new Validation(this.form);
        Validation.add('validate-blz', 'Eine Bankleitzahl muss aus 8 Zahlen bestehen', {
            minLength : 8, // value must be at least 6 characters
            maxLength : 8 // value must be no longer than 13 characters
        });

        if (this.validate() && validator.validate()) {
            this.submitForm();
        }
    }
}
