﻿// ******************************************************************************************************************************************************************************
//          public Methods On Change Methods
// ******************************************************************************************************************************************************************************
// Function get called when ever Multi license price option is changed
function MLPriceOptionChange(objControl) 
{
    var selectedValue = objControl.options[objControl.selectedIndex].value;
    if (selectedValue == "myaccountredirect") {
        location.href = "http://home.mcafee.com/root/MyAccount.aspx";
        return;
    }
}

// Function On Radio Price Option Group Plan Change
function onRadioInputClick(RadioContainerId, Control) {
    //  ... Reset Checked property of All Radio Input Controls
    ResetRadioInputControls(RadioContainerId);

    //  ... Disable Multi License Combo Box Controls
    DisableMLComboBoxControls(RadioContainerId);

    //  ... Set Selected Radio Button Input Property
    Control.checked = true;

    //  ... Activate ML Combo Box Control If Applicable
    ActivateMLComboBoxControl(RadioContainerId);
}


// ******************************************************************************************************************************************************************************
//          public Methods Form Submit Methods
// ******************************************************************************************************************************************************************************
// Function gets called whenever simple option submit button click or drop down submit button click (ML disabled)
function SimpleButtonSubmit(PriceOptionGroupId) 
{
    
    return PriceOptionCartPostSubmit(PriceOptionGroupId);
}

function RadioGroupButtonSubmit(RadioContainerId) 
{
    var SelectedRadioPriceOptionGroupId = GetSelectedRadioGroupId(RadioContainerId);

    if (SelectedRadioPriceOptionGroupId != "")
        return PriceOptionCartPostSubmit(SelectedRadioPriceOptionGroupId);

    return false;
}   



// ******************************************************************************************************************************************************************************
//          Private Radio Input On Change Methods
// ******************************************************************************************************************************************************************************
// Function Set Checked property to false for all the Input Radio controls of Price Options Group
function ResetRadioInputControls(RadioContainerGroupId) 
{
    var RadioContainerGroupObj = document.getElementById(RadioContainerGroupId);
    if (RadioContainerGroupObj) {
        var ArrayOfInputControlList = RadioContainerGroupObj.getElementsByTagName("input");
        var iCounter = 0;
        for (iCounter = 0; iCounter < ArrayOfInputControlList.length; iCounter++) 
        {
            var objRadioInput = ArrayOfInputControlList[iCounter];
            //  ... objRadioInput Exist?
            if (objRadioInput) 
            {
                //Object Is RadioButtonList?
                if (objRadioInput.type == "radio") 
                {
                    objRadioInput.checked = false;
                }
            }
        }
    }
}

// Function Disable all the Multi License Combo Box controls belonging to Radio Price Options Group
function DisableMLComboBoxControls(RadioContainerGroupId) 
{
    var RadioContainerGroupObj = document.getElementById(RadioContainerGroupId);
    if (RadioContainerGroupObj) 
    {
        var ArrayOfComboBoxControlList = RadioContainerGroupObj.getElementsByTagName("select");
        var iCounter = 0;
        for (iCounter = 0; iCounter < ArrayOfComboBoxControlList.length; iCounter++) 
        {
            var objComboBoxControl = ArrayOfComboBoxControlList[iCounter];
            //  ... objComboBoxControl Exist?
            if (objComboBoxControl) 
                objComboBoxControl.disabled = true;
        }
    }
}

// Function activate the Multi License Combo Box Control inside the Radio Price Option Group
function ActivateMLComboBoxControl(RadioContainerId) 
{
    //  ... Get Selected Radio Button Group Id
    var SelectedRadioPriceOptionGroupId = GetSelectedRadioGroupId(RadioContainerId);

    //  ... Get ML Select ComboBox Input Control Id (If applicable)
    var ComboBoxControlId = GetCartPostComboBoxControlId(SelectedRadioPriceOptionGroupId);

    if (ComboBoxControlId != "") 
    {
        var objComboBoxControlObject = document.getElementById(ComboBoxControlId);
        if (objComboBoxControlObject) 
            objComboBoxControlObject.disabled = false;
    }
}




// ******************************************************************************************************************************************************************************
//          Private Methods Common Methods
// ******************************************************************************************************************************************************************************
function GetSelectedRadioGroupId(RadioContainerId) {
    var RadioPriceGroupObj = document.getElementById(RadioContainerId);

    if (RadioPriceGroupObj) 
    {
        var ArrayOfInputControlList = RadioPriceGroupObj.getElementsByTagName("input");

        // ... Iterate and Find Radio Group Id
        var iCounter = 0;
        for (iCounter = 0; iCounter < ArrayOfInputControlList.length; iCounter++) 
        {
            var objInputRadio = ArrayOfInputControlList[iCounter];
            //Object Exist?
            if (objInputRadio) 
            {
                //Object Is RadioButtonList?
                if ((objInputRadio.type == "radio") && (objInputRadio.checked == true)) 
                {
                    var oAttribute = objInputRadio.attributes.getNamedItem("CartPostId");
                    if (oAttribute)
                        return oAttribute.value;
                }
            }
        }
    }

    return "";
}


// ******************************************************************************************************************************************************************************
//          Private Methods Common Cart Post Methods
// ******************************************************************************************************************************************************************************
// Function used Analyze the Price Option Group and post Data to Cart
function PriceOptionCartPostSubmit(PriceOptionGroupId) 
{
    //   ... Get Cart Post Control Id from the Group Container Control
    var objSrcObject = "";
    var CartPostControlId = GetCartPostControlId(PriceOptionGroupId);
    
    if(CartPostControlId == null || CartPostControlId == "")
        objSrcObject = document.getElementById(PriceOptionGroupId);
    else
        objSrcObject = document.getElementById(CartPostControlId);

    if (objSrcObject.tagName == "SELECT")
        return ComboBoxControlCartPost(objSrcObject);
    else if (objSrcObject.tagName == "INPUT")
        return HiddenInputControlCartPost(objSrcObject);
    else    
    return false;
}

// Function used retrieve the Control Id having Cart Post Data
function GetCartPostControlId(PriceOptionGroupId) 
{
    var CartPostControlId = "";

    //  ... Step 1  Get Id from Hidden Input control
    CartPostControlId = GetCartPostHiddenInputControlId(PriceOptionGroupId);

    if (CartPostControlId != "")
        return CartPostControlId;

    //  ... Step 2  Get Id from ML Combo Box control
    return GetCartPostComboBoxControlId(PriceOptionGroupId);
}


// Function used to submit the form and price data to Cart/Basket
function DoCartAction(CartPostType, CartPostValue) 
{
    //alert(CartPostType + " - " + CartPostValue);
    var objform = document.forms[0];
    var objItemObject = document.getElementById("selectedItem");

    if ((CartPostType == "MetaPlanCode") || (CartPostType == "StaticPriceId")) 
    {
        objItemObject.value = CartPostValue;
        //alert(LegacyCartUrl);
        if (CartPostValue.indexOf("product_key='") > 0) {
            var pkValue = CartPostValue.substring(CartPostValue.indexOf("product_key='") + 13, CartPostValue.indexOf("'/>"));            
            if (pkValue.length > 0) {
                LegacyCartUrl = LegacyCartUrl + "?product_key=" + pkValue;
            }
        }
		objform.action = LegacyCartUrl;
        objform.method = "post"; 
	    objform.submit();
        return true;
    }
    else if (CartPostType == "CartUrl") 
    {
        window.location.href = CartPostValue;
        return false;
    }
    else if (CartPostType == "ExternalUrl") 
    {
        window.open(CartPostValue, "newWindow");
        return false;
    }

    return false;
}

// Function used to retrieve Cart Post Type
function GetCartPostType(sourceObject) 
{
    var oAttrCartPostType = sourceObject.attributes.getNamedItem("CartPostType");
    if (oAttrCartPostType)
        return oAttrCartPostType.value;

    return "";
}


// Function used to retrieve Cart Post Id
function GetCartPostId(sourceObject) 
{
    var oAttribute = sourceObject.attributes.getNamedItem("CartPostId");
    if (oAttribute)
        return oAttribute.value;

    return "";
}



// ******************************************************************************************************************************************************************************
//          Private Methods (Hidden Input Control Methods)
// ******************************************************************************************************************************************************************************
// Private Function used to retrieve the CartPost hidden Control Id if available
function GetCartPostHiddenInputControlId(PriceOptionGroupId) 
{
    var PriceOptionGroupObj = document.getElementById(PriceOptionGroupId);
    if (PriceOptionGroupObj) 
    {
        //  ... Hidden Input Control List
        var ArrayOfHiddenInputControlList = PriceOptionGroupObj.getElementsByTagName("input");

        //  ... Iterate throught the Hidden Input Control Collection
        //  ... Identify the Hidden control with "CartPost" attribute value "True"
        var iCounter = 0;
        for (iCounter = 0; iCounter < ArrayOfHiddenInputControlList.length; iCounter++) 
        {
            var objHiddenInputControl = ArrayOfHiddenInputControlList[iCounter];
            //  ... objHiddenInputControl Exist?
            if (objHiddenInputControl) 
            {
                //  ... objHiddenInputControl Is hidden control?
                if (objHiddenInputControl.type == "hidden") 
                {
                    //  ... objHiddenInputControl has  "CartPost" has attribute
                    var oAttrCartPost = objHiddenInputControl.attributes.getNamedItem("CartPost");
                    if (oAttrCartPost) 
                    {
                        if (oAttrCartPost.value) 
                            return objHiddenInputControl.id;
                    }
                }
            }
        }
    }
    return "";
}

// Function used to Fetch Cart Post Data from Hidden Input control and perform Cart post action
function HiddenInputControlCartPost(HiddenInputControl) 
{
    var CartPostValue = "";
    var CartPostType = "";

    //  ... Get Cart Post Value
    CartPostValue = HiddenInputControl.value;

    //  ... Get Cart Post Type
    CartPostType = GetCartPostType(HiddenInputControl);

    if ((CartPostValue == "") || (CartPostType == ""))
        return false;


    return DoCartAction(CartPostType, CartPostValue);
}



// ******************************************************************************************************************************************************************************
//          Private Methods (ML Combo Box Control Methods)
// ******************************************************************************************************************************************************************************
// Private Function used to retrieve the CartPost Combo box Control Id if available
function GetCartPostComboBoxControlId(PriceOptionGroupId) 
{

    var PriceOptionGroupObj = document.getElementById(PriceOptionGroupId);

    if (PriceOptionGroupObj) 
    {
        //  ... Multi License Combo Box Control List
        var ArrayOfComboBoxControlList = PriceOptionGroupObj.getElementsByTagName("select");

        //  ... Iterate throught the Combo Box Control Collection
        //  ... Identify the control with "CartPost" attribute value "True"
        var iCounter = 0;
        for (iCounter = 0; iCounter < ArrayOfComboBoxControlList.length; iCounter++) 
        {
            var objComboBoxControl = ArrayOfComboBoxControlList[iCounter];
            //  ... objComboBox Exist?
            if (objComboBoxControl) 
            {
                //objComboBox Is Combo Box control?
                if (objComboBoxControl.tagName == "SELECT") 
                {
                    var oAttrCartPost = objComboBoxControl.attributes.getNamedItem("CartPost");
                    if (oAttrCartPost) 
                    {
                        if (oAttrCartPost.value) 
                            return objComboBoxControl.id;
                    }
                }
            }
        }
    }
    return "";
}

// Function used to Fetch Cart Post Data from Hidden Input control and perform Cart post action
function ComboBoxControlCartPost(ComboBoxControl) 
{
    var CartPostValue = "";
    var CartPostType = "";

    //  ... Find Selected Item Index
    var iSelectedIndex = ComboBoxControl.selectedIndex;
    if (iSelectedIndex == -1)
        iSelectedIndex = 0;

    //  ... Get Combo Box Selected Item
    var selectedMLOptionItem = ComboBoxControl.options[iSelectedIndex];

    //  ... Get Cart Post Value
    CartPostValue = selectedMLOptionItem.value;

    //  ... Get Cart Post Type
    CartPostType = GetCartPostType(selectedMLOptionItem);

    if ((CartPostValue == "") || (CartPostType == ""))
        return false;

    //alert(CartPostType + " - " + CartPostValue);
    return DoCartAction(CartPostType, CartPostValue);
}




