﻿
(function($) {
    $.fn.addControl = function(control) {
        settings = $.extend({
            control: "<input type='text' name='items' />"
        }, {
            control: control
        });

        return this.each(function() {
            var self = this;

            var listItem = $("<li />");
            listItem.append(control);

            var removeButton = $("<a href='javascript:void();' class='deemphasize'>remove</a>");
            removeButton.click(function() {
                listItem.remove();
                return false;
            });
            listItem.append("&nbsp;");
            listItem.append(removeButton);

            $(self).append(listItem);
        });
    };
})(jQuery);



(function($) {
    function createAddressControl(index, addressTypes, address) {
        var txtBox = $("<input type='text' name='addresses[" + index + "]' style='width:30em' />");

        if (address) {
            txtBox.val(address.Value);
        }

        var selectBox = $("<select name='addressTypes[" + index + "]' />");
        $.each(addressTypes, function(i, addrType) {
            var optionElement = $("<option>" + addrType + "</option>");
            if (address && address.Type == addrType) {
                optionElement.attr("selected", "selected");
            }
            selectBox.append(optionElement);
        });

        var divElement = $("<div style='display:inline' />");
        divElement.append(txtBox);
        divElement.append("&nbsp;");
        divElement.append(selectBox);
        return divElement;
    }

    $.fn.addressEditor = function(addButton, addressTypes, addresses) {
        return this.each(function() {
            var self = this;

            var index = 0;
            $(addButton).click(function() {
                $(self).addControl(createAddressControl(index, addressTypes));
                index++;
                return false;
            });

            if (addresses.length < 1) {
                $(self).addControl(createAddressControl(index, addressTypes));
                index++;
            } else {
                $.each(addresses, function(i, addr) {
                    $(self).addControl(createAddressControl(index, addressTypes, addr));
                    index++;
                });
            }
        });
    };
})(jQuery);



(function($) {
    function createPhoneNumberControl(index, phoneNumberTypes, number) {
        var txtBox = $("<input type='text' name='phoneNumbers[" + index + "]' />");

        if (number) {
            txtBox.val(number.Value);
        }

        var selectBox = $("<select name='phoneNumberTypes[" + index + "]' />");
        $.each(phoneNumberTypes, function(i, phoneType) {
            var optionElement = $("<option>" + phoneType + "</option>");
            if (number && number.Type == phoneType) {
                optionElement.attr("selected", "selected");
            }
            selectBox.append(optionElement);
        });

        var divElement = $("<div style='display:inline' />");
        divElement.append(txtBox);
        divElement.append("&nbsp;");
        divElement.append(selectBox);
        return divElement;
    }

    $.fn.phoneNumberEditor = function(addButton, phoneNumberTypes, phoneNumbers) {
        return this.each(function() {
            var self = this;

            var index = 0;
            $(addButton).click(function() {
                $(self).addControl(createPhoneNumberControl(index, phoneNumberTypes));
                index++;
                return false;
            });

            if (phoneNumbers.length < 1) {
                $(self).addControl(createPhoneNumberControl(index, phoneNumberTypes));
                index++;
            } else {
                $.each(phoneNumbers, function(i, number) {
                    $(self).addControl(createPhoneNumberControl(index, phoneNumberTypes, number));
                    index++;
                });
            }
        });
    };
})(jQuery);


(function($) {
    function createCountyControl(index, county) {
        var txtBox = $("<input type='text' name='countyNames[" + index + "]' />");
        if (county) {
            txtBox.val(county);
        }
        return txtBox;
    }

    $.fn.countyEditor = function(addButton) {
        return this.each(function() {
            var self = this;

            var index = 0;
            $(addButton).click(function() {
                $(self).addControl(createCountyControl(index));
                index++;
                return false;
            });

            $("li", this).each(function(i) {
                $(self).addControl(createCountyControl(index, $(this).html()));
                $(this).remove();
                index++;
            });

            if ($("li", this).length < 1) {
                $(self).addControl(createCountyControl(index));
                index++;
            }
        });
    };
})(jQuery);