/** Save cart template methods **/
function CartSaveTemplate()
{
    var requestURL = $(document).data("cartRequestURL");
    var params = "";
    var inputFields = $(".savecart:first").find("input[type='hidden']");
    var field = null;
    
    if($(".savecart span.loading").size() == 0)
    {
        for(var i=0; i<inputFields.length; i++)
        {
            field = inputFields.get(i);
            params += ","+field.name + ":'" + field.value+"'";
        }

        if(params.length != 0 && requestURL.length != 0)
        {
            eval("var formData = {mode:'CreateCartTemplates'"+params+"};");
            
            try
            {
                $(".savecart span:first").addClass("loading");
                
                $.ajax({
                   type: "POST",
                   dataType: "xml",
                   url: requestURL,
                   data: formData,
                   success: function(xml, textStatus){

                        if(xml)
                        {   
                            var success = $(xml).find("response").attr("success");
                            var errorNodes = $(xml).find("response > error");

                            if(success == "true")
                            {
                                $(".savecart span:first").removeClass("loading");
                                cartGetTemplates();
                            }
                            else
                            {
                                var errorMsg = "Sorry, we were unable to add item to your cart.";
                                if(errorNodes.length !== 0)
                                {
                                    errorMsg += "\n" + $(errorNodes[0]).text();
                                }
                                
                                alert(errorMsg);
                            }
                        }
                    }
                 });
            }catch(e){}
        }
    }
    
    return false;
}

function cartGetTemplates()
{
    var htmlTemplate = $(document).data("cartTemplateListTemplate");
    var requestURL = $(document).data("cartRequestURL");
    
    if($(".cartTemplateList ul").length != 0 && requestURL != null)
    {
	$(".cartTemplateList ul").empty();

        $.ajax({
           type: "POST",
           dataType: "json",
           url: requestURL,
           data: {"mode":"GetCartTemplates"},
           success: function(cartTemplateList, textStatus){
                //empty out current line items
                
                        
                if(cartTemplateList != null)
                {
                    var tempHtml = "";
                    
                    if(htmlTemplate != null && htmlTemplate.length != 0)
                    {
                        if(cartTemplateList.length != 0)
                        {
                            //add each cartTemplate
                            for(var i=0; i < cartTemplateList.length; i++)
                            {
                                tempHtml = htmlTemplate;
                                $.each(cartTemplateList[i], function(key, val) {	
                                    tempHtml = cartTemplateSetValue(tempHtml, key, val);
                                });
                                $(".cartTemplateList ul").append(tempHtml);
                                $(".cartTemplateList").show();
                            }
                        }
                    }
                }
            }  
        });
        
    }

	if($(".cartTemplateList ul li").length == 0)
        {
        	$(".cartTemplateList").hide();
        }
}

/** Adds the product to the cart using ajax **/
function cartAdd(srcElem, prodId)
{
    try
    {
        var requestURL = $(document).data("cartRequestURL");
        if(requestURL != null)
        {
            var qty = $(srcElem).prev("input").val();
            var regex = /^[1-9]\d{0,2}$/;
     
            if(qty != null && regex.test(qty))
            {
                $.ajax({
                   type: "POST",
                   dataType: "xml",
                   url: requestURL,
                   data: {"mode":"AddToCart","productId":prodId,"qty":qty},
                   success: function(xml, textStatus){

                        if(xml)
                        {   
                            var success = $(xml).find("response").attr("success");
                            var errorNodes = $(xml).find("response > error");

                            if(success == "true")
                            {
                                cartSummaryUpdate();
                            }
                            else
                            {
                                var errorMsg = "Sorry, we were unable to add item to your cart.";
                                if(errorNodes.length !== 0)
                                {
                                    errorMsg += "\n" + $(errorNodes[0]).text();
                                }
                                
                                alert(errorMsg);
                            }
                        }
                    }
                 });
            }
            else
            {
                alert("The qty must be a valid positive number.");
            }
        }
    }catch(e){}
    
    return false;
}

/** Updates the cart summary **/
function cartSummaryUpdate()
{
    if($(".cartsummary").length != 0)
    {
        var requestURL = $(document).data("cartRequestURL");
        
        if(requestURL != null)
        {
            $.ajax({
               type: "POST",
               dataType: "json",
               url: requestURL,
               data: {"mode":"GetCartSummary"},
               success: function(cartSummary, textStatus){
                    if(cartSummary)
                    {   
                        if(cartSummary != null)
                        {
                            /* grab template code from document.data*/
                            var cartMiniSummaryTemplate = $(document).data("cartMiniSummaryTemplate"); 
                            var cartLineItemTemplate = $(document).data("cartLineItemTemplate");
                            var cartTotalTemplate = $(document).data("cartTotalTemplate");
                            var tempHtml = "";
                            
                            if(cartLineItemTemplate != null && cartTotalTemplate != null)
                            {
                                //empty out current line items
                                $(".cartsummary .lineitem").empty();
                                
                                if(cartSummary.items.length != 0)
                                {
                                    //add each line item
                                    for(var i=0; i < cartSummary.items.length; i++)
                                    {
                                        tempHtml = cartLineItemTemplate;
                                        $.each(cartSummary.items[i], function(key, val) {	
	                                        tempHtml = cartTemplateSetValue(tempHtml, key, val);
                                        });	
                                        $(".cartsummary .lineitem").append(tempHtml);
                                    }
                                }
                                
                                //insert values into cart totals template
                                tempHtml = cartTemplateSetValue(cartTotalTemplate, "total", cartSummary.total);
                                $(".cartsummary .total").html(tempHtml);
                                
                                //insert values into mini summary template
                                tempHtml = cartTemplateSetValue(cartMiniSummaryTemplate, "totalItems", cartSummary.items.length);
                                tempHtml = cartTemplateSetValue(tempHtml, "total", cartSummary.total);
                                $(".cartsummary .minisummary").html(tempHtml);
                                
                                //if minisummary is hidden, fade it in
                                if($(".minisummary:hidden").length != 0)
                                {
                                    $(".minisummary").fadeIn(500);
                                }
                                
                                /*
                                * Add hover handlers 
                                * only if there are items in the cart
                                */
                                if(cartSummary.items.length > 0)
                                {
                                    $(".cartsummary").hoverIntent({
                                        sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
                                        interval: 200, // number = milliseconds for onMouseOver polling interval 
                                        timeout: 500, // number = milliseconds delay before onMouseOut       
                                        over: function(){$(this).addClass("over");$(".summary").show();},
                                        out: function(){$(this).removeClass("over");$(".summary").hide();}     
                                        });
                                }
                                else
                                {
                                    $(".cartsummary").unbind("hover");
                                }
                            }
                        }
                    }
                }  
            });
        }
    }
}

function cartTemplateSetValue(template, name, value)
{
    return template.replace(new RegExp("\\$\\{"+name+"\\}", "gi"), value).replace(new RegExp("\\$%7B"+name+"%7D", "gi"), value);
}
/**
* Adds cart summary data to the document
* And loads the cart summary data
**/
$(function(){
    if($(".cartsummary").length != 0)
    {
        var summary = $(".cartsummary:first");
        var cartMiniSummaryTemplate = summary.find(".minisummary").html();
        var cartLineItemTemplate = summary.find(".lineitem").html();
        var cartTotalTemplate = summary.find(".total").html();
        
        $(document).data("cartMiniSummaryTemplate", cartMiniSummaryTemplate);
        $(document).data("cartLineItemTemplate", cartLineItemTemplate);
        $(document).data("cartTotalTemplate", cartTotalTemplate);
        $(document).data("cartTemplateListTemplate", $(".cartTemplateList:first ul").html());
        
        cartSummaryUpdate();
        cartGetTemplates();
    }
});

$(function(){
    $('ul.prodgenerics li,ul.prodresults li').biggerlink();
});
