function ajax_request_optional(options) {

	var settings = {
		url : '',
		param : '',
		block : '',
		form : '',
		method : 'POST'
	};

	settings.onComplete = function(responseText) {
		ajax_setInnerHTML(settings.block, responseText);
		ajax_setStyleDisplay('ajaxLoad','none');
		init_triggers();
	};

	settings.onLoading = function() {
			ajax_setStyleDisplay('ajaxLoad','block');
	};

	for(var key in options) settings[key] = options[key];

	if (typeof settings.onCompleteAdditional == 'function'){
		onComplete2 = settings.onComplete;
		settings.onComplete = function(responseText) {
			onComplete2(responseText);
			settings.onCompleteAdditional();
		}
	}

	if (settings.form == ''){
		settings.onLoading();
		return $.ajax({
  			url: settings.url,
			type: settings.method,
  			data: settings.param,
			success: settings.onComplete
 		});
	} else {
		var form_id = ajax_getIdOfObject(settings.form);
		var form_object = document.getElementById(form_id);
		var pars = getParameters(form_object);
		return $.ajax({
  			url: settings.url,
			type: settings.method,
  			data: pars,
			success: settings.onComplete
 		});
	}

}

function ajax_slide(block, action, options){

	var default_options = {
		speed : 500,
		onComplete : function(){}
	};
	if (typeof options != 'undefined'){
		for(var key in options) default_options[key] = options[key];
	}
	options = default_options;

	if (action == 'up'){
		//ajax_getObject(block).stop();
		return ajax_getObject(block).slideUp(options.speed, options.onComplete);
	} else {
		if (action == 'down') {
			//ajax_getObject(block).stop();
			return ajax_getObject(block).slideDown(options.speed, options.onComplete);
		}
	}

}

function ajax_slide_toogle(id, prefix){

	var block_id = prefix + 'block_' + id;
	var link_id = prefix + 'link_' + id;

	if (ajax_hasClassName(block_id, '__opened__')){
		ajax_removeClassName(block_id, '__opened__');
		ajax_removeClassName(link_id, 'up');
		ajax_addClassName(link_id, 'down');
		//ajax_setInnerHTML(link_id, '<img src="/img/arrow-category-down.gif">');
		return ajax_slide(block_id, 'up');
	} else {
		ajax_addClassName(block_id, '__opened__');
		ajax_removeClassName(link_id, 'down');
		ajax_addClassName(link_id, 'up');
		//ajax_setInnerHTML(link_id, '<img src="/img/arrow-category-up.gif">');
		return ajax_slide(block_id, 'down');
	}

}

function ajax_setStyle(block, key, value) {
	if (ajax_getObject(block)) {
		style = {};
		style[key] = value;
		ajax_getObject(block).css(style);
	}
}
function ajax_setStyleTop(name,top) {
	if (ajax_getObject(name)) {
		ajax_setStyle(name, 'top', top);
	}
}
function ajax_setStyleDisplay(name,style) {
	if (ajax_getObject(name)) {
		ajax_setStyle(name, 'display', style);
	}
}

function ajax_getObject(name) {
	if (typeof(name) == 'object') return $(name);
	else return $('#'+name);
}

function ajax_objectExists(name){
	return ajax_getObject(name).length;
}

function ajax_getIdOfObject(obj){
	if (typeof(obj) == 'object') return $(obj).attr('id');
	else  return obj;
}

function ajax_getValue(name) {
	var obj = ajax_getObject(name);
	return obj.val();
}

function ajax_setValue(name, value) {
	var obj = ajax_getObject(name);
	obj.val(value);
}

function ajax_getInnerHTML(name) {
	var obj = ajax_getObject(name);
	return obj.html();
}

function ajax_setInnerHTML(name, value) {
	var obj = ajax_getObject(name);
	obj.html(value);
}

function ajax_getStyleParam(name, param){
	var obj = ajax_getObject(name);
	return $(obj).css(param);
}

function ajax_getClassName(name) {
	var obj = ajax_getObject(name);
	return obj.ClassName;
}
function ajax_setClassName(name,value) {
	var obj = ajax_getObject(name);
	obj.removeClass();
	obj.addClass(value);
}
function ajax_hasClassName(name, classname) {
	return ajax_getObject(name).hasClass(classname);
}
function ajax_addClassName(name, classname) {
	return ajax_getObject(name).addClass(classname);
}
function ajax_removeClassName(name, classname) {
	return ajax_getObject(name).removeClass(classname);
}
function ajax_getClosestParent(this_object, condition){
	return ajax_getObject(this_object).closest(condition);
}
function ajax_getChildrenObjects(parent_object, condition){
	return ajax_getObject(parent_object).children(condition);
}

function ajax_update(ajaxFile, param, block) {
	return ajax_request_optional({
			url : ajaxFile,
			param : param,
			block : block
	});
}

function set_shoping_cart_count(count){
	if (ajax_objectExists('shopping_cart_count')){
		ajax_setInnerHTML('shopping_cart_count', count);
	}
}
function set_shoping_cart_amount(amount){
	if (ajax_objectExists('shopping_cart_amount')){
		ajax_setInnerHTML('shopping_cart_amount', number_format(amount, 2, ',', ' '));
	}
}

function ajax_update_shopping_cart(ajaxFile, param, tableName, block) {
	return ajax_request_optional({
			url : ajaxFile,
			param : param,
			onComplete : function(responseText){
				if (text_found(responseText, 'close_popup_basket')){
					ajax_setInnerHTML(block, '');
					set_shoping_cart_count(0);
					set_shoping_cart_amount(0.0);
					popup_close();
				} else {
					ajax_setInnerHTML(block, responseText);
					set_shoping_cart_count(ajax_getValue('shopping_cart_count_value'));
					set_shoping_cart_amount(ajax_getValue('shopping_cart_amount_value'));
					popup_show();
				}
				ajax_setStyleDisplay('ajaxLoad','none');
				init_triggers();
			}
	});
}

function ajax_update_add_tender(idTender, form) {
	var form_id = ajax_getIdOfObject(form);
	var form_object = document.getElementById(form_id);
	var pars = 'id=' + idTender + '&' + getParameters(form_object);
	var block_form = 'tenders_order_form';
	var block_orders = 'tenders_orders';

	return ajax_request_optional({
			url : '/order-tenders/add.ajax',
			param : pars,
			onComplete : function(responseText){
				ajax_setInnerHTML(block_form, responseText);
				ajax_request_optional({
					url : '/tenderOrders-' + idTender + '/page-1.ajax',
					onComplete : function(responseText2){
						ajax_setInnerHTML(block_orders, responseText2);
						scrollJump('tenders_orders');
						ajax_setStyleDisplay('ajaxLoad', 'none');
					}
				});
				init_triggers();
			}
	});
}

function ajax_reload(url, param) {
	return ajax_request_optional({
			url : url,
			param : param,
			onComplete : function(responseText) {
				ajax_setStyleDisplay('ajaxLoad','none');
				document.location.reload();
				init_triggers();
			}
	});
}

function addFotos(ajaxFile, tableFoto, i, alias) {
	if (
			(ajax_getObject('text'+ alias + '_' + tableFoto + '_' + i) == null)
			|| (
				(ajax_getObject('text'+ alias + '_' + tableFoto + '_' + i) != null)
				&& (ajax_getValue('text'+ alias + '_' + tableFoto + '_' + i) == '')
			)
	) {
		alert('Не выбрано ни одного файла');
	}
	else {
		var addFoto = 'add'+ alias + '_' + tableFoto + '_' + i;
		var value = document.getElementById(addFoto);
		var req = new JsHttpRequest();
		var errors = 'errors'+ alias + '_' + tableFoto + '_' + i;
		var show = 'show'+ alias + '_' + tableFoto + '_' + i;
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				ajax_setInnerHTML(errors, req.responseJS);
				ajax_setInnerHTML(show, req.responseText);
				if (ajax_getObject('ajaxLoad')) ajax_setStyleDisplay('ajaxLoad', 'none');
				ajax_setValue('text'+ alias + '_' + tableFoto + '_' + i,  '');
			}
			if (req.readyState == 1) {
				if (ajax_getObject('ajaxLoad')) {ajax_setStyleDisplay('ajaxLoad', 'block');}
			}
			init_triggers();
		}
		var pars = '?blockFotos=' + show;
		req.open(null, ajaxFile + pars, true);
		req.send( { fotoFile: value } );
	}

}

function deleteFoto(table, idFoto, blockFoto) {
	return ajax_request_optional({
		url : '/operationFotos/' + table + '/delete-' + idFoto + '/list.ajax',
		param: 'blockFoto=' + blockFoto,
		onComplete: function(responseText) {
			ajax_setInnerHTML(blockFoto, responseText);
			//eval(str_replace('{BLOCK}', 'block', responseText));
			if (ajax_getObject('ajaxLoad')) {ajax_setStyleDisplay('ajaxLoad', 'none');}
			init_triggers();
		}
	});
}


function formAjaxRequestAB(ajaxFile, form, block, action) {
	return ajax_request_optional({
			form : form,
			block : block,
			url : ajaxFile,
			onComplete: function(responseText) {
				switch (action) {
					case 'update':
						ajax_setInnerHTML(block, responseText);
						var results = ajax_getObject('result');
						if (results!=undefined && results.length!=0) {
							results[0].scrollIntoView();
						}
						break;
					case 'runResult':
						eval(str_replace('{BLOCK}', 'block', responseText));
					break;
				}
				if (ajax_getObject('ajaxLoad')) {ajax_setStyleDisplay('ajaxLoad', 'none');}
				init_triggers();
			}
	});

}

function ajax_scrollJump(blockName){

	if (blockName == '_top'){
		window.scrollTo(0,0);
	} else {
		var block = document.getElementById(blockName);
		if (block) block.scrollIntoView();
	}

}

function str2JSON(str){
	return jQuery.parseJSON(trim(str));
}

function init_triggers(){

	$('.iappear').appear(function() {
		var realsrc = $(this).attr('realsrc');
		if (realsrc != ''){
			var self = $(this);
			$(self).attr('src', realsrc);
		}
	});

	var siteSearch = $("#search").autocomplete({serviceUrl : '/liveSearch.ajax'});
	$('#searchVariant').click(function(){
		var val = $(this).attr('title');
		$('#search').val(val);
		$('#search').focus();
		siteSearch.onValueChange();
	});

}

jQuery(document).ready(function(){
	init_triggers();
});

get_calendar = function(block){
	calendar = {
		conteiner : 'popup-calendar',
		conteiner_content : 'popup_calendar_content',
		block : block
	}

	this.getDate = function(){
		if (ajax_getStyleParam(calendar.conteiner, 'display') == 'block') {ajax_setStyle(calendar.conteiner, 'display', 'none');}
		ajax_setStyle(calendar.conteiner, 'left', 0);
		ajax_setStyle(calendar.conteiner, 'top', 0);
		return ajax_request_optional({
			url : '/get_calendar/',
			param : 'blok=' + calendar.block + '&value=' + ajax_getValue(calendar.conteiner) + '&select_value=' +  ajax_getValue(calendar.conteiner),
			onComplete : function(responseText) {
				ajax_setInnerHTML(calendar.conteiner_content, responseText);
				ajax_setStyleDisplay('ajaxLoad','none');
				ajax_setStyle(calendar.conteiner, 'left', offsetXPosition(document.getElementById(calendar.block))+0);
				ajax_setStyle(calendar.conteiner, 'top', offsetYPosition(document.getElementById(calendar.block))+22);
				if (ajax_getStyleParam(calendar.conteiner, 'display') != 'block') {ajax_setStyle(calendar.conteiner, 'display', 'block');}
				//init_triggers();
			}
		});
	}
	this.updateDate = function(value){
		return ajax_request_optional({
			url : '/get_calendar/',
			param : 'blok=' + calendar.block + '&value=' + value + '&select_value=' +  ajax_getValue(calendar.conteiner),
			onComplete : function(responseText) {
				ajax_setInnerHTML(calendar.conteiner_content, responseText);
				ajax_setStyleDisplay('ajaxLoad','none');
				init_triggers();
			}
		});
	}
	this.selectDate = function(value){
		ajax_setInnerHTML(calendar.conteiner_content, '');
		ajax_setStyle(calendar.conteiner, 'display', 'none');
		ajax_setValue(calendar.block, value);
	}
}


function get_date_calendar(block) {
	var calendar = new get_calendar(block);
	if (calendar) calendar.getDate();
}


function update_date_calendar(block, value) {
	var calendar = new get_calendar(block);
	if (calendar) calendar.updateDate(value);
}

function select_date_calendar(block, value) {
	var calendar = new get_calendar(block);
	if (calendar) calendar.selectDate(value);
}

function ajax_getNameParentElement(nameCurrentElement, tegParent) {
	return $('#' + nameCurrentElement).closest(tegParent).attr('name');
}

function ajax_setHtmlInBlocks(tegName, atributeName, atributeValue, value) {
	$(tegName + '[' + atributeName + '=' + atributeValue + ']').html(value);
}

