﻿//Список всех элементов для выбора автомобилей
var CarSelects=new Array();

//Регистрация нового элемента для выбора автомобиля
function RegisterCarSelect(prefix)
{
    var tmp=new CarSelect(prefix);
    CarSelects[CarSelects.length]=tmp;
    //tmp.Init(initDate);
}

//Поиск соответствующего элемента для выбора автомобиля по указанному DOM-элементу (по указанному <select>)
function FindCarSelect(select)
{
    for (var i=0;i<CarSelects.length;i++)
    {
        var tmp=CarSelects[i];
        if (tmp.MarkSelect==select
            || tmp.ModelSelect==select
            || tmp.YearSelect==select
            || tmp.EngineSelect==select)
        {
            return tmp; 
        }
    }
    return;
}

//Поиск соответствующего элемента для выбора автомобиля по имени (префиксу)
function FindCarSelectByName(prefix)
{
    for (var i=0;i<CarSelects.length;i++)
    {
        var tmp=CarSelects[i];
        if (tmp.Name==prefix)
        {
            return tmp; 
        }
    }
    return;
}

//Конструктор элемента для выбора автомобиля
function CarSelect(prefix)
{
    this.Name=prefix;
    //<select> с выбором марки
    this.MarkSelect=document.getElementById(prefix+"_id_mark");
    //<select> с выбором модели
    this.ModelSelect=document.getElementById(prefix+"_id_model");;
    //<select> с выбором годов
    this.YearSelect=document.getElementById(prefix+"_year");
    //<select> с выбором двигателей
    this.EngineSelect=document.getElementById(prefix+"_engine");
    //текстовое поля для пользовательского двигателя
    this.OtherEngine=document.getElementById(prefix+"_other_engine");
    return this;
}

//Замораживание всех элементов
CarSelect.prototype.Disable = function()
{
	this.MarkSelect.disabled=true;
	this.ModelSelect.disabled=true;
	this.YearSelect.disabled=true;
	if (this.EngineSelect)
	{
	    this.EngineSelect.disabled=true;
	    this.OtherEngine.disabled=true;
	}
}

//Запрос к серверу
function DoRequest(select)
{
    var cs=FindCarSelect(select);
    if (cs)
    {
        cs.Disable();
        var arg=cs.Name+"||"+cs.MarkSelect.value+"||";
        if (select==cs.MarkSelect)
        {
            //Изменилась марка
            arg+="0||0";
        } else {
            arg+=cs.ModelSelect.value+"||";
            if (select==cs.ModelSelect)
            {
                //Изменилась модель
                arg+="0";    
            } else {
                //Изменился год
                arg+=cs.YearSelect.value;
            }
        }
        //Функция должна называться CallServer
        CallServer(arg, 0);
    }    
}

//Проверка на корректность введенных данных
function CheckData(prefix)
{
    var cs=FindCarSelectByName(prefix);
    if (cs)
    {
        if (cs.MarkSelect.selectedIndex==0)
        {
            alert("Пожалуйста выберите марку автомобиля");
            return false;
        }
        if (cs.ModelSelect.selectedIndex==0)
        {
            alert("Пожалуйста выберите модель автомобиля");
            return false;
        }
        if (cs.YearSelect.selectedIndex==0)
        {
            alert("Пожалуйста введите год выпуска автомобиля");
            return false;
        }
        if (cs.EngineSelect)
        {
            if (cs.EngineSelect.selectedIndex==0)
            {
                alert("Пожалуйста выберите или укажите объем двигателя автомобиля");
                return false;
            }
            if (cs.EngineSelect.value=="-100" && cs.OtherEngine.value=="")
            {
                alert("Пожалуйста укажите объем двигателя автомобиля");
                return false;
            }
        }
        return true;
    } else {
        return false;
    }
}

//Пролучение данных от сервера
function ReceiveServerData(arg, context)
{
	var arg_pair=arg.split("||");
	if (arg_pair && arg_pair.length>=4)
	{
	    var cs=FindCarSelectByName(arg_pair[0]);
        if (cs)
        {
            var id_mark=parseInt(arg_pair[1]);
            if (id_mark==0)
            {
                ClearSelect(cs.ModelSelect,1);
                ClearSelect(cs.YearSelect,1);
	            if (cs.EngineSelect)
                {
	                ClearSelect(cs.EngineSelect,1);
	                RefreshOtherEngine(cs.EngineSelect);
	            }
                
            } else {
                if (arg_pair.length==5)
	            {
		            var id_model=parseInt(arg_pair[2]);
		            var num_year=parseInt(arg_pair[3]);
                    var items=arg_pair[4].split("|");
                    if (items && items.length>1 && (items.length % 2 ==0))
	    	        {
	    	            if (num_year>0)
			            {
			                if (cs.EngineSelect)
			                {
				                ClearSelect(cs.EngineSelect,1);
				                RefreshOtherEngine(cs.EngineSelect);
				                FillSelect(cs.EngineSelect, items);
				            }
				            cs.ModelSelect.disabled=false;
				            cs.YearSelect.disabled=false;
				            if (cs.EngineSelect)
				            {
				                cs.EngineSelect.disabled=false;
				                cs.OtherEngine.disabled=false;
				            }
			            } else {
				            if (id_model>0)
				            {
					            ClearSelect(cs.YearSelect,1);
					            if (cs.EngineSelect)
			                    {
					                ClearSelect(cs.EngineSelect,1);
					                RefreshOtherEngine(cs.EngineSelect);
					            }
					            FillSelect(cs.YearSelect, items);
					            cs.ModelSelect.disabled=false;
					            cs.YearSelect.disabled=false;
				            } else {
					            if (id_mark>0)
					            {
						            ClearSelect(cs.ModelSelect,1);
						            ClearSelect(cs.YearSelect,1);
						            if (cs.EngineSelect)
			                        {
						                ClearSelect(cs.EngineSelect,1);
						                RefreshOtherEngine(cs.EngineSelect);
						            }
						            FillSelect(cs.ModelSelect, items);
						            cs.ModelSelect.disabled=false;
					            }
				            }
			            }
	    	        } else {
	    	            alert("Произошла непредвиденная ошибка. Пожалуйста повторите операцию позднее");
	    	        }
	    	    } else {
	                alert("Произошла непредвиденная ошибка. Пожалуйста повторите операцию позднее");
	            }
	    	}
	    	cs.MarkSelect.disabled=false;
		}
	} else {
	    alert("Произошла непредвиденная ошибка. Пожалуйста повторите операцию позднее");
	}
}

//Пока/скрытие поля ввода пользовательского двигателя
function RefreshOtherEngine(select)
{
    var cs=FindCarSelect(select);
    if (cs)
    {
        if (cs.EngineSelect)
		{
            if (cs.EngineSelect.style.width.indexOf("px")==-1)
            {
		        cs.EngineSelect.style.width=cs.EngineSelect.offsetWidth+"px";
		        //для FF - чтобы не сужалась колонка при изменении ширины <select>-а с двигателями
		        cs.MarkSelect.style.width=cs.MarkSelect.offsetWidth+"px";
            }
            if (cs.EngineSelect.value=="-100")
            {
                cs.EngineSelect.style.width=(parseInt(cs.EngineSelect.style.width)-parseInt(cs.OtherEngine.style.width)-2)+"px";
                cs.OtherEngine.style.display="inline";
            } 
            else 
            {
                if (cs.OtherEngine.style.display=="inline")
                {
                    cs.EngineSelect.style.width=(parseInt(cs.EngineSelect.style.width)+parseInt(cs.OtherEngine.style.width)+2)+"px";
                    cs.OtherEngine.style.display="none";
                }
            }
        }
    }
}

//Заполнение указанного <select>-а указанными элементами
function FillSelect(select,items)
{
	for (var i=0;i<items.length;i=i+2)
	{
		AddOption(select,items[i],items[i+1]);
	}
	select.selectedIndex=0;
}
