YAHOO.namespace('istore.app');

YAHOO.istore.app.ProdList = function (config) {
	return this.init(config);
}


YAHOO.istore.app.ProdList.prototype = {
	
	init : function (config) {
		
		// process configure
		if (config.element != undefined) this.element = config.element;
		
		// items list
		this.items = [];
		
		// process items
		els = YAHOO.util.Dom.getElementsBy(function(el) {return (el.id.indexOf("proditem-")!=-1)}, 'div', this.element);
		if (els.length > 0) {
			for (var i = 0; i < els.length; i++) {
				
				this.items[i] = new YAHOO.istore.app.ProdListItem(els[i].id);
			}
		}
		
	}
	
}


YAHOO.istore.app.ProdListItem = function (id) {
	return this.init(id);
}


YAHOO.istore.app.ProdListItem.prototype = {
	
	briefViewClickHandler : function (e, args) {
		
		var oThis = args[0];
		
		var briefviewId = 'brief-view-' + oThis.prodId;
		
		var briefview = YAHOO.istore.app.panelmanager.find(briefviewId);
		
		if (!briefview) {
			
			var btnAddClickHandler = function (e, args) {
				
				var id = args[0];
				var vendor = args[1];
				var qty = args[2];
				var options = args[3];
				var callback = args[4];
				
				var url = '/cart/place/' + vendor + '/' + id + '?qty=' + qty;
				
				if (options.length > 0) {
					for (var i = 0, l = options.length; o = options[i], i < l; i++) {
						url += '&' + o.element.name + '=' + o.getValue();
					}
				}
				
				var ajaxCallback = {
					success: function(o) {
						
						// process xml response
						// root - root node
						// status - status name representation
						// opCode - operation num code
						// opText - operation response text 
						// cartItemId - item id in cart
						// data - response cdata
						
						var root = o.responseXML.documentElement;
						var status = root.getElementsByTagName('status')[0].firstChild ? root.getElementsByTagName('status')[0].firstChild.nodeValue : '';
						var opCode = root.getElementsByTagName('opcode')[0].firstChild ? parseInt(root.getElementsByTagName('opcode')[0].firstChild.nodeValue) : '';
						var opText = root.getElementsByTagName('optext')[0].firstChild ? root.getElementsByTagName('optext')[0].firstChild.nodeValue : '';
						var cartItemId = root.getElementsByTagName('cart_item_id')[0].firstChild ? root.getElementsByTagName('cart_item_id')[0].firstChild.nodeValue : '';
						var data = root.getElementsByTagName('data')[0].firstChild ? root.getElementsByTagName('data')[0].firstChild.nodeValue : '';
						
						// item placed in cart
						if (status == 'ok') {
							
							if (typeof cartCarousel !== "undefined" && cartCarousel) {
								cartCarousel.addItemToCarousel(cartItemId, data);
								cartCarousel.updateInfoBlock();
							}
							
							if (callback && callback.success) {
								callback.success();
							}
							
							// track event in google analytics
							// pageTracker._trackPageview('/event' + url);
							
						// if item already exists update quantity
						} else if (status == 'updated') {
							
							if (typeof cartCarousel !== "undefined" && cartCarousel) {
								
								// getting carousel item num
								var _tmp = YAHOO.util.Dom.get('cartitems-item-container-' + cartItemId).parentNode.id;
								var itemNum = _tmp.substr(_tmp.lastIndexOf('-') + 1);
								
								// scroll carousel to the current item
								if (cartCarousel.isCartCarouselClosed()) {
									cartCarousel.openCartCarousel();
								}
								cartCarousel.scrollTo(itemNum);
								
							}
							
							// update quantity in `qty changer`
							var qtyChanger = YAHOO.istore.utils.Cache.get('cart-item-qty-' + cartItemId)
							if (typeof qtyChanger !== "undefined" && qtyChanger) {
								qtyChanger.updateQtyByValue(qty);
							}
							
							if (callback && callback.success) {
								callback.success();
							}
							
						} else {
							if (callback && callback.failure) {
								
								switch (opCode) {
									case 208:
										callback.submitFailedText += ': quantity limit exceeded';
									break;
								}
								
								callback.failure();
							}
						}
						
					},
					failure: function(o) {
						
						if (callback && callback.failure) callback.failure();
						
					}
				}
				
				// invoke ajax request
				var connObj = YAHOO.util.Connect.asyncRequest('GET', '/ajax' + url, ajaxCallback);
				
			}
			
			
			briefview = new YAHOO.istore.app.BriefView(
				briefviewId,
				{
					width: '420px',
 					constraintoviewport: true,
					preloader: true,
					prodId: oThis.prodId,
					vendor: oThis.vendor,
					ajaxUrl: '/ajax/catalogue/briefview/' + oThis.vendor + '/' + oThis.prodId,
					onSubmitHandler: btnAddClickHandler,
					submitSuccessText: 'Added successfully',
					submitFailedText: 'Failed to add'
				}
			);
			
			if (typeof cartCarousel != "undefined" && cartCarousel) {
				cartCarousel.onQtyChangeEvt.subscribe(briefview.onPlacedQtyChangeHandler, briefview, true);
			}
			
			briefview.render(document.body);
			
			YAHOO.istore.app.panelmanager.register(briefview);
		}
		
		briefview.center();
		briefview.show();
		
		// track event in google analytics
		// if '/' leads pathname - remove them
		var _p = this.pathname;
		// pageTracker._trackPageview('/briefview' + (_p.substr(0, 1) == '/') ? _p : _p.substr(1));
		
	},
	
	
	showBriefViewBtn : function () {
		YAHOO.util.Dom.setStyle(this.btnBriefView, 'visibility', 'visible');
	},
	
	
	hideBriefViewBtn : function () {
		YAHOO.util.Dom.setStyle(this.btnBriefView, 'visibility', 'hidden');
	},
	
	
	init : function (id) {
		
		this.element = YAHOO.util.Dom.get(id);
		
		this.prodId = YAHOO.util.Dom.getElementsBy(function(el) {return (el.name.indexOf('id')!=-1)}, 'input', this.element)[0].value;
		this.vendor = YAHOO.util.Dom.getElementsBy(function(el) {return (el.name.indexOf('vendor')!=-1)}, 'input', this.element)[0].value;
		
		this.btnBriefView = YAHOO.util.Dom.getElementsByClassName('btn-briefview', 'a', this.element)[0];
		
		YAHOO.util.Event.addListener(this.element, 'mouseover', this.showBriefViewBtn, this, true);
		YAHOO.util.Event.addListener(this.element, 'mouseout', this.hideBriefViewBtn, this, true);
		YAHOO.util.Event.addListener(this.btnBriefView, 'click', this.briefViewClickHandler, [this]);
		
	}
	
}