﻿var nextProductNumber = 0;
var totalProductCount = 0;
var totalCost = 0;
var products = new Array();
var alwaysAddProduct = false;


function initSearch(includeProductSelector) {

    $.validator.addMethod("applicantAge", function (value) {
        var toCheck = new Date();
        toCheck.setFullYear(toCheck.getFullYear() - 16);
        return new Date(value).getTime() - toCheck.getTime() < 0;
    }, 'Search applicant must be at least 16 years of age.');

    $("#searchForm").validate({
        rules: {
            firstname: {
                required: true,
                textOnly: true,
                minlength: 2,
                maxlength: 25
            },
            lastname: {
                required: true,
                textOnly: true,
                minlength: 2,
                maxlength: 25
            },
            dob: {
                required: true,
                validDate: true,
                applicantAge: true
            },
            ssn: {
                required: true
            }
        },
        messages: {
            firstname: {
                required: "Please provide a first name",
                textOnly: "Only letters are allowed in this field",
                minlength: "Name must be at least 2 characters in length",
                maxlength: "Name cannot exceed 25 characters in length"
            },
            lastname: {
                required: "Please provide a last name",
                textOnly: "Only letters are allowed in this field",
                minlength: "Name must be at least 2 characters in length",
                maxlength: "Name cannot exceed 25 characters in length"
            },
            dob: {
                required: "Please provide a date of birth",
                date: "Please enter a valid date"
            },
            ssn: {
                required: "Please provide a SSN"
            }
        },
        errorElement: "div",
        errorPlacement: function (error, element) {
            element.qtip({
                content: error,
                show: { ready: true, effect: { type: 'fade', length: 500} },
                hide: { when: false },
                position: { corner: { target: 'rightMiddle', tooltip: 'leftMiddle'} },
                style: {
                    name: 'red',
                    tip: { corner: 'leftMiddle' },
                    border: {
                        width: 2,
                        radius: 4,
                        color: '#c50009'
                    },
                    background: '#c50009',
                    color: '#fff'
                }
            });
        },
        success: function (label) {
            $('div.qtip:has(div.error[htmlfor=' + label.attr('htmlfor') + '])').each(function (i) { $(this).remove(); });
        }
    });
    
    if ($('#ApplicantId').val() == '00000000-0000-0000-0000-000000000000' && includeProductSelector == "True") {
        AddProduct();
    }
    CalculateTotalCost();
}

function GetFirstLevelSearchItems(productNumber) {
    StartLoading();
    $.ajax(
    {
        type: "POST",
        url: rootURL + "Product/GetFirstLevelSearchItems/",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(result) {
            products[productNumber] = new Array();
            products[productNumber][0] = result;
            GenerateSelect(productNumber, result, 0);
            StopLoading();
        },
        error: function() {
            StopLoading();
        }
    });
}

function GetNextLevelSearchItems(productNumber, level) {
    
    var selectedProduct = $('#cboProducts' + (level - 1) + productNumber).val();
    $('#description' + (level - 1) + productNumber).html(GetDescription(selectedProduct));
    $('#timeframe' + productNumber).html(GetTimeframe(selectedProduct));

    ClearProducts(productNumber, level);
    
    StartLoading();
    $.ajax(
    {
        type: "POST",
        url: rootURL + "Product/GetNextLevelSearchItems/" + selectedProduct,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "{}",
        success: function (result) {
            StopLoading();
            if (result.length > 0) {
                products[productNumber][level] = result;
                GenerateSelect(productNumber, result, level);
                if (result.length == 1) {
                    AddToSelectedProducts(result[0].ProductId, productNumber);
                }
                else if (alwaysAddProduct) {
                    AddToSelectedProducts(selectedProduct, productNumber);
                }
            }
            else
                AddToSelectedProducts(selectedProduct, productNumber);
        },
        error: function () {
            StopLoading();
        }
    });
}

function GenerateSelect(productNumber, items, level) {
    var strSelect = "";
    var dropDownName = "cboProducts" + level + productNumber;
   
    strSelect = "<select class='searchsel' id='" + dropDownName + "' name='" + dropDownName + "' onchange='GetNextLevelSearchItems(" + productNumber + "," + (level + 1) + ");'";
    strSelect += "><option value='00000000-0000-0000-0000-000000000000'> -- Select -- </option>";

    for (i = 0; i < items.length; i++)
        strSelect += "<option value='" + items[i].ProductId + "'>" + (level == 0 ? items[i].ComponentDescription : items[i].DataSourceDescription) + "</option>";

    $('#divLevel' + level + productNumber).html(strSelect);
   
}

function AddProduct() {

    var str = "";

    str += "<div class='productAddContainer' id='product" + nextProductNumber + "'>";
    str += "<table width='100%' border='0' cellspacing='2' cellpadding='0'>";
    str += "<tr><td ><div id='divLevel0" + nextProductNumber + "'></div></td><td></td><td align='right'><div class='btn3' id='removeSearch' name='removeSearch' onclick='RemoveProduct(" + nextProductNumber + ")' >Remove</div></td></tr>";
    str += "<tr><td ><div id='divLevel1" + nextProductNumber + "'></div></td><td style='font-weight:bold;display:none;' class='productDetails'>Timeframe:</td><td id = 'timeframe" + nextProductNumber + "' class='productDetails'></td></tr>";
    str += "<tr><td ><div id='divLevel2" + nextProductNumber + "'></div></td><td style='font-weight:bold;display:none;' class='productDetails'>Cost:</td><td class='productDetails'><span class='productCost' id='prodcost_" + nextProductNumber + "' /></td></tr>";
    str += "<tr><td ><input type='hidden' name='prod_" + nextProductNumber + "' id='prod_" + nextProductNumber + "' value=' ' /><input type='hidden' name='prodName_" + nextProductNumber + "' id='prodName_" + nextProductNumber + "' value=' ' /></td><td></td></tr>";
    str += "</table>";
    str += "<div class='productDetails' style='display:none;' id='proddesc_" + nextProductNumber + "'></div></div>";
   // alert('adding ' + str);
    $('#searchTypePlace').prepend(str);
    $('#product' + nextProductNumber).slideToggle();
    GetFirstLevelSearchItems(nextProductNumber);
    nextProductNumber++;
    totalProductCount++;
}

function GetProductName(id) {
    if (id == '00000000-0000-0000-0000-000000000000')
        return '';
    for (i = 0; i < products.length; i++) {
        if (products[i] != undefined) {
            for (j = 0; j < products[i].length; j++)
                for (n = 0; n < products[i][j].length; n++) {
                if (products[i][j][n].ProductId == id) {
                    return products[i][j][n].DataSourceDescription;
                }
            }
        }
    }
}

function GetDescription(id) {
    if (id == '00000000-0000-0000-0000-000000000000')
        return '';
    for (i = 0; i < products.length; i++) {
        if (products[i] != undefined) {
            for (j = 0; j < products[i].length; j++)
                for (n = 0; n < products[i][j].length; n++) {
                if (products[i][j][n].ProductId == id) {
                    return products[i][j][n].ComponentDescription;
                }
            }
        }
    }
}

function GetTimeframe(id) {
    if (id == '00000000-0000-0000-0000-000000000000')
        return '';

    for (i = 0; i < products.length; i++) {
        if (products[i] != undefined) {
            for (j = 0; j < products[i].length; j++)
                for (n = 0; n < products[i][j].length; n++) {
                if (products[i][j][n].ProductId == id) {
                    var timeFrameDesc = products[i][j][n].TimeframeDescription;
                    return timeFrameDesc;
                }
            }
        }
    }
}

function GetCost2(id, productNumber) {
    var updateUrl = rootURL + "Product/GetCost/" + id;

    $.getJSON(updateUrl, function(data) {
        $('#prodcost_' + productNumber).html(CurrencyFormatted(data.price));
    });
}

function GetCost(id) {
    for (i = 0; i < products.length; i++) {
        if (products[i] != undefined) {
            for (j = 0; j < products[i].length; j++)
                for (n = 0; n < products[i][j].length; n++) {
                if (products[i][j][n].ProductId == id) {
                    return products[i][j][n].Cost;
                }
            }
        }
    }
}

function ClearProducts(productNumber, level) {
    for (i = level; i < 3; i++) {
        $('#divLevel' + i + productNumber).html('');
        $('#description' + (i) + productNumber).html('');
    }
    $('#proddesc_' + productNumber).hide();

    $('#prod_' + productNumber).val('');
    $('#prodcost_' + productNumber).html('');
    $('#timeframe' + productNumber).html('');
    $('#proddesc_' + productNumber).html('');
    $('#product' + productNumber + ' .productDetails').hide();

    CalculateTotalCost();
}
function AddToSelectedProducts(id, productNumber) {
    var getCostUrl = rootURL + "Product/GetCost/" + id;
    $.getJSON(getCostUrl, function(data) {
        $('#prodcost_' + productNumber).html(CurrencyFormatted(data.price));
        CalculateTotalCost();
    });
    $('#prod_' + productNumber).val(id);
    $('#prodName_' + productNumber).val(GetProductName(id));
    $('#timeframe' + productNumber).html(GetTimeframe(id));
    $('#proddesc_' + productNumber).html('<strong>Description:</strong> ' + GetDescription(id));
    $('#product' + productNumber + ' .productDetails').show();
}

function AddFavoriteSearchToApplicant() {
    StartLoading();
    $.ajax(
    {
        type: "POST",
        url: rootURL + "Search/GetFavoriteSearchProducts/" + $('#ddFavSearch').val(),
        success: function(html) {
            StopLoading();
            $('#searchTypePlace').prepend(html);
        },
        error: function() {
            StopLoading();
        }
    });
}

function CurrencyFormatted(amount) {
    var i = parseFloat(amount);
    if (isNaN(i)) { i = 0.00; }
    var minus = '';
    if (i < 0) { minus = '-'; }
    i = Math.abs(i);
    i = parseInt((i + .005) * 100);
    i = i / 100;
    s = new String(i);
    if (s.indexOf('.') < 0) { s += '.00'; }
    if (s.indexOf('.') == (s.length - 2)) { s += '0'; }
    s = minus + s;
    return s;
}

function CalculateTotalCost() {
    totalCost = 0;
    $(".productCost").each(function() {
        totalCost += parseFloat($(this).text());
    });
    $('#costPlace').html('<strong>Total Cost:  $ ' + CurrencyFormatted(totalCost) + '</strong>');
} 

function RemoveProduct(number) {
    var productPlace = document.getElementById('searchTypePlace');
    var productDiv = document.getElementById('product' + number);
    $('#product' + number).slideFadeToggle(function() {
        productPlace.removeChild(productDiv);
        delete products[number];
        totalProductCount--;
        CalculateTotalCost();
        UpdateMessageCenter("Product removed from search");
    });
}



function afterSearchApplicantAdded(includeProductSelector) {
    initCart();
    $.get(rootURL + "Search/Create/", 
        function(html) {
            $('#divSearchContainer').html(html);
            initSearch(includeProductSelector);
        }
    );
}

function validateOrderSearch() {
    if ($("#searchForm").validate().form()) {
        return true;
    }
    else {
        return false;
    }
}

function OrderSearch() {
    $.ajax({
        type: "POST",
        data: $('#searchForm').serialize(),
        url: orderSearchUrl,
        success: function (html) {
            StopLoading();
            if (checkoutUrl != null && checkoutUrl != '') {
                window.location = checkoutUrl;
            }
        },
        error: function (msg) {
            StopLoading();
            UpdateMessageCenter(msg);
        }
    });
}
