Lightcheckout = Class.create({
	billing_taxvat_enabled:false,
	billing_taxvat_verified_flag:false,
	url:'',
	initialize:function(data){
		
		if(data && (typeof data.billing_taxvat_enabled != 'undefined')){
			this.billing_taxvat_enabled = data.billing_taxvat_enabled;
		}
		
		(data && data.url) ? this.url = data.url : '';
		
		if(typeof observe_billing_items != 'undefined'){
			$$(observe_billing_items).each(function(e){
				
				if(e.type == 'radio' || e.type == 'checkbox'){
					
					e.observe('click', function(){
						this.submit(this.getFormData(), 'get_methods');
					}.bind(this));
					
				}else{
					
					e.observe('change', function(){
						this.submit(this.getFormData(), 'get_methods');
					}.bind(this));
					
				}
			}.bind(this));
			
		}
		
		if(typeof observe_shipping_items != 'undefined'){
			$$(observe_shipping_items).each(function(e){
				
				if(e.type == 'radio' || e.type == 'checkbox'){
					
					e.observe('click', function(){
						this.submit(this.getFormData(), 'get_shipping_methods');
					}.bind(this));
					
				}else{
					
					e.observe('change', function(){
						this.submit(this.getFormData(), 'get_shipping_methods');
					}.bind(this));
					
				}
				
				
			}.bind(this));
			
		}
		
		if($('billing_use_for_shipping_yes')){
		$('billing_use_for_shipping_yes').observe('click', function(e){
    		this.submit(this.getFormData(), 'get_shipping_methods');
    	}.bind(this));
    	}
    	
    	$('gcheckout-onepage-address').select('select, input, textarea').each(function(e){
    		
    		if(e.hasClassName('required-entry') && !e.hasClassName('validate-taxvat')){
    			e.observe('blur', function(){
    			Validation.validate(this,{useTitle : checkoutForm.validator.options.useTitles, onElementValidate : checkoutForm.validator.options.onElementValidate});
    			});
    		}
    		
    	});
		
		this.observeMethods();
		this.observeAddresses();
	},
	
	
	observeMethods:function(){
		$$('#gcheckout-shipping-method-available input').each(function(e){
			e.observe('click', function(e){
				if(this.elem.checked){
					this.obj.submit(this.obj.getFormData(), 'get_totals');
				}
			}.bind({elem:e,obj:this}));
		}.bind(this));
		$$('#gcheckout-onepage-form input[name=shipping_method]').each(function(e){
			e.addClassName('validate-one-required-by-name');
			throw $break;
		});
		
		
		var payment_elms = $$('#checkout-payment-method-load input[name="payment[method]"]');
		
		payment_elms.each(function(e){
			e.addClassName('validate-one-required-by-name');
			throw $break;
		});
		
		
		payment_elms.each(function(e){
			
			if(e.checked){
				eval(e.getAttribute('onclick'));
				throw $break;
			}
		});
		
		
		if(default_payment_method && (input = $$('#gcheckout-payment-methods input[value="'+default_payment_method+'"]')[0])){
			
			input.checked = true;
			
			eval(input.getAttribute('onclick'));
			
		}
		
		if(toggleToolTip){
		
		if($('payment-tool-tip-close')){
            Event.observe($('payment-tool-tip-close'), 'click', toggleToolTip);
        }
        $$('.cvv-what-is-this').each(function(element){
            Event.observe(element, 'click', toggleToolTip);
        });
        
        }

		
	},
	getFormData:function(){
		
		var elements = $('gcheckout-onepage-form').select('input, select, textarea');
		
		var query = '';
		
		for(var i = 0;i < elements.length;i++){
			if((elements[i].type == 'checkbox' || elements[i].type == 'radio') && !elements[i].checked){
				continue;
			}
			query = query+elements[i].name + '=' + elements[i].value;
			
			if(i+1 < elements.length){
				query = query + '&';
			}
			
		}
		return query;
		
	},
	applyDisocunt:function(flag){
		
		if (flag){
	        $('remove_coupone').value = 1;
			this.submit({coupon_code:$('coupon_code').value,remove:$('remove_coupone').value}, 'discount');
		}else{
	        $('remove_coupone').value = 0;
			this.submit({coupon_code:$('coupon_code').value,remove:$('remove_coupone').value}, 'discount');
		}
		
	},
	submit:function(params, action){
		
		this.showLoadinfo();
		
		if(typeof params != "string"){
			parameters = new Array();
			for(key in params){
				
				parameters.push(key+'='+params[key]);
				
			}
			
			params = parameters.join('&');
			
		}
		
		var request = new Ajax.Request(this.url,
		  {
		    method:'post',
		    parameters:'action='+action+'&'+params,
		    onSuccess: function(transport){
		      
		    eval('var response = '+transport.responseText);
		    
		    
		    
		    if(response.url){
		    	
		    	setLocation(response.url);
		    	
		    }else{
		    
		    if(response.error){
				
				if(response.message){
				alert(response.message)
				}
				
				this.hideLoadinfo();
				
			}else{
				
				
				
				if(response.section == 'methods'){
					
					if(response.rates){
						if(shipping_rates_block = $('gcheckout-shipping-method-available')){
							shipping_rates_block.innerHTML = response.rates;
						}
					}
					if(response.payments){
						$('gcheckout-payment-methods-available').innerHTML = response.payments;
					}
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					decorateTable('checkout-review-table');
					
					this.observeMethods();
					
				}else if(response.section == 'payment_methods'){
					
					if(response.payments){
					$('gcheckout-payment-methods-available').innerHTML = response.payments;
					}
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					decorateTable('checkout-review-table');
					
				}else if(response.section == 'shiping_rates'){
					
					if(response.rates){
						if(shipping_rates_block = $('gcheckout-shipping-method-available')){
						$('gcheckout-shipping-method-available').innerHTML = response.rates;
						}
					}
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					decorateTable('checkout-review-table');
					
					this.observeMethods();
					
				}else if(response.section == 'totals'){
					
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					decorateTable('checkout-review-table');
					
				}else if(response.section == 'varify_taxvat'){
					
					if(response.rates){
						if(shipping_rates_block = $('gcheckout-shipping-method-available')){
						$('gcheckout-shipping-method-available').innerHTML = response.rates;
						}
					}
					if(response.payments){
					$('gcheckout-payment-methods-available').innerHTML = response.payments;
					}
					
					
					
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					decorateTable('checkout-review-table');
					
					if($('billing_taxvat_verified')){
					$('billing_taxvat_verified').remove();
					}
					
					checkout.billing_taxvat_verified_flag = response.verify_result;
					
					if(response.verify_result){
						
						if(label = $('billing_taxvat').parentNode.parentNode.getElementsByTagName('label')[0]){
						
						label.innerHTML += '<strong id="billing_taxvat_verified" style="margin-left:5px;">(<span style="color:green;">Verified</span>)</strong>';
						
						}
						
					}else if($('billing_taxvat') && $('billing_taxvat').value){
						
						if(label = $('billing_taxvat').parentNode.parentNode.getElementsByTagName('label')[0]){
						
						label.innerHTML += '<strong id="billing_taxvat_verified" style="margin-left:5px;">(<span style="color:red;">Not Verified</span>)</strong>';
						
						}
					}
					
					this.observeMethods();
					
				}
				
				this.hideLoadinfo();
				
			}
			
			}
		      
		    }.bind(this),
		    onFailure: function(){
		    	//...
		    }
		  });
	},
	showLoadinfo:function(){
		
		$('submit-btn').disabled = 'disabled';
		$('submit-btn').addClassName('disabled');
		
		$$('.validation-advice').each(function(e){e.remove()});
		
		msgs = $$('ul.messages');
		
		if(msgs.length){
		
			for(i = 0; i < msgs.length;i++){
			
			msgs[i].fade();
			
			}
		
		}
		
		$$('div.gcheckout-onepage-wrap')[0].insert('<div class="loadinfo">'+loadinfo_text+'</div>');
	},
	hideLoadinfo:function(){
		
		var e = $$('div.gcheckout-onepage-wrap .loadinfo')[0];
		
		e.parentNode.removeChild(e);
		
		$('submit-btn').disabled = false;
		$('submit-btn').removeClassName('disabled');
		
	},
	showOverlay:function(){
		var overlay = $('gomage-checkout-main-overlay');
		
		if(overlay){
			
			overlay.show();
			
		}else{
			
			overlay = document.createElement('div');
			overlay.id = 'gomage-checkout-main-overlay';
			overlay.className = 'gomage-checkout-overlay';
			
			document.body.appendChild(overlay);
		}
		return overlay;
	},
	hideOverlay:function(){
		var overlay = $('gomage-checkout-main-overlay');
		
		if(overlay){
			overlay.hide();
		}
	},
	showLoginForm:function(){
		var overlay = this.showOverlay();
		
		overlay.onclick = function(){
			this.hideLoginForm();
		}.bind(this);
		
		
		
		var loginForm = $('login-form');
		
		if(!loginForm){
			
			$$('body')[0].insert(loginFormHtml);
			
			var loginForm = $('login-form');
		}
		
		loginForm.style.position = 'fixed';
		loginForm.style.display = 'block';
		
		
		var left	= loginForm.offsetWidth/2;
		
		var contentHeight = document.documentElement ? document.documentElement.clientHeight : document.body.clientHeigh;
		
		var top		= contentHeight/2.4 - loginForm.offsetHeight/2;
		
		loginForm.style.left = '50%';
		loginForm.style.marginLeft = '-'+left+'px';
		loginForm.style.top	= top	+'px';
	},
	hideLoginForm:function(){
		this.hideOverlay();
		
		var loginForm = $('login-form');
		
		if(loginForm){
			
			loginForm.hide();
		}
		
	},
	showTerms:function(){
		var overlay = this.showOverlay();
		
		overlay.onclick = function(){
			this.hideTerms();
		}.bind(this);
		
		
		var termsBlock = $('terms-block');
		
		
		if(!termsBlock){
			
			$$('body')[0].insert(termsHtml);
			
			var termsBlock = $('terms-block');
		}
		
		termsBlock.style.position = 'fixed';
		termsBlock.style.display = 'block';
		
		//var scrolloffset = document.body.cumulativeScrollOffset();
		
		var left	= termsBlock.offsetWidth/2;
		
		var contentHeight = document.documentElement ? document.documentElement.clientHeight : document.body.clientHeigh;
		
		var top		= contentHeight/2 - termsBlock.offsetHeight/2;
		
		
		termsBlock.style.left = '50%';
		termsBlock.style.marginLeft = '-'+left+'px';
		termsBlock.style.top	= top	+'px';
	},
	hideTerms:function(){
		this.hideOverlay();
		
		var loginForm = $('terms-block');
		
		if(loginForm){
			
			loginForm.hide();
		}
		
	},
    loadAddress:function(type, id, url){
    	
    	if(id){
    		
    		this.showLoadinfo();
    		
    		var request = new Ajax.Request(url,
			  {
			    method:'post',
			    parameters:{'id':id, 'type':type},
			    onSuccess: function(transport){
			      
			    eval('var response = '+transport.responseText);
			      
			    if(response.error){
					
					
					
				}else{
					
					var div = document.createElement('div');
					
					div.innerHTML = response.content;
					
					
					if(response.rates){
						$('gcheckout-shipping-method-available').innerHTML = response.rates;
					}
					if(response.payments){
					$('gcheckout-payment-methods-available').innerHTML = response.payments;
					}
					
					$('gcheckout-onepage-address').replaceChild(div.firstChild, $('gcheckout-'+type+'-address'));
					$$('#gcheckout-onepage-review div.totals')[0].innerHTML = response.totals;
					
					initAddresses();
					
					checkout.initialize();
				}
				this.hideLoadinfo();
			      
			    }.bind(this),
			    onFailure: function(){
			    	//...
			    }
			  });
    		
    	}else{
	    	
	    	$(type+'-new-address-form').select('input[type=text], select, textarea').each(function(e){
	    		
	    		e.value = '';
	    		
	    	});
    	
    	}
    	
    },
    observeAddresses:function(){
    	
    	if(this.billing_taxvat_enabled){
    	
	    	if($('billing_taxvat')){
	    	
	    	$('billing_taxvat').observe('change', function(){
	    		if(vat_required_countries.indexOf($('billing_country_id').value) !== -1){
	    		checkout.submit(checkout.getFormData(), 'varify_taxvat')
	    		}
	    	});
	    	
	    	}
    	
    	}
    	
	    if(checkoutloginform.customerIsCustomerLoggedIn){
	    $('gcheckout-billing-address').select('select, input').each(function(element){
	    	
	    	if(element.name == 'billing_address_id'){
	    		
	    		element.observe('change', function(e){
	    			if(!this.value){
		    		$('billing_address_book').show();
		    		}
		    	});
	    		
	    	}else if(element.id != 'billing_use_for_shipping_yes' && element.id != 'billing_taxvat' && element.id != 'buy_without_vat'){
	    	
		    	element.observe('change', function(e){
		    		$('billing_address_book').show();
		    	});
	    	
	    	}
	    	
	    });
	    
	    if(shipping_address_block = $('gcheckout-shipping-address')){
		    shipping_address_block.select('select, input').each(function(element){
		    	
		    	if(element.name == 'shipping_address_id'){
		    		
		    		element.observe('change', function(e){
		    			if(!this.value){
			    		$('shipping_address_book').show();
			    		}
			    	});
		    		
		    	}else{
		    	
			    	element.observe('change', function(e){
			    		$('shipping_address_book').show();
			    	});
		    	
		    	}
		    	
		    });
	    }
	    
	    }
    }
	
});
LightcheckoutLogin = Class.create({
	
	url:'',
	initialize:function(data){
		this.url = (data && data.url) ? data.url : '';
	},
	submit:function(params){
		
		$$('#gcheckout-login-form .actions button')[0].style.display = 'none';
		$$('#gcheckout-login-form .actions .loadinfo')[0].style.display = 'block';
		
		var request = new Ajax.Request(this.url,
		  {
		    method:'post',
		    parameters:{'login[username]':$$('#gcheckout-login-form #email')[0].value,'login[password]':$$('#gcheckout-login-form #pass')[0].value},
		    onSuccess: function(transport){
		    	
		    	
		    	
		    	try{
				eval('var response = '+transport.responseText);
				}catch(e){
					var response = new Object();
					response.error = true;
					response.message = 'Unknow error.';
				}
				if(!response.error){
					
					
					
					$$('.validation-advice').each(function(e){e.remove()});
					
					
					
					var form = $('gcheckout-onepage-form');
					
					form.innerHTML = response.content;
					
					
					
					if($$('.header .links').length && response.links){
					
					var tempelement = document.createElement('div');
					
					tempelement.innerHTML = response.links;
					
					var links = $$('.header .links')[0];
					
					links.parentNode.replaceChild(tempelement.firstChild, links);
					
					}
			    	$('gcheckout-login-link').hide();
			    	
			    	if(typeof initDeliveryDateCallendar != 'undefined'){
			    		initDeliveryDateCallendar();
			    	}
			    	
			    	
			    	checkout.billing_taxvat_verified_flag = response.vatstatus;
			    	checkout.hideLoginForm();
			    	this.customerIsCustomerLoggedIn = true;
			    	
			    	
			    	
			    	initAddresses();
			    	
			    	checkout.initialize();
					
				}else{
					
					if($$('#gcheckout-login-form div.error').length == 0){
						$('gcheckout-login-form').insert({'top':'<div class="error"></div>'}	);
					}
					$$('#gcheckout-login-form div.error')[0].innerHTML = '';
					$$('#gcheckout-login-form div.error')[0].insert(response.message);
				}
				
				$$('#gcheckout-login-form .actions button')[0].style.display = 'block';
				$$('#gcheckout-login-form .actions .loadinfo')[0].style.display = 'none';
		    	
		    }.bind(this),
		    onFailure: function(){
		    	//...
		    }
		  });
	}
});

var paymentForm = Class.create();
paymentForm.prototype = {
	beforeInitFunc:$H({}),
    afterInitFunc:$H({}),
    beforeValidateFunc:$H({}),
    afterValidateFunc:$H({}),
    initialize: function(formId){
        this.form = $(this.formId = formId);
    },
    init : function () {
        var elements = Form.getElements(this.form);
        /*if ($(this.form)) {
            $(this.form).observe('submit', function(event){this.save();Event.stop(event);}.bind(this));
        }*/
        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;
                }
            }
            elements[i].setAttribute('autocomplete','off');
        }
        
        $$('#checkout-payment-method-load dd input, #checkout-payment-method-load dd select, #checkout-payment-method-load dd textarea').each(function(e){
    		
    		e.disabled = true;
    		
    	});
        
        if (method) this.switchMethod(method);
    },
    
    switchMethod: function(method){
        if (this.currentMethod && $('payment_form_'+this.currentMethod)) {
        	
        	$$('.validation-advice').each(function(e){
        		
        		e.hide();
        		
        	});
        	
        	$$('input.validation-failed, select.validation-failed, textarea.validation-failed').each(function(e){
        		
        		e.removeClassName('validation-failed');
        		
        	});
        	
        	
        	
            var form = $('payment_form_'+this.currentMethod);
            form.style.display = 'none';
            var elements = form.getElementsByTagName('input');
            for (var i=0; i<elements.length; i++) elements[i].disabled = true;
            var elements = form.getElementsByTagName('select');
            for (var i=0; i<elements.length; i++) elements[i].disabled = true;
            

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


Object.extend(RegionUpdater.prototype, {
 
    setMarkDisplay: function(elem, display){
        
    }
    
});

