var Cart = new (function(){
	this.urls = {
		add : '/r/cart/?action_4=add',
		del : '/r/cart/?action_4=del',
		count : '/r/cart/?action_4=count',
		get : '/r/cart/?action_4=get'
	};

	var cartHTML = {
		wrap: '<table class="items_block" border="0" cellpadding="0" cellspacing="0"></table>',
		line: '<tr></tr>',
		productline: '<td><div class="rel_path"><div class="item_hover_img"></div><img src="%thumb_image%" border="0" /></div></td><td><a href="#">%name%</a><p>%description%</p></td><td>с %delivery_date%</td><td>%count%</td><td><b>%price%</b> руб</td><td><div class="rel_path"><div class="close"></div></div></td>',
		head: '<tr><td></td><td class="item_name"><div>Наименование</div></td><td class="date"><div>Дата доставки</div></td><td class="count"><div>Кол-во</div></td><td class="price"><div>Цена</div></td><td class="close"><div>Удалить</div></td></tr>',
		foot: '',
		prefoot: ''
	};

	this.changeHTML = function(){
		if( typeof arguments[0] === "object" ) for(var i in arguments[0]){
			if( cartHTML[i] !== null ) cartHTML[i] = arguments[0][i];
		}
	};

	var self = this;
	var getData = function(i, params){
		var params = params || {};
		params._t = +(new Date());
		$(Cart).trigger('Cart.startRequest');
		$.ajax(
				{
					url: self.urls[i],
					dataType: 'json',
					type: 'GET',
					data: params,
					success: function(data){
						if(data.success)
							self.getHTML(data);
						if(data.error) $(Cart).trigger('Cart.errorRequest', [data.error, data]);
					}
				}
		);
	};

	this.getHTML = function(data, html, event){
		var wrap = (html && html.wrap) ? html.wrap : cartHTML.wrap;
		var head = (html && html.head) ? html.head : cartHTML.head;
		var prefoot = (html && html.prefoot) ? html.prefoot : cartHTML.prefoot;
		var foot = (html && html.foot) ? html.foot : cartHTML.foot;

		if( data.allcount > 0 ) for(var i in data.cart){
			var line = (html && html.line) ? html.line : cartHTML.line;
			var productline = (html && html.productline) ? html.productline : cartHTML.productline;

			for(var param in data.cart[i]){
				var re = new RegExp('\%'+param+'\%', 'g');
				head = head.replace(re, data.cart[i][param]);
				line = line.replace(re, data.cart[i][param]);
				productline = productline.replace(re, data.cart[i][param]);
				prefoot = prefoot.replace(re, data.cart[i][param]);
				foot = foot.replace(re, data.cart[i][param]);
			}
			wrap = $(wrap).append( $(line).append( productline ) );
		}
		wrap = $(wrap).prepend( head );
		wrap = $(wrap).append( prefoot );
		wrap = $(wrap).append( foot );
		if(!event) {
			$(Cart).trigger('Cart.getHTML', [data, $(wrap)] );
			$(Cart).trigger('Cart.endRequest');
		} else {
			return $(wrap);
		}
	};

	for(var i in this.urls){
		(function(i){
			self[i] = function(){
				var params, callback;
				if( arguments.length == 1 ){
					if( typeof arguments[0] === 'function' ){
						params = null;
						callback = arguments[0];
					} else if( typeof arguments[0] === 'object' ){
						params = arguments[0];
					}
				} else if( arguments.length == 2 ){
					params = arguments[0];
					callback = arguments[1];
				}
				getData(i, params, callback);
			}
		})(i);
	}

})();
