// JavaScript Document
(function ($) {
	window.Product = function (sourceFormElement)
	{
		this.init = function (sourceFormElement) {
			elem = sourceFormElement.get(0);
			this.identifier = elem.identifier ? elem.identifier.value || '0' : '0';
			this.picture = elem.picture ? elem.picture.value || '' : '';
			this.title = elem.title ? elem.title.value || '' : '';
			this.quantity = elem.quantity ? elem.quantity.value || '1' : '1';
		};
		this.init(sourceFormElement);
	}
	
	window.Cart = function (options)
	{
		this.init = function (options) {
			options = options || {};
			this.settings = {
				addURL: options.addURL || 'add.php',
				quantity: options.quantity || 0,
				conteiners: options.conteiners || ['#product_cnt span']
			}
		};
		this.add = function  (product) {
			var ok = false;
			if (product) {
				var q = parseInt(product.quantity);
				if ( isNaN(q) || q < 1 )
					q = 1;
				var c = this;
//				jQuery.ajaxSetup({async: false});
				$.post(
					TEMPLATE ? 'cart.php' : buildURL('json', 'addItem'), 
					{ "quantity": q, "identifier": product.identifier }, 
					function(data)
					{
						if (data.responseData.quantity)
						{
							c.settings.quantity = data.responseData.quantity;
							ok = true;
							c.applyQuantity();
						}
					},
					'json'
				);
//				jQuery.ajaxSetup({async: true});
			}
			return ok;
		};
		this.applyQuantity = function ()
		{
			for (var i = 0; i < this.settings.conteiners.length; i++ )
			{
				var el = $(this.settings.conteiners[i]);
				if (el.is('input, textarea, select'))
					el.val(this.settings.quantity);
				else
					el.text(this.settings.quantity);
			}
		}
		this.init(options);
	}

	$(document.body).ready(function() {
		window.cart = new Cart({quantity: $('#product_cnt span').text()});
		window.cartSize = null;
		window.getCartPosition = function() {
			if ( !window.cartSize )
			{
				window.cartSize= $('#small_shopping_cart_body').offset({relativeTo: document.body});
			}
//			alert('to='+window.cartSize.left);
			return window.cartSize;
		};
		
		$('form.product').each(function() {
			var $form = $(this);
			var $formImg = $('img', $form).eq(0);
			$form.bind('submit', function () {
				try {
					product = new Product($form);
					var to = getCartPosition();
					if( product.picture )
					{
						var from = $formImg.offset({relativeTo: document.body});
//						alert('from='+from.left);
						var preview = $('<div><img src="' + product.picture + '" /></div>').css({position: 'absolute'}).appendTo('body');
						var img = preview.children('img').eq(0);
						var width = img.width();
						preview.css({zIndex: 100, top: from.top, left: from.left, width: width});
						setTimeout(function(){cart.add(product);}, 10);
						img.animate({opacity: 0.1, height: 22}, 1000);
						preview.animate({top: to.top, left: to.left}, 1000, 'swing')
							.queue(function() {preview.remove();cart.applyQuantity();});
					}
					else
					{
						var from = $('#pbooks_knop1, #prtop10_knop', $form).eq(0).offset({relativeTo: document.body});
						setTimeout(function(){cart.add(product);}, 10);
						var animation = {top: to.top, left: to.left - 150}; 
						if ( !$.browser.msie )
							animation.opacity = 0.1;
						var preview = $('<div class="green bold">' + product.title + '</div>').css({position: 'absolute', fontSize: 12}).appendTo('body')
							.css({zIndex: 100, top: from.top - 16, left: from.left - 200, width: width})
							.animate(animation, 1000, 'swing')
							.queue(function() {preview.remove();cart.applyQuantity();});
					}
				} catch(e) {
					alert('Line: ' + e.line + '\nError: ' + e.message);
				}
				return false;
			});
		});
	});
})(jQuery);