/* SHOPPING BASKET FUNCTIONS */

var warning_text = ' ';
var specialPricesLoaded = false;

function removeItem(ID) {
	f = g('basket_form');
	f.object.value = ID;
	f.action.value = 'delete';
	f.submit();
}

function editItem(ID) {
	f = g('basket_form');
	f.object.value = ID;
	f.action.value = 'edit';
	// alert(warning_text);
	f.submit();
}

function requestSpecialPrice() {

	if (specialPricesLoaded)
		return;

	var user = prompt(username_prompt);
	if (user != '' && user != null) {
		var pass = prompt(password_prompt);
		if (pass != '' && pass != null) {
			itemStr = '';
			for ( var i = 0; i < items.length; i++) {
				itemStr += (itemStr == '' ? '' : '&') + 'items[]=' + items[i];
			}
			var req = new AjaxRequest('typo3conf/ext/iwshop/extra/AJAX.php?getSpecialPrices:' + user + ':' + MD5(salt + MD5(pass) + salt) + ':' + salt,
					'POST', itemStr, loadSpecialPrices);
			req.send();
		}
	}
}

function loadSpecialPrices(XML) {

	if (getXMLvalue(XML, 'status') != 'OK') {
		alert('Error: ' + getXMLvalue(XML, 'msg'));
		return;
	}

	var deals = XML.getElementsByTagName('numeric');
	for ( var i = 0; i < deals.length; i++) {
		var deal = deals[i];

		var id = getXMLvalue(deal, 'itemID');
		var oldPrice = getXMLvalue(deal, 'oldPrice');
		var newPrice = getXMLvalue(deal, 'newPrice');
		if (newPrice != oldPrice) {
			g('price-span-discounted-' + id).innerHTML = newPrice + ' DKK';
		} else {
			g('price-span-discounted-' + id).innerHTML = '';
		}

	}

	g('total-discount-price').innerHTML = getXMLvalue(XML, 'total') + ' DKK';
	// specialPricesLoaded = true;
}

function PriceTag(elem) {
	var el = elem;

	this.price = function(val) {
		if (typeof val == "undefined") {
			return this.getPrice();
		} else {
			this.setPrice(val);
		}
	}

	var hasValue = function() {
		return el[0].nodeName.match(/input|select|textarea/i);
	};

	this.getPrice = function() {
		return parseInt(hasValue() ? el.val() : el.text());
	}

	this.setPrice = function(value) {
		return hasValue() ? el.val(value) : el.text(value);
	}

	return this;
}

function updateQuantity() {
	var $this = $(this);
	var newVal = parseInt($this.val());
	var lastVal = $this.data('currentQuantity');
	if (newVal == lastVal) {
		$this.val(newVal); // just in case they entered 3.6 this will reset to 3
	} else if (newVal < 1 || isNaN(newVal)) {
		$this.val(lastVal); // revert quantity edit
		alert(quantity_error);
	} else {
		overlayShow($('#content'));
		var quantifier = $this;
		var quantity = quantifier.val();
		var ID = $this.attr('id').replace(/\D/g, '');
		var rowPricer = new PriceTag($('#price-span-' + ID));
		var shipPricer = new PriceTag($('.shipment .price'));
		var totalPricer = new PriceTag($('.total .price span:first'));
		$.post('typo3conf/ext/iwshop/extra/AJAX.php?setQuantity:' + ID + ':' + quantity, function(XML) {
			if (getXMLvalue(XML, 'status') != 'OK') {
				alert('Error: ' + getXMLvalue(XML, 'msg'));
				$this.val($this.data('currentQuantity')); // revert quantity edit
			} else {
				$this.data('currentQuantity', newVal);
				var newImgPrice = parseInt(getXMLvalue(XML, 'image_price'));
				var newShipPrice = parseInt(getXMLvalue(XML, 'freight_price'));

				var delta = (newImgPrice - rowPricer.price()) + (newShipPrice - shipPricer.price());

				rowPricer.price(newImgPrice + ' DKK');
				shipPricer.price(newShipPrice + ' DKK');
				totalPricer.price((totalPricer.price() + delta) + ' DKK');
			}
			overlayHide();
		});
	}
}

function PriceRow(elem) {
	var $elem = $(elem);
	var origVal = parseInt($elem.val());
	$elem.data('originalQuantity', origVal);
	$elem.data('currentQuantity', origVal);

	$elem.bind('blur', updateQuantity).bind('keypress', function() {
		var $this = this;
		window.setTimeout(function() {
			updateQuantity.call($this);
		}, 100);
	});

	$elem.keyup(function(e) {
		if (e.keyCode == 13) {
			$elem.trigger('blur');
		}
	});
}

$(function() {
	var editables = $('.quantity input[type="text"]');

	$.each(editables, function(ix, el) {
		new PriceRow(el);
	});
});
