﻿var ShoppingBasket = {
    //ORDER_OFFSET: [0, 60],
    ORDER_OFFSET:60,
    ORDER_POSITION: ["top", "center"],
    DEFAULT_QUANTITY: "1",
    DEFAULT_VALUE: "",
    GUID_EMPTY: "00000000-0000-0000-0000-000000000000"
};

$(document).ready(function()
{
    var div = $(".roundedcornr_wrap");
    
    $(".close", div).click(function()
    {
        closeModalWindow();
    });

    $("#basket_button", div).click(function()
    {
        addItemToShoppingBasket();
    });
});

/* calculate tip position relative to the trigger */  	
/*function getPosition(e, conf, trigger, tip) {	
	
	// get origin top/left position 
	var top = conf.relative ? trigger.position().top : trigger.offset().top, 
		 left = conf.relative ? trigger.position().left : trigger.offset().left,
		 pos = conf.position[0];

	top  -= tip.outerHeight() - conf.offset[0];
	left += trigger.outerWidth() + conf.offset[1];
	
	// adjust Y		
	var height = tip.outerHeight() + trigger.outerHeight();
	if (pos == 'center') 	{ top += height / 2; }
	if (pos == 'bottom') 	{ top += height; }
	
	// adjust X
	pos = conf.position[1]; 	
	var width = tip.outerWidth() + trigger.outerWidth();
	if (pos == 'center') 	{ left -= width / 2; }
	if (pos == 'left')   	{ left -= width; }	 
	
	return {top: top, left: left};
}*/

function addToBasket(cardDesignId, element)
{
    // check if the input is correct
    if (cardDesignId != null && element != null)
    {
        jQuery.ajax({
            url: "/Handlers/ShoppingCart.ashx?",
            global: false,
            type: "GET",
            data: ({ action: "getCardDesign", cardDesignId: cardDesignId }),
            dataType: "json",
            success: function(cardDesign)
            {
                displayAddToBasket(cardDesign, element);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                // typically only one of textStatus or errorThrown
                // will have info  this; // the options for this ajax request
                alert(textStatus);
            }
        });
    }
}

function displayAddToBasket(cardDesign, element)
{
    var div = $(".roundedcornr_wrap");

    $("#card_design_id", div).val(cardDesign.id);
    $("#add_to_basket_title", div).text("Add to basket");
    $("#card_name", div).text(cardDesign.cardName);
    $("#card_description", div).text(cardDesign.cardDescription);
    $("#card_quantity", div).val(ShoppingBasket.DEFAULT_QUANTITY);
    var div = $(".roundedcornr_wrap");
    $(".message", div).html('');

    var card_value = $("#card_value", div);
    var cardDenomination = ShoppingBasket.DEFAULT_VALUE;
    
    // check if the card has fixed value
    if (cardDesign.fixedValue == "True")
    {
        // do not allow user to type in
        card_value.attr("disabled", true);
        cardDenomination = cardDesign.cardDenomination;
    }
    else
    {
        card_value.attr("disabled", "");
    }

    // set the value
    card_value.val(cardDenomination);

    // check if the carrier is defined or not
    if (cardDesign.showCarrier == "False") {
        // card carrier is not defined then please hide it
        $("#carrier_section", div).hide();
    }
    else {
        $("#carrier_section", div).show();
    }

    $(".order", div).show();
    $(".confirmation", div).hide();
    div.show();
    
    /*var pos = getPosition(null,
    {
        relative: false,
        offset: ShoppingBasket.ORDER_OFFSET,
        position: ShoppingBasket.ORDER_POSITION
    },
    element,
    div);
    
    div.css({left: pos.left, top: pos.top});*/
    
    var popBot = element.parent().height();
    var popRight = - (div.width() + ShoppingBasket.ORDER_OFFSET)/2 + 20 ;
    $('.index100').removeClass('index100');
    element.parent().append(div).addClass('index100');
    div.css({bottom:popBot+'px',right:popRight+'px'});
    
}


function displayAddToBasketConfirmation()
{
    $(".roundedcornr_content .order").fadeOut("fast", function()
    {
        $(".roundedcornr_content .confirmation").fadeIn("fast");
    });
}

function closeModalWindow()
{
    $(".roundedcornr_wrap").fadeOut("fast");
    $("#modalBackgroundDiv").fadeOut("fast");
}

function addItemToShoppingBasket()
{
    var div = $(".roundedcornr_wrap");
    var cardQuantity = $("#card_quantity", div).val();
    var cardValue = $("#card_value", div).val();
    var cardFixedValue = $("#card_value", div).attr("disabled");
    var cardDesignId = $("#card_design_id", div).val();
    var cardCarrier = $("#card_carrier:checked", div).val();
    var isValid = true;

    var message = [];
    
    if (cardQuantity == "")
    {
        message.push("Enter Quantity");
        isValid = false;
    }
    
    if (!valueIsInt(cardQuantity))
    {
        message.push("Quantity must be numeric");
        isValid = false;
    }
    else
    {
        var val = parseInt(cardQuantity);
        
        if (val < cardMinQuantity || val > cardMaxQuantity)
        {
            message.push("Quantity must be between " + cardMinQuantity + " and " + cardMaxQuantity);
            isValid = false;
        }
    }
    
    if (cardValue == "" && !cardFixedValue)
    {
        message.push("Enter Card value");
        isValid = false;
    }
    
    if (!valueIsDecimal(cardValue))
    {
        message.push("Card value must be numbers only");
        isValid = false;
    }
    else
    {
        var val = parseFloat(cardValue);
        
        if (val < cardMinValue || val > cardMaxValue)
        {
            message.push("Value must be between " + cardMinValue + " and " + cardMaxValue);
            isValid = false;
        }
    }
    
    if (isValid)
    {
        jQuery.ajax({
            url: "/Handlers/ShoppingCart.ashx",
            global: false,
            type: "POST",
            data: ({ action: "addItemToShoppingBasket", cardDesignId: cardDesignId, cardQuantity: cardQuantity, cardValue: cardValue, cardCarrier: cardCarrier }),
            success: function(msg)
            {
                displayAddToBasketConfirmation();
            },
            error: function(XMLHttpRequest, textStatus, errorThrown)
            {
                alert(textStatus);
            }
        });
    }
    else
    {
        addErrorMessage(message);
    }
}
function addErrorMessage(errorMessage)
{
    var div = $(".roundedcornr_wrap");
    $(".message", div).html(errorMessage.join("<br/>"));
}

function valueIsInt(valueToCheck)
{
    var validChars = "0123456789";
    var isNumber = true;
    var ch;

    for (i = 0; i < valueToCheck.length && isNumber == true; i++)
    {
        ch = valueToCheck.charAt(i);
        if (validChars.indexOf(ch) == -1)
        {
            isNumber = false;
        }
    }

    return isNumber;
}

function valueIsDecimal(valueToCheck)
{
    var validChars = "0123456789.";
    var isNumber = true;
    var ch;

    for (i = 0; i < valueToCheck.length && isNumber == true; i++)
    {
        ch = valueToCheck.charAt(i);
        if (validChars.indexOf(ch) == -1)
        {
            isNumber = false;
        }
    }
    
    return isNumber;
}
