/*
 * addToCart
 * Examples and documentation at: http://
 * Version: 1.0.0 (05/01/2011)
 * Copyright © 2011 
 * Licensed under the MIT License: http://en.wikipedia.org/wiki/MIT_License
 * Requires: jQuery v1.4.4+
*/
;(function($) {

	$.fn.addToCart = function( options ){
		
		var _this = $(this);
		
		var defaults = {	
			'sessionId':'sessionid',
			'prodId':null,
			'scriptUrl':'/templates/sc_cnt.asp',
			'acart':null,
			'itemForm':null,
			'itemPrice':'',
			'itemTitle':'',
			'itemImg':null,
			'goToCartUrl':'templates/view_basket_init.asp',
			'prodid':false,
			'pro':null,
			'afteradd_action':function(){},
			'afteradd_function':function(){},
			'afteraddBt':false
		};
		
		var options = $.extend( {}, defaults, options );

		var sessionId = getCookie( options.sessionId );
		
		
			var maincon = $("<div class='bigscrollborder bscrbacc' id='addtocard_info'><div class='accessories_box'><div class='accessories_boxc'><div class='close'></div><p class='head'>You have added this item to your cart</p><div class='accessories_bl'><div class='minipic minipic_gray'><div class='img'><img src='' /></div><div class='frame'></div></div></div><div class='accessories_br'><p class='title'></p><p class='price'>Price: <span></span></p></div><div class='inline subacc'><p>Usually ships within 10 to 15 Business Days</p><div class='scrollbutton scrollbutton_face' id='keep_shopping'><div class='scrollbutton_c'><p>Keep Shopping</p></div><div class='outcor'></div></div><div class='scrollbutton scrollbutton_face' id='view_cart'><div class='scrollbutton_c'><p>View Cart</p></div><div class='outcor'></div></div></div></div></div></div>").appendTo('body').hide();
			var overlay = $("<div></div").css({'backgroundColor':'#fff','position':'fixed','z-index':5000,'top':0,'opacity':0.6,'left':0,'width':$(window).width(),'height':$(window).height()}).appendTo('body').hide();
			
			var mainconImg = $( ".img img", maincon );
			var mainconTitle = $( ".title", maincon );
			var mainconPrice = $( ".price span", maincon );
			var mainconBtClose = $( ".close", maincon ).click(function(){ maincon.hide();overlay.hide() });
			var mainconBtKeepShopping = $( "#keep_shopping", maincon ).click(function(){ btClose.trigger('click') });
			var mainconBtViewCart = $( "#view_cart", maincon ).click(function(){ goToCart() });
		
		
		$(window).resize(function(){
			maincon.css({
				'z-index':5001,
				'left':currentClickObject.offset().left - maincon.width() + currentClickObject.width(),
				'top':currentClickObject.offset().top
			})
		});
		
		var protocol = document.location.protocol;
		
		var currentCartItems = 0;
		var currentClickObject = {};
		
		
		
		_this.each(function(i,o){
			var o = $(o);
			if( (/BUTTON/i).test( this.tagName ) && o.hasClass("ongrid") )
			{
				var prodid = options.prodid;
				
				if(!prodid)
				{
					var label = o.parent().parent();
					prodid = $( ".scrollbutton a", label ).attr('href').split("prodid=")[1];
				}

				o.click(function(){addToCart( o, protocol+"//"+document.domain+"/templates/multy_items_init_ex.asp?mainprodid="+prodid, {} ); return false });
			
			}
			else if( (/BUTTON/i).test(this.tagName) )
			{
				if( sessionId != null )
				{
					o.addClass("addtocart_selected");
					
					getAjaxByBpoductId( options.prodId, function(json){
						
						o.removeClass("addtocart_selected");
						currentCartItems = setCartItemsCounter( json.data[0] );
						
						if( json.data[1] )
						{
							o.removeClass("addtocart_selected").addClass("addtocart_incart").click(function(){ goToCart() });
						}
						else
						{
							o.click(function(){ addToCart( o, options.itemForm.attr('action'), getItemFormData() ) });
						}
						
					});

				}
				else
				{
					o.click(function(){ addToCart( o, options.itemForm.attr('action'), getItemFormData() ) });
				}
				
				if( options.afteraddBt )
				{
					options.afteraddBt.click(function(){
						$(this).addClass("selected").unbind('click');
						options.afteradd_action = options.afteradd_function;
						if( !o.hasClass( "addtocart_incart" ) ) { o.trigger("click") }
						else { options.afteradd_action() }
					});
				}

			}
			else if( (/DIV/i).test(this.tagName) )
			{
				if( sessionId != null )
				{
					o.addClass("scrollbutton_addtocart_selected");
					$( "a", o ).text("Checking...");
					
					getAjaxByBpoductId( $( "a", o ).attr('href').split('mainprodid=')[1], function(json){
						
						o.removeClass("scrollbutton_addtocart_selected");
						$( "a", o ).text("Add to Cart");
						currentCartItems = setCartItemsCounter( json.data[0] );
						
						if( json.data[1] )
						{
							$( "a", o ).text("Item in Cart");
							o.removeClass("scrollbutton_addtocart_selected").addClass("scrollbutton_addtocart_incart").click(function(){ goToCart(); return false });
						}
						else
						{
							o.click(function(){ addToCart( o, $( "a", o ).attr('href'), {} ); return false });
						}
						
					});
				}
				else
				{
					o.click(function(){ addToCart( o, $( "a", o ).attr('href'), {} ); return false });
				}
			}
			else
			{
				defineBasketCount();
			}
		});
		
		function getAjaxByBpoductId( id, func )
		{
			$.ajax({ type: "POST", async:true, url: protocol+"//"+document.domain+options.scriptUrl+"?productid="+id, dataType: 'json', data: {}, success: function(json){func(json)} });
		}
		
		function defineBasketCount()
		{
			$.ajax({ type: "POST", async:true, url: protocol+"//"+document.domain+options.scriptUrl, dataType: 'json', data: {}, success: function(json){
				currentCartItems = setCartItemsCounter( json.data[0] )
			} });
		}
		
		function getItemFormData()
		{
			//var data = {};
			//$( "input, textarea, select", options.itemForm ).each(function(i,o){data[$(o).attr('name')] = $(o).val()});
			//$("input:radio:checked");
			//$.extend( {}, defaults, data );
			//return data;
			return options.itemForm.serialize();
		}
		
		function showAjaxBox( obj )
		{
			
			var _this = obj.objClick;
			
			currentClickObject = _this;
			
			mainconImg.attr({ 'src' : obj.itemImg });
			mainconTitle.text( obj.itemTitle );
			mainconPrice.text( obj.itemPrice );
			mainconBtKeepShopping.unbind('click').click(function(){ obj.btKeepShopping() });
			mainconBtViewCart.unbind('click').click(function(){ obj.btViewCart() });
			
			setCartItemsCounter( ++currentCartItems );
			
			overlay.fadeIn(500, function(){

				maincon.css({
					'z-index':5001,
					'left':_this.offset().left - maincon.width() + _this.width(),
					'top':_this.offset().top
				}).fadeIn();

				_this.removeClass( obj._selected ).addClass( obj._incart ).click(function(){ goToCart() });
				
			});
		}

		function addToCart( objClick, action, data )
		{

			if( (/BUTTON/i).test( objClick[0].tagName ) && objClick.hasClass("ongrid") )
			{
				if(!options.prodid)
				{
					var label = objClick.parent().parent();
					var _itemImg = $(".image .i img", label ).attr('src');
					var _itemTitle = $("h2", label ).text();
					var _itemPrice = $(".price .price span", label ).text();
				}
				else
				{
					var _itemImg = options.pro.img;
					var _itemTitle = options.pro.title;
					var _itemPrice = options.pro.price;
				}
					var	_selected = "addtocart_selected";
					var	_incart = "addtocart_incart";
				
				currentCartItems = setCartItemsCounter( (options.acart.text().match(/\d+/)[0])++ );
				
				var	_btKeepShopping = function(){mainconBtClose.trigger('click')};
				var _btViewCart = function(){window.open(options.acart.attr("href"),'_self','_self')};
			}
			else if( (/BUTTON/i).test( objClick[0].tagName ) )
			{
				var	_selected = "addtocart_selected";
				var	_incart = "addtocart_incart";
				var _itemImg = options.itemImg.attr('src');
				var _itemTitle = options.itemTitle;
				var _itemPrice = options.itemPrice.text();
				var	_btKeepShopping = function(){
					mainconBtClose.trigger('click')
				};
				var _btViewCart = function(){
					goToCart()
				};
			}
			else
			{
				var _selected = "scrollbutton_addtocart_selected";
				var _incart = "scrollbutton_addtocart_incart";
				
				var _itemImg = $(".minipic img",objClick.parent().parent().parent()).attr('src');
				var _itemTitle = $(".title",objClick.parent().parent()).text();
				var _itemPrice = $(".price",objClick.parent().parent()).text();
				
				var	_btKeepShopping = function(){
					mainconBtClose.trigger('click')
				};
				var _btViewCart = function(){
					goToCart()
				};
				
				
			}
			
			if( !objClick.hasClass( _selected ) && !objClick.hasClass( _incart ) )
			{
				
				objClick.addClass( _selected );
				
				$.post( action, data, function(){
					
					showAjaxBox({
						'objClick':objClick,
						'_selected':_selected,
						'_incart':_incart,
						'itemImg':_itemImg,
						'itemTitle':_itemTitle,
						'itemPrice':_itemPrice,
						'btViewCart':_btViewCart,
						'btKeepShopping':_btKeepShopping
					});
					
					options.afteradd_action();
					
					$( "a", objClick ).text("Item in Cart");
					
				});
			}
			else if( objClick.hasClass( _incart ) )
			{
				objClick.click(function(){ goToCart() });
			}

		}
		
		function goToCart()
		{
			options.itemForm.attr({'action':options.goToCartUrl}).submit();
		}
		
		function setCartItemsCounter( count )
		{
			options.acart.text( "("+count+") items " );
			return count;
		}
		
		function getCookie(name){
			var cookie = " " + document.cookie;
			var search = " " + name + "=";
			var setStr = null;
			var offset = 0;
			var end = 0;
			if (cookie.length > 0){
				offset = cookie.indexOf(search);
				if (offset != -1) {
					offset += search.length;
					end = cookie.indexOf(";", offset)
					if (end == -1) {
						end = cookie.length;
					}
					setStr = unescape(cookie.substring(offset, end));
				}
			}
			return(setStr);
		}

	};
})(jQuery);
