
	/** 
	 * delivery costs
	 */
vpClient.addMethods({
	 	
	 initDelivery : function(){
	 	if (this.deliveryInit) return;
	 	this.resetDeliveryContainer();
	 	this.deliveryInfo = new Hash();
	 	this.deliveryInit = true;
	 	this.initFormEvents();
	 	this.shopObj.getBasket(this.renderBasketOverview, this);
	 	$('footer').hide();
	 },
	 
	 renderBasketOverview : function(req){
	 	var hash = this.shopObj.sortBasket(req);
	 	var total = 0;
	 	hash.each(
			(function(hashElem){
				var obj = hashElem.value;
				var objectID = obj.object_id;
				var priceObjectID = obj.priceObjectID;
				var input = Builder.node('input', {id:objectID + '_amount', value:obj.amount});
				input.objectID = objectID
				input.priceObjectID = priceObjectID;
				input.originalAmount = obj.amount;
				//input.pKey = obj.pKey;
				this.addEvent(input, 'change', this.updateDeliveryView.bind(this));
				
				var span1 = Builder.node('span', {className:'title'}, [obj.objectName]);
				var span2 = Builder.node('span', {className:'amount'}, ['amount', input]);
				var span3 = Builder.node('span', {className:'price'}, [' E  ' + (obj.amount * obj.price)]);
				var li = Builder.node('li', [span1,span2,span3]);
				total+=(obj.amount * obj.price);
				$('cartList').appendChild(li);
	 		}).bind(this)
	 	)
	 	$('orderTotal').update(' E ' + total);
		this.deliveryInit = false;
		this.renderPriceTotal(total);
		this.unWaiter();
	 },
	 

	 updateDeliveryView : function(event){
		var elem = Event.element(event);
		elem.disabled = true;
		var objectID = elem.objectID;
		var priceObjectID = elem.priceObjectID;
		var amount = parseInt(elem.value);
		elem.amount = elem.originalAmount;
		this.shopObj.updateCartLine(objectID, '', priceObjectID, amount, this.initDelivery.bind(this), this);
	 },
	 
	 resetDeliveryContainer : function(){
	 	$('cartList').update('');
	 	$('orderTotal').update('');
	 },
	 
	 renderPriceTotal : function(total){
	 	$('overViewOrderPrice').update("E " + total );
	 	$('overViewDeliveryPrice').update("E " + this.deliveryCosts);
	 	$('overViewGrandTotal').update(" E " + (total + this.deliveryCosts) ) ;
	 },
	 
	 initFormEvents : function(){
	 	var formElems = $('deliveryForm').elements;
	 	$A(formElems).each(
	 		(function(elem){
	 			this.addEvent(elem, 'change', this.validateForm.bind(this));
	 			//this.validateFormElem(elem, true);
	 		}).bind(this)
	 	)
	 	this.validateForm();
	 },
	 
	 validateForm : function(event){
	 	if (event){
	 		var elem = Event.element(event);
	 		this.validateFormElem(elem); // hard check on element that was changed
	 	}
		
		// check other elements
		var ok = true;
	 	var formElems = $('deliveryForm').elements;
	 	$A(formElems).each(
	 		(function(elem){
	 			if (!this.validateFormElem(elem, true)){
	 				ok = false; 
	 			}
	 			
	 		}).bind(this)
	 	)
		if (ok){
			this.navShow('nextButton')
		}else{
			this.navHide('nextButton');
		}
	 	if (!event) return ok;
	 },
	
	 validateFormElem : function(elem, softCheck){
	 	if (!softCheck) softCheck = false;
	 	if (!elem){
	 		var elem = Event.element(event);
	 	}
	 	var ok = true;
	 	switch (elem.id) {
	 		case 'deliveryName':
	 			if (elem.value.strip() == '') {
	 				ok = false;
	 				if (!softCheck) this.setFormError(elem, 'nameError');
	 			}else{
	 				if (!softCheck) this.resetFormError(elem, 'nameError');
	 			}
	 			break;

	 		case 'deliveryAddress':
	 			if (elem.value.strip() == '') {
	 				ok = false;
	 				if (!softCheck) this.setFormError(elem, 'addressError');
	 			}else{
	 				if (!softCheck) this.resetFormError(elem, 'addressError');
	 			}
	 			break;

	 		case 'deliveryZIP' , 'deliveryCity':
	 			if (elem.value.strip() == '') {
	 				ok = false;
	 				if (!softCheck) this.setFormError(elem, 'zipCityError');
	 			}else{
	 				if (!softCheck) this.resetFormError(elem, 'zipCityError');
	 			}
	 			break;

	 		case 'deliveryEmail':
	 			if ( (elem.value.strip() == '') || ( !this.is_email(elem.value.strip())) ) {
	 				ok = false;
	 				if (!softCheck) this.setFormError(elem, 'emailError');
	 			}else{
	 				if (!softCheck) this.resetFormError(elem, 'emailError');
	 			}
	 			break;

	 		case 'deliveryEmailConfirm':
	 			if (elem.value.strip().toLowerCase() != $('deliveryForm').elements['deliveryEmail'].value.strip().toLowerCase()) {
	 				ok = false;
	 				this.setFormError(elem, 'nomatchError');
	 			}else{
	 				this.resetFormError(elem, 'nomatchError');
	 			}
	 			break;
	 			
	 		case 'deliveryCountry':
	 			var value = elem.options[elem.selectedIndex].value;
	 			if (elem == 'Select a country..') {
	 				ok = false;
	 				this.setFormError(elem, 'nomatchError');
	 			}else{
	 				this.resetFormError(elem, 'nomatchError');
	 			}
	 			break;	 			
	 	}

		if (ok){
			this.updateAddressView(elem);
		}
		return ok;
	 },
	 
	 setFormError : function(elem, errContainer){
	 	new Effect.Appear(errContainer);
	 },
	 
	 resetFormError : function(elem, errContainer){
	 	new Effect.Fade(errContainer);
	 },
	 
	 updateAddressView : function(elem){
	 	var id = elem.id;
	 	if (!this.deliveryInfo) this.deliveryInfo = new Hash();
	 	this.deliveryInfo.set(id, elem.value);
	 	id = id.substring(1, id.length);
	 	var recapElem = $('recapD' + id);
	 	if (recapElem){
	 		recapElem.update(elem.value)
	 	}
	 }
	 
});