/**
 * jQuery Plugin Stepper.
 * @author NOSE
 *
 * @requires jquery.js 
 * @version 1.0.0	initial version			
 * @version 1.0.1	bugfixes... (cedric@wyona)
 * @version 1.1.0   update cart (cedric@wyona)
 * @version 1.1.1   bugfixes... (cedric@wyona)
 */
jQuery.fn.cartStepper = function(op) {	
	// defaults
	var defaults =  {
			selectorStepUp: ".cartStepperUp",
			selectorStepDown: ".cartStepperDown",
			selectorInput: ".cartStepperInput"
	};
	jQuery.extend(defaults, op);
	
	// references
	var elStepper = jQuery(this);
	var elStepUp = jQuery(defaults.selectorStepUp, elStepper);
	var elStepDown = jQuery(defaults.selectorStepDown, elStepper);
	var elInput = jQuery(defaults.selectorInput, elStepper);
	
	// events
	jQuery(elStepUp).bind("click",function(){
		stepIt(1);
		return false;
	});
	jQuery(elStepDown).bind("click",function(){
		stepIt(-1);
		return false;
	});
	jQuery(elInput).bind("blur",function(){
		stepIt(0);
		return false;
	});

	/**
  	 * Step it.
	 */
	function stepIt(diff) {
		var v = parseInt(jQuery(elInput).val());

		if (v == null || isNaN(v) || v < 1) {
			v = 1;
		}

		if(diff != null && !isNaN(diff)) {
			v = v + diff;

			if(v > 0) {
				jQuery(elInput).val(v);
				insertSpinner();
				name = jQuery(elInput).attr("name");
				$.get("", {"stepper" : name, "value" : v, "yanel.resource.viewid" : "xml", "handle_params" : "true"}, updateCart);
			}
		}
	}

	/**
	 * Insert spinner while loading.
	 */
	function insertSpinner() {
		ajaxLoader = "<img src=\"../../app/img/ajax_loader.gif\" alt=\"recalculating price\"/>";

        document.getElementById("total-price-header").innerHTML = ajaxLoader;
		document.getElementById("price-" + jQuery(elInput).attr("name").substring(7)).innerHTML = ajaxLoader;
		document.getElementById("total-price-ex-tax").innerHTML = ajaxLoader;
        try {  
		    document.getElementById("shipping-custom1").innerHTML = ajaxLoader;
        } catch(err) { }
        try {  
		    document.getElementById("shipping-custom2").innerHTML = ajaxLoader;
        } catch(err) { }
        try {  
		    document.getElementById("shipping-custom3").innerHTML = ajaxLoader;
        } catch(err) { }
		document.getElementById("total-shipping-price-ex-tax").innerHTML = ajaxLoader;
	}

	/**
	 * Update the shopping cart to new values.
	 */
	function updateCart(data, textStatus, request) {
		// Set new per-item prices
		items = data.getElementsByTagName("item");

		for(i = 0; i < items.length; i++) {
			num = items[i].getAttribute("number");
			newPrice = items[i].getElementsByTagName("price-ex-tax-all")[0].childNodes[0].nodeValue;

			document.getElementById("price-" + num).innerHTML = newPrice;
		}

		// Set new total price
		newTotalPrice = data.getElementsByTagName("total-price-ex-tax")[0].childNodes[0].nodeValue;
        try {  
            newShippingPrice1 = data.getElementsByTagName("shipping-custom1")[0].childNodes[0].nodeValue;
        } catch(err) { }
        try {  
            newShippingPrice2 = data.getElementsByTagName("shipping-custom2")[0].childNodes[0].nodeValue;
        } catch(err) { }
        try {  
            newShippingPrice3 = data.getElementsByTagName("shipping-custom3")[0].childNodes[0].nodeValue;
        } catch(err) { }
        newTotalShippingPrice = data.getElementsByTagName("total-shipping-price-inc-rebate")[0].childNodes[0].nodeValue;
		document.getElementById("total-price-ex-tax").innerHTML = newTotalPrice;
        try {  
		    document.getElementById("shipping-custom1").innerHTML = newShippingPrice1;
        } catch(err) { }
        try {  
		    document.getElementById("shipping-custom2").innerHTML = newShippingPrice2;
        } catch(err) { }
        try {  
		    document.getElementById("shipping-custom3").innerHTML = newShippingPrice3;
        } catch(err) { }
		document.getElementById("total-shipping-price-ex-tax").innerHTML = newTotalShippingPrice;
        document.getElementById("total-price-header").innerHTML = newTotalPrice;

	}
  
	// return
	return this;
};

