

core.im = (function(){
	
	$(document).ready(function(){
		core.im.init('mainProducts');
	});
	
	var controller = 'IM';
	var init = true;		
	
	// quick shop attributes update button.
	function btnUpdateQuickShop(dialogId){
		$('#' + dialogId + ' .attributes li').click(function(){
			var itemId = $(this).attr('id');
			
			core.im.xhrQuickshop(itemId, $(this));	
		});		
	}
		
	// init select lists.
    function initSelectLists(){
		// page list.
        $('.pageList select').change(function(){
            var value = $(this).val();
            $('.pageList select').val(value);			
			core.im.xhrProductsUpdate('Page', value);
        });
        
        if (init === true) {
			// sort list.
            $('.sortList select').change(function(){
                var value = $(this).val();
                $('.sortList select').val(value);                
                core.im.xhrProductsUpdate('Sort', value);
            });
			// rows list.
            $('.rowsList select').change(function(){
                var value = $(this).val();
                $('.rowsList select').val(value);                
                core.im.xhrProductsUpdate('View', value);
            });
        }
    }
    
	// init fancybox links.
    function initFancybox(){
		// build fancy box elements.
		$.fn.fancybox.build();
        $('.fbEnlarge').fancybox({
            'overlayShow': true,
            'padding': 10,
            'zoomSpeedIn': 300,
            'zoomSpeedOut': 300,
            'showCloseButton': false
        });
    }
	
	// init quickshop objects.
	function initQuickshop(){
		$('.itemImg').mouseover(function(){
			var $that = $(this);
			$that.children('.quickShop').css({'visibility': 'visible'});
		});
		
		$('.itemImg').mouseout(function(){
			var $that = $(this);
			$that.children('.quickShop').css({'visibility': 'hidden'});
		});
		
		$('.itemImg .quickShop').click(function(){
			var $that = $(this);
			var $container = $that.parent();
			var itemId = $container.attr('id');
			core.im.xhrQuickshop(itemId, $container);
		});
	}
	
	// init buttons.
    function initButtons(id){
		// add to cart button.
		$('#' + id + ' .btnAddtocart').click(function(){
			var $that = $(this);
			var itemId = $that.attr('id');
			var qty = $that.siblings('input.qty').val();
			core.cart.xhrAddtocart(itemId, qty, $that, core.im.xhrAddtocartResponse);
		});
    }
	
	// init input fields.
    function initFields(id){
		// on keyup function.
        $('#' + id + ' input.qty').keyup(function(event){
			$that = $(this);
			// if enter key initiate add to cart.
            if (event.keyCode == 13) {
				$that.siblings('.btnAddtocart').click();
            }
			// update price and clean input if invalid.
            else {
				// clean up qty if invalid.
				var qty = core.cart.cleanQty($that.val());
				// update price.				
				var itemId = $that.siblings('.btnAddtocart').attr('id');
				core.im.xhrUpdatePrice(id, itemId, qty, $that);
				// update input field.
				$that.val(qty);
            }
        });

		// default to 1 if qty less than 1 or blank.
		$('#' + id + ' input.qty').blur(function(){
			var $that = $(this);
			if ($that.val() == '' || $that.val() < 1) {
				$that.val(1);
			}
		});
    }
	
    var im = {
    
        init: function(container){
            initSelectLists();
            initFancybox();
			initQuickshop();
            initButtons(container);
			initFields(container);
			
			core.stopPropagation();
            
            init = false;
        },
        
		// update product price to reflect price against break qty.
        xhrUpdatePrice: function(id, itemId, qty, $that){
			var action = 'update_price';
			var $priceBox = $('#' + id).find('#' + itemId + '.price');
            
			core.effects.applyAlpha($that);
			core.effects.applyAlpha($priceBox);
			
            var xhr = $.jsonRpc(controller, action, itemId, qty);
            xhr.addCallback(function(data){
                if (data.result === true) {
                    $priceBox.parent().html(data.price);
					
					core.effects.removeAlpha($that);
					core.effects.removeAlpha($priceBox);
                }
            });
        },
		
        // update products display.
        xhrProductsUpdate: function(type, value){
            var action = 'update_products';
            var $container = $('#mainProducts .bodyBox');
            core.effects.applyAlpha($container);
            
            var xhr = $.jsonRpc(controller, action, type, value);
            xhr.addCallback(function(data){
                if (data.result === true) {
                    $('span.pageList').html(data.pageList);
                    $('span.pageLinks').html(data.pageLinks);
                    $('span.displayingMsg').html(data.displayingMsg);
                    $container.html(data.productsBody);
                    
                    core.im.init();
                    core.scrollToTop();
                    core.effects.removeAlpha($container);
                }
            });
        },
		
        // quickshop dialog.
        xhrQuickshop: function(itemId, $container){
            var action = 'quick_shop';
            var dialogId = action;
            var dialog = core.dialog(dialogId);
            
            // incase loader icon already exist.
            core.effects.removeLoaderImg($container);
            // append loader icon.
            core.effects.appendLoaderImg($container);
            
            var xhr = $.jsonRpc(controller, action, itemId);
            xhr.addCallback(function(data){
                if (data.result === true) {
                    dialog.setWidth(470);
                    dialog.setHeight(280);
					dialog.setTitleBG('mk');
                    dialog.setTitleLabel('Quickshop');
                    dialog.show(data.content);
                    
                    btnUpdateQuickShop(dialogId);
                    
                    initButtons('mainQuickshop');
                    initFields('mainQuickshop');
                    
                    core.effects.removeLoaderImg($container);
                }
            });
        },		
			
        // addtocart respones.
        xhrAddtocartResponse: function(data, itemId, qty, $that){
            var action = 'addtocart_response';
            var dialogId = action;
            var dialog = core.dialog(dialogId);
            dialog.setWidth(420);
            dialog.setHeight(280);
            
            if (data.result === true) {
                dialog.setTitleLabel('You\'ve just added:');
                dialog.setTitleIcon('greenCheck');
                // update mincart.
                $('#minCart').replaceWith(data.minCart);
				core.cart.initMinCart('minCart');
            }
            else {
                dialog.setTitleLabel('Requested quantity not available!');
                dialog.setTitleBG('red');
                dialog.setTitleIcon('yellowAlert');
            }
            
            var xhr = $.jsonRpc(controller, action, data.result, itemId, qty);
            xhr.addCallback(function(data){
                if (data.result === true) {
                    dialog.show(data.content);
                    
                    initButtons('mainAddtocartResponse');
                    initFields('mainAddtocartResponse');
                }
                
                $('#quick_shop').dialog('close'); // close Quickshop dialog.
                core.effects.removeLoaderImg($that); // remove loading icon.
            });
        }
        
    };
	
	return im;
	
})();


core.im.details = (function(){
	
	$(document).ready(function(){
		core.im.details.init('mainProductDetails');
	});
	
	var controller = 'IM';
	
	function btnUpdateProductAttribute(id){
		$('#' + id + ' .attributes li').click(function(){
			var action = 'update_product_attribute';
			var $container = $('#' + id);
			var itemId = $(this).attr('id');			
					
			var xhr = $.jsonRpc(controller, action, itemId);
			xhr.addCallback(function(data){
				if (data.result === true) {
					$container.html(data.content);
					
					core.im.details.init('mainProductDetails');																									
				}
			});	
		});		
	}	
	
	var details = {
		
		init: function(id){			
			core.im.init(id);
			btnUpdateProductAttribute(id);
		}
		
	};
	
	return details;
	
})();

