//Заполнение реквизитов банка из классификатора по БИК
function bik2params(bik_id, fields_to_fill) {
	
	var url = '/nb/request/bik2params';
	
	$.getJSON(
		url,
		{
			bik: $("#"+bik_id).val(),
			fields_to_fill: fields_to_fill
		},
		onAjaxSuccessSetFields
	);
}

function onAjaxSuccessSetFields(data)
{
	// Здесь мы получаем данные, отправленные сервером
	for (i in data) { $("#"+i).val(data[i]) };
}


function onClientSaveSuccess(response) {
	// Здесь мы получаем результат сохранения контрагента от сервера

	if (response.result_type=="1") {
		//новый контрагент
		if (response.result==true) {
			alert('Контрагент успешно создан.');
		} else {
			alert('Невозможно создать контрагента.');
		};	

	} else if (response.result_type=="2") {
		if (response.result==true) {
			alert('Реквизиты контрагента успешно обновлены.');
		} else {
			alert('Невозможно обновить реквизиты контрагента.');
		};	
	} else if (response.result_type=="3") {
		alert('Невозможно сохранить контрагента. Проверьте справочник.');
	} else if (response.result_type=="0") {
		alert('Функция доступна только пользователям пакета "Бизнес Плюс".');
	};
	
}

function save_client(fields_to_fill) {
	//Функция переданные реквизиты контрагента в базе данных
	
	var url = '/nb/request/save_client';

	var values={};
	
	//обрабатываем строку параметров вида: имя_поля_ввода1=реквизит_справочника1, имя_поля_ввода2=реквизит_справочника2...
	var params = fields_to_fill.split(',');
	for (i=0; i<params.length; i++) {
		var pair = params[i].split('=');
		
		if (pair.length!=2) {
			continue;
		};
		
		//создаем словарь вида реквизит_справочника:новое_значение... для передачи серверу
		var key=pair[1];
		var value=$("#"+pair[0].replace(" ", "")).val();
		values[key]=value;
		
	};

	$.getJSON(url, values, onClientSaveSuccess);

}

function get_client_params(form_param, param, fields_to_fill) {
	//Функция получает параметры контрагента (или контрагентов) по переданному полю для поиска
	//form_param - имя поля ввода формы, в котором содержится строка для поиска
	//param - имя реквизита справочника, по которому ищем в базе данных
	
	var url = '/nb/request/client_params';
	
	if (param=="id") {
		value = form_param;
	}	else {
		value = $("#"+form_param).val();
	};

	$.getJSON(
		url,
		{
			param: param,
			value: value,
			fields_to_fill: fields_to_fill
		},
		onGetClientSuccess
	);
}

function set_fields(pos, fields_to_fill) {
	//Функция устанавливает реквизиты выбранного в диалоге контрагента в соответствующие поля ввода в форме

	var y = $('#popUpDiv')
	get_client_params(pos, 'id', fields_to_fill);
	
	y.empty();
	y.hide();
	return false;
}


var popUpElement = {
	//Элемент, который управляет выбором контрагента для подстановки в форму

    clientsPerPage: 5, // число контрагентов на странице
    selectedPage: 0, // выбранная страница
 	totalPages: 0, // всего страниц с данными
    totalClients: 0, // число контрагентов, которых вернул запрос
	data: new Array(), //данные, полученные от сервера
	init: function () {
		//Функция инициализирует всплывающее окошко
		$('<div id="popUpDiv"></div>').appendTo("body");
		var x = $('input.clientSelectInput');
		var y = $('#popUpDiv');
		x.click( function () {
			popUpElement.input = $(this);
			y.hide();
			setPos(this, y); // setPos(targetObj,moveObj)
			get_client_params(popUpElement.input.attr('form_param'), popUpElement.input.attr('param'), popUpElement.input.attr('fields_to_fill'));
			return false;
		});
    }, // end init function
    drawPopUp: function () {
		//Функция перерисовывает всплывающее окошко
		var quo = "'";
		var quo2 = '"';
		html = '<a id="closePopUp">ЗАКРЫТЬ</a>';
		html += '<table cellpadding="0" cellspacing="0" id="clientsTable" >';
		html += '<tr class="header">';
		html += '<td colspan="3" align="left">Подбор контрагента</td>';
		html += '</tr>';
		html += '<tr>';
		html += '	<td align="left" ><a class="navigation" id="prevPage"> < </a></td>';
		html += '	<td align="center">Страница '+popUpElement.selectedPage+' из '+popUpElement.totalPages+'</td>';
		html += '	<td align="right"><a class="navigation" id="nextPage"> > </a></td>';
		html += '</tr>';

		var counter=1;
		for (i in popUpElement.data) { 
			
			//выводим только контрагентов, которые соответствуют текущей выбранной странице
			if (Math.ceil((counter)/popUpElement.clientsPerPage)!=popUpElement.selectedPage) {
				counter++;
				continue;
			};
		
			//генерируем HTML
			id_param = quo+popUpElement.data[i]+quo;
			fields_param = quo+popUpElement.fields_to_fill+quo;
			html += '	<tr><td colspan="3" align="left"><a class="clientSelect" onclick='+quo2+'set_fields(';
			html += id_param+',';
			html += fields_param ;
			html +=')'+quo2+';>'+(counter)+'.'+i+'</a></td></tr>' ;
			counter++;
		};
		
		html += '</table>';

		//показываем всплывающее окошко
        var popUpDiv = $('#popUpDiv');
		popUpDiv.empty().append(html).show();

		//закрываем всплывающее окошко, если щелкнули куда-нибудь еще
		$('input').focus( function () {
			popUpDiv.hide();
			return false;
		});

        //закрываем всплывающее окошко
        $('#closePopUp').click( function () {
            popUpDiv.hide();
        });
	
        //выбор следующей страницы
		$('#nextPage').click( function () {
			if (popUpElement.selectedPage < popUpElement.totalPages) {
				popUpElement.selectedPage++;
			};
			popUpElement.drawPopUp(); 
		});

        //выбор предыдущей страницы
		$('#prevPage').click( function () {
			if (popUpElement.selectedPage > 1) {
				popUpElement.selectedPage--;
			};
			popUpElement.drawPopUp(); 
		});

    } // end drawPopUp function

};

// инициализация подбора контрагентов
$(document).ready(function(){
   popUpElement.init();
});

/* Position Functions */
function setPos(targetObj,moveObj) {
    var coors = findPos(targetObj);
    moveObj.css('position','absolute');
    moveObj.css('top',coors[1]+18+'px');
    moveObj.css('left',coors[0]+'px');
}

function findPos(obj) {
    var curleft = curtop = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft;
        curtop = obj.offsetTop;
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        };
    };
    return [curleft,curtop];
}

function onGetClientSuccess(response) {
	// Здесь мы получаем от сервера реквизиты контрагента (контрагентов, если условие поиска удовлетворяет нескольким)

	if (response.result_type=="1") {
		for (i in response.data) { $("#"+i).val(response.data[i]) };
	}	else if (response.result_type=="2") {
		popUpElement.totalClients = response.count;
		popUpElement.selectedPage = 1;
		popUpElement.totalPages = Math.ceil(popUpElement.totalClients/popUpElement.clientsPerPage);

		popUpElement.fields_to_fill = response.fields_to_fill;
		popUpElement.data = new Array();

		//копируем полученные от сервера параметры в свойство всплывающего окошка popUpElement
		for (i in response.data) {
			popUpElement.data[i]=response.data[i];
		};
		
		popUpElement.drawPopUp();
	}	else if (response.result_type=="0") {
		alert('По запросу '+'"'+response.request+'"'+' ничего не найдено.');
	}	else if (response.result_type=="-1") {
		alert('В справочнике нет ни одного контрагента.');
	}	else if (response.result_type=="-2") {
		alert('Функция доступна только пользователям пакета "Бизнес Плюс".');
	};
		
}

//Заполнение реквизитов организации по ИНН
function inn2params(url, inn_id, company_id, address_id, kpp_id) {
	
	var inn = $("#"+inn_id).val()

	// проверяем инн на корректность
	if (!is_valid_inn(inn)){
		alert('Некоректный ИНН');
		return false;
	}

	$.getJSON(
		url + '/request/inn2params?inn=' + inn + '&jsoncallback=?',
		function(data) {
			$("#"+address_id).val(data.address);
			$("#"+kpp_id).val(data.kpp);
			$("#"+kpp_id).val(data.kpp);
			$("#"+company_id).val(data.company);
		}
	);
	

}

// Функция для проверки правильности ИНН
function is_valid_inn(i)
{

    if (i.length == 0) return false;
    if ( i.match(/\D/) ) return false;
    
    var inn = i.match(/(\d)/g);
    
    if ( inn.length == 10 )
    {
        return inn[9] == String(((
            2*inn[0] + 4*inn[1] + 10*inn[2] + 
            3*inn[3] + 5*inn[4] +  9*inn[5] + 
            4*inn[6] + 6*inn[7] +  8*inn[8]
        ) % 11) % 10);
    }
    else if ( inn.length == 12 )
    {
        return inn[10] == String(((
             7*inn[0] + 2*inn[1] + 4*inn[2] +
            10*inn[3] + 3*inn[4] + 5*inn[5] +
             9*inn[6] + 4*inn[7] + 6*inn[8] +
             8*inn[9]
        ) % 11) % 10) && inn[11] == String(((
            3*inn[0] +  7*inn[1] + 2*inn[2] +
            4*inn[3] + 10*inn[4] + 3*inn[5] +
            5*inn[6] +  9*inn[7] + 4*inn[8] +
            6*inn[9] +  8*inn[10]
        ) % 11) % 10);
    }
    
    return false;
}



