﻿/// <reference path="jquery-1.2.6-vsdoc.js" />

var addButton;
var updateButton;
var cancelButton;

var emailRegex = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;

// start up script
$(function() {
    addButton = $('#addButton');
    updateButton = $('#updateButton');
    cancelButton = $('#cancelButton');

    $('#purchaseDate').attr('readonly', true);

    // wire up events
    addButton.click(addItem);
    updateButton.click(updateItem);
    cancelButton.click(cancelEdit);

    // set class handler
    $('.TextEntry').focus(function() {
        $(this).addClass('highlightTextEntry');
    }).blur(function() {
        $(this).removeClass('highlightTextEntry');
    });

    $('#ctl00_body_country').change(function() {
        if ($(this).val() == "US") {
            $('.fedTax').show();
        } else {
            $('.fedTax').hide();
        }
    });

    // refresh list
    refreshList();
});

function validateForm(sender, args) {
    var errors = new Array();

    if ($('#ctl00_body_franchisee').val().length == 0) {
        errors.push("Client/brand name");
    }

    if ($('#ctl00_body_store').val().length == 0) {
        errors.push("Restaurant #");
    }

    if ($('#ctl00_body_address').val().length == 0) {
        errors.push("Address");
    }

    if ($('#ctl00_body_city').val().length == 0) {
        errors.push("City");
    }

    if ($('#ctl00_body_state').val().length == 0) {
        errors.push("State/province");
    }

    if ($('#ctl00_body_zip').val().length == 0) {
        errors.push("Zip/postal code");
    }

    if ($('#ctl00_body_country').val().length == 0) {
        errors.push("Country");
    }

    if ($('#ctl00_body_company').val().length == 0) {
        errors.push("Company");
    }

    if ($('#ctl00_body_owner').val().length == 0) {
        errors.push("Name and title");
    }

    if ($('#ctl00_body_phone').val().length == 0) {
        errors.push("Phone number");
    }

    if ($('#ctl00_body_fax').val().length == 0) {
        errors.push("Fax number");
    }

    if ($('#ctl00_body_email').val().length == 0) {
        errors.push("E-mail address");
    } else if (!($('#ctl00_body_email').val().match(emailRegex))) {
        errors.push("Invaliad e-mail address");
    }

    if (
        $('#ctl00_body_country').val() == "US" &&
        $('#ctl00_body_federalTaxId').val().length == 0
        ) {
        errors.push("Federal tax number");
    }

    if (itemCount() == 0) {
        errors.push("At least one item is required");
    }

    if (errors.length > 0) {
        var message = "The following field(s) are required before submitting:\n";
        $(errors).each(function(index, item) {
            message += "- " + item + "\n";
        });
        showMessage(message);
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
}

function validateItem() {
    var errors = new Array();

    if ($('#detail').val().length == 0) {
        errors.push("Item description");
    }

    if ($('#modelNumber').val().length == 0) {
        errors.push("Model number");
    }

    if ($('#serialNumber').val().length == 0) {
        errors.push("Serial number");
    }

    if ($('#purchaseDate').val().length == 0) {
        errors.push("Purchase date");
    }

    if (errors.length > 0) {
        var message = "The following field(s) are required before adding an item:\n";
        $(errors).each(function(index, item) {
            message += "- " + item + "\n";
        });
        showMessage(message);
        return false;
    } else {
        return true;
    }
}

function showMessage(message) {
    alert(message);
}

function addItem() {
    if (validateItem()) {
        $.ajax({
            type: "POST",
            url: "RequestHandler.aspx",
            data: {
                type: 'add_item',
                description: $('#detail').val(),
                modelNumber: $('#modelNumber').val(),
                serialNumber: $('#serialNumber').val(),
                purchaseDate: $('#purchaseDate').val()
            },
            dataType: "html",
            success: function(value) {
                displayProducts(value);
                clearFields();
                $('#detail').focus();
            },
            error: function(error) { showMessage(error.responseText); }
        });
    }

    return false;
}

function refreshList() {
    $.ajax({
        type: "POST",
        url: "RequestHandler.aspx",
        data: { type: 'refresh_list' },
        dataType: "html",
        success: function(value) { displayProducts(value); },
        error: function(error) { showMessage(error.responseText); }
    });
}

function displayProducts(html) {
    $('#products').hide()
        .html(html)
        .fadeIn();

    $('#lblLineCount').html(itemCount());
}

function editItem(id) {
    $.ajax({
        type: "POST",
        url: "RequestHandler.aspx",
        data: { type: 'get_item', id: id },
        dataType: "json",
        success: function(item) {
            addButton.hide();
            updateButton.fadeIn();
            cancelButton.fadeIn();

            clearFields();

            $('#itemId').val(item.id);
            $('#detail').val(item.description);
            $('#modelNumber').val(item.modelNumber);
            $('#serialNumber').val(item.serialNumber);
            $('#purchaseDate').val(item.purchaseDate);

            $('#detail').focus();
        },
        error: function(error) { showMessage(error); }
    });
}

function clearFields() {
    $('#itemId').val(0);
    $('#detail').val('');
    $('#modelNumber').val('');
    $('#serialNumber').val('');
    $('#purchaseDate').val('');

}

function updateItem() {
    if (validateItem()) {
        $.ajax({
            type: "POST",
            url: "RequestHandler.aspx",
            data: {
                type: 'update_item',
                id: $('#itemId').val(),
                description: $('#detail').val(),
                modelNumber: $('#modelNumber').val(),
                serialNumber: $('#serialNumber').val(),
                purchaseDate: $('#purchaseDate').val()
            },
            dataType: "html",
            success: function(value) {
                displayProducts(value);
                clearFields();
                $('#detail').focus();
                updateButton.hide();
                cancelButton.hide();
                addButton.fadeIn();
            },
            error: function(error) { showMessage(error.responseText); }
        });
    }

    return false;
}

function deleteItem(id) {
    if (confirm('You are about to delete this item.  Are you sure?')) {
        $.ajax({
            type: "POST",
            url: "RequestHandler.aspx",
            data: { type: 'delete_item', id: id },
            dataType: "html",
            success: function(value) {
                displayProducts(value);
                clearFields();
                $('#detail').focus();
                updateButton.hide();
                cancelButton.hide();
                addButton.fadeIn();
            },
            error: function(error) { showMessage(error.responseText); }
        });
    }
}

function cancelEdit() {
    clearFields();
    $('#itemId').val(0);
    updateButton.hide();
    cancelButton.hide();
    addButton.fadeIn();
    $('#detail').focus();
}

function itemCount() {
    var rows = $('#products tr');
    return rows.length;
}
