/* jclarke 2007.10.17 jquery based add to cart script */
/* jclarke 2007.12.06 update based on acquity changes by jrapasky */
$(document).ready(function(){
                         
	/**
	 * Calling this will log to the firefox firebug console.
	 */
	function log() {
	 	if(window.console)
	 		console.debug.apply(console, arguments);
		else
			alert( [].join.apply(arguments, [' '] ));
	}
	
	/**
	 * JSON Library Methods
	 */
	$.json = {callbacks: {}};
	
	$.fn.json = function(url, callback) {
		var _$_ = this;
		load(url.replace(/{callback}/, name(callback)));
		return this;

		function name(callback) {
			var id = (new Date).getTime();
			var name = 'json_' + id;

			var cb = $.json.callbacks[id] = function(json) {
				delete $.json.callbacks[id];
				eval('delete ' + name );
				_$_.each(function() {callback(json);});
			};
			eval( name + ' = cb' );     			
			return name;
		}

		function load(url) {
			var script = document.createElement('script');
			script.type = 'text/javascript';
			script.src = url;
			document.getElementsByTagName("head").item(0).appendChild(script);
		}
	};
	
                              
    	//log("0");                                           
                        
                        
	// Product List Form Handling
    if ($('form#productForm input:image').length > 0) {
    	//log("1");
		//   Grabs the coordinate position of the button used to submit the form
		var atcButtonOffset;
    	$('form#productForm input:image').click(function() {
    	//log("2");
			atcButtonOffset = $(this).offset();
		});
		//   Overrides the submission handler with an AJAX request for product order forms
                                    
		var iValue = 0;
		

    	$('form#productForm').submit(function() {
    	//log("3");
			//   Serialize the form's values
			var rqst = "{\"Request\":{\"OrderSource\":\"iGene\",\"OrderRequest\":[";
			var cartData = "";
			var addedProduct = false;
			var numInvalidInputs = 0;
	        var numValidInputs = 0;
	        			
		$.each($('input', this), function() {
    	//log("4");
             
			// If this is a ProdQtyX input field ...
			if(this.name.length>=7 && this.name.substring(0,7)=='ProdQty'){
    	//log("5");
				var qty = this.value;
				//log('qty=' + qty);
				var indexNumber = this.name.substring(7,this.name.length);
				// If it's a valid qty (non null, bigger than 0, and not blank)
				if(qty!=''){
    	//log("6");
    	            if(qty!=null && qty > 0)
    	               numValidInputs = numValidInputs + 1;
    	            else if (qty <= 0)   
    	              numInvalidInputs = numInvalidInputs + 1;
    	            else if(!isInteger(qty)) 
    	              numInvalidInputs = numInvalidInputs + 1;
    	            
			    	// Have we added a product before? If so, add a comma.
			    	if(addedProduct){
    	//log("7");
					 rqst += ",";
					 cartData += ",";
					} 
				 	
				 	// Get the SKU for the ProdSku input with the same index number
				 	sku = eval('document.productForm.ProdSku' + indexNumber + '.value;');
				 	//get the price
					price = eval('document.productForm.ProdPrice' + indexNumber + '.value;');
					
				 	rqst += "{\"Catalog\":{\"SKU\":\"" + sku + "\",\"Quantity\":\"" + qty + "\"}}";
				 	cartDataSet = "Catalog Product" + ";" + sku + ";" + qty + ";"  + price; 
					//build the omniture variables
		            cartData += cartDataSet;
		            
					
					
				 	// After first addition, flip indicator
				 	addedProduct = true;
				 	iValue = 1;
				 }
				 
			}
		}); // end input iteration

    	//log("8");
    		rqst = rqst + "]}}";
			
			var responseMessage;
                                          
			if((iValue == 1) && (numValidInputs > 0) && (numInvalidInputs == 0)){

    	//log("9");
                                          
				rqst = encodeURIComponent(rqst);
				var rURL = document.productForm.action;
				var cbFunction = "&callback={callback}";
				var requestURL = rURL+rqst+cbFunction; 

				responseMessage = "<p>processing ... please wait ...<br/><img src=\"/shared-static/images/global/indicator.gif\" alt=\"Processing\" /></p>";
				displayThickBox(atcButtonOffset,responseMessage);

    	//log("10");

		//add omniture code
		cartData = "'" + cartData.toLowerCase() + "'";
		//log('cartData: ' + cartData);
		var s=s_gi('invitrogenprod');
		s.linkTrackVars='events,products' ;
		s.linkTrackEvents='scAdd';
		s.events='scAdd';
		s.products=cartData;
		s.tl(this,'o','Add To Cart');
		                                        
    	//log("11");
    	
				$().json(requestURL, function(json) {
                          
    	//log("12");
					var myObj = eval(json);
					var message = myObj.iXML.Response.Message;
					var cartlink = myObj.iXML.Response.CartLink;
					var checkoutlink = myObj.iXML.Response.CheckOutLink;
					var previewOrderLink = myObj.iXML.Response.PreviewOrderLink;
					var contactUsLink = myObj.iXML.Response.ContactUsLink;
					var status = myObj.iXML.Response.Status;
					var statusCode = myObj.iXML.Response.StatusCode;
					var responseMessage = "<p>" + message + "</p>";
					if (cartlink != null && cartlink.length > 0 ) {
						responseMessage = responseMessage + "<p><a href=\""+ cartlink + "\">View Cart</a></p>";
					}
					if (getisB2B() != null && getisB2B() == "1"){
					    if (previewOrderLink != null && previewOrderLink.length > 0 ) {
						     responseMessage = responseMessage + "<p><a href=\"" + previewOrderLink + "\"><img src=\"/shared-static/images/buttons/btn_preview_order.gif\" alt=\"Preview Order\" /></a></p>";
				     	 }	
					}	 	
					else {
					     if (checkoutlink != null && checkoutlink.length > 0 ) {
						     responseMessage = responseMessage + "<p><a href=\"" + checkoutlink + "\"><img src=\"/shared-static/images/buttons/button-checkout.gif\" alt=\"Checkout\" /></a></p>";
				     	 }
					}	 
					if (contactUsLink != null && contactUsLink.length > 0 ) {
					    responseMessage = responseMessage + "<p><a href=\""+ contactUsLink + "\">View Contact Details</a></p>";				
					}
					    
						 	 		
					//log('message: ' + message);
					//log('cartlink: ' + cartlink);
					//log('checkoutlink: ' + checkoutlink);
					//log('contactUsLink: ' + contactUsLink);
					//log('status: ' + status);
					//log('statusCode: ' + statusCode);
					//log('responseMessage: ' + responseMessage);
						
					tb_remove();
					setTimeout(function () {displayThickBox(atcButtonOffset, responseMessage)}, 400);
				});
                                          
			} else {
                                                
    	//log("13");
				responseMessage = "<p>You must provide a quantity to add an item to the cart</p>";
				displayThickBox(atcButtonOffset,responseMessage);
                                                
			}
				
			return false;
		});
	}
	
	  //Get B2B user info
	  function getisB2B () {
		var isB2B = "0"; 
		if (document.cookie == "") {
				return null;
		}
		else {
		   var thisCookie = document.cookie.split("; ");
			//search for the cookie - CK_CUSTOMER_INFO
		   var cookieName = "CK_CUSTOMER_INFO";
		   var nameEQ = cookieName + "=";
		   for (var i=0; i<thisCookie.length; i++) {
		        var c = thisCookie[i];
		        while (c.charAt(0)==' ') c = c.substring(1,c.length);
		        if (c.indexOf(nameEQ) == 0) {
				  var cookieValue = c.substring(nameEQ.length,c.length);
				  //%3B - delimeter for each value in CK_CUSTOMER_INFO cookie
				  var ciCookie = cookieValue.split("%3B");
				  //traverse through the array
				  for (var i=0; i<ciCookie.length; i++) {
					var ciC = ciCookie[i];
					var ciCValue = ciCookie[i].split("%3A");
					if (ciCValue[0] == "isB2B"){
					    var isB2B = unescape(ciCValue[1]) ;
						return isB2B;
					}
					
				  }//for  
				  break; 
			    }	  
		      }
		   	}//else
     }//	
			function displayThickBox(atcButtonOffset, resultMessage) {
				$("#TB_inlineContentArea").empty();
					
				$("body").append('<div id="TB_inlineContentArea" style="display:none"><p></p></div>');
				
				$("#TB_inlineContentArea").append(resultMessage);
				
				tb_show("Add to Cart Notification", "#?width=228&height=120&inlineId=TB_inlineContentArea", false);
				var TB_window = $("#TB_window");
		
				TB_window.addClass("atcDialog").append('<div id="TB_footer"></div>');
				$("#TB_overlay").addClass("atcDialog").unbind("click");
		
				var dialogLeft = atcButtonOffset["left"] - TB_window.width() + 15 - $(window).scrollLeft();
				var dialogTop = atcButtonOffset["top"] - Math.round(TB_window.height() / 2) - $(window).scrollTop();
				var browserOffsetLeft = 0;
				var browserOffsetTop = 0;
				jQuery.browser.msie6 = jQuery.browser.msie &&
    				parseInt(jQuery.browser.version) == 6 &&
    					!window["XMLHttpRequest"];
				if (jQuery.browser.msie6) {
					//   This removes the iframe ** FPO **
					$("#TB_HideSelect").remove();
					TB_window.attr("style", "display: block; width: 260px; left: " + (atcButtonOffset["left"] - TB_window.width() + 30 - $(window).scrollLeft()) + "px; top: " + Math.round(atcButtonOffset["top"] - (TB_window.height() / 2)) + "px");
				} else {
					TB_window.attr("style", "display: block; width: 260px; left: " + (atcButtonOffset["left"] - TB_window.width() + 15 - $(window).scrollLeft()) + "px; top: " + Math.round(atcButtonOffset["top"] - (TB_window.height() / 2) - $(window).scrollTop()) + "px");
				}
                  
        $("#TB_title", TB_window).append('<div id="TB_header">Add to Cart Notification</div>');
        $("#TB_closeWindowButton", TB_window).unbind("click").click(function() {
        	tb_remove_fast();
            window.location.reload();
        });
                              
        return false;     
	}
});
