function getCategoriesChains()
{
    var chains = [];
    $("#mainCategoryHolder").parent().find("p").each(
        function ()
        {
            var c = [];
            $("select", this).each(
                function ()
                {
                    c[c.length] = this.options[0].value;
                }
            );
            if (c.length > 0)
            {
                chains[chains.length] = c;
            }
        }
    );
    return chains;
}

var category = 0;

function addCategory(chain)
{
    chain = chain || [];
    var name = "extraCategories[]";
    var id   = "extraCategories" + category;
    category += 1;

    $("#add_company").append("<input type='hidden' id='" + id +  "' name='" + name + "' />");

    if ( $(":input:hidden[name='extraCategories[]']").get().length >= 2 )
    {
        $("#addExtraCategory *").hide();
    }

    var a = $("<a href='#' title='удалить'>удалить</a>");
    var p = $("<p></p>");
    a.appendTo(p).click(
        function ()
        {
            $(this).parent().remove();
            $("#" + id).remove();
            $("#addExtraCategory *").show();
            return false;
        }
    );

    p.insertBefore(
        $("#extraCategoriesHolder").find("p:last")
    );

    var c = new CategoryControl();

    c.init(p, null, $("#" + id));
    c.setChain(chain);
    return false;
}

function init()
{
    var chains = getCategoriesChains();

    c = new CategoryControl();
    c.init($("#mainCategoryHolder"), null, $("#mainCategory"));
    if ( chains.length > 0 )
    {
        c.setChain(chains[0]);
    }
    else
    {
        c.setChain([]);
    }

    for ( var i = 1; i < chains.length; i++ )
    {
        addCategory(chains[i]);
    };

    $("#city").autocomplete("/ajax/cities/",
        {
            minChars: 0,
            max: 100
        }
    ).change(function (event, data, formatted)
        {
            $("#street_type").val("");
            $("#street_name").val("");
            $("#street").val("");
        }
    );

    $("#street").autocomplete("/ajax/streets/",
        {
            minChars: 0,
            max: 100,
            extraParams: 
                {
                    city: function () { return $("#city").val() }
                },
            formatItem: function (data)
                {
                    return data[1] + ". " + data[0] + ", " +  data[2];
                },
            formatResult: function (data)
                {
                    return data[1] + ". " + data[0];
                }
        }
    ).result(function (event, data, formatted)
        {
            $("#street_type").val(data[1]);
            $("#street_name").val(data[0]);
            $("#city").val(data[2]);
        }
    );

    $("#extra-link").click($.bind(null, addCategory));
    
    $("#add_company").dirty_form();
    $("#add_company").submit(
        function()
        {
            window.onbeforeunload = null;
            return true;
        }
    );
    
    $("textarea[name=description],textarea[name=comment]").autoResize({
        extraSpace : 20,
        limit: 400
    }).change();
    
    initPhoneController();
}

function initPhoneController()
{
	var MAX_COUNT_PHONES = 12;
	
	var phoneCont = $("#phones-cont");
	var phones = $(".phone-number", phoneCont);
	var index = phones.size(); 
	
	$("a.delete-phone", phones).click(onClickDeletePhone);
	$("#add-phone", phoneCont).click(onClickAddPhone);
	$("input.phone-description", phones).SuggestEmptyInput('Описание');
	
	if(phones.size() >= MAX_COUNT_PHONES)
	{
		$(".add-field", phoneCont).hide();
	}

	function onClickDeletePhone(e)
	{
		var clicked = $(e.target);
		var cont = clicked.parent();

		if(	$("input[name$='[id]']", cont).val() == '' )
		{
			cont.remove();
		}
		else
		{
			cont.hide();
			$("input[name$='[delete]']", cont).val(1);
		}
		
		phones = $(".phone-number:visible", phoneCont);
		if(phones.size() == MAX_COUNT_PHONES - 1)
		{
			$(".add-field", phoneCont).show();
		}
		return false;
	}
	
	function onClickAddPhone(e)
	{
		var clicked = $(e.target);
		var cont = clicked.parent();
		
		var newPhone = $('<p class="phone-number"></p>');

		var deleteLink = $('<a class="delete-phone" title="Удалить телефон" href="#delete-phone">удалить</a>');
		deleteLink.click(onClickDeletePhone);
		
		var phoneValueInp = $('<input class="phone-value" type="text" value=""/>');
		phoneValueInp.attr('name', 'phones[' + index + '][value]');

		var phoneDescriptionInp = $('<input class="phone-description" type="text" value=""/>');
		phoneDescriptionInp.attr('name', 'phones[' + index + '][description]');
		phoneDescriptionInp.SuggestEmptyInput('Описание');		
		
		var phoneIdInp = $('<input type="hidden" value=""/>');
		phoneIdInp.attr('name', 'phones[' + index + '][id]');
		
		newPhone.append(deleteLink).append(phoneValueInp).append(phoneDescriptionInp).append(phoneIdInp);
		
		cont.before(newPhone);
		
		index ++;
		
		phones = $(".phone-number:visible", phoneCont);
		if(phones.size() >= MAX_COUNT_PHONES)
		{
			cont.hide();
		}
		return false;
	}
}

window.onbeforeunload = function ()
{
    $(':input:not(:hidden,:submit,:password,:button)', $("#add_company")).blur();
    return $("#add_company").are_dirty() ? "Данные на форме не будут сохранены." : undefined;
}
