function listenKey(e){ 		
    e = (e) ? e : event;
    if(e.keyCode == 27)
	try{
		$.modal.close();
	}catch(ee){;}
}

function addHandler(object, event, handler, useCapture) {
	if (object.addEventListener) {
		object.addEventListener(event, handler, useCapture ? useCapture : false);
	} else if (object.attachEvent) {
		object.attachEvent('on' + event, handler);
	};
}

function removeHandler(object, event, handler) {
	if (object.removeEventListener) {
		object.removeEventListener(event, handler, false);
	} else if (object.detachEvent) {
		object.detachEvent('on' + event, handler);
	};
}

//Получает локальный адрес из адресной строки
function getLocalURL(){
	var fullURL = parent.document.URL;
	var counter = 10;
	var pos = 0;
	//alert(fullURL);
	while(pos < fullURL.toString().length && counter > 0){
		pos_temp = fullURL.toString().indexOf('/',pos>0 ? pos+1 : pos);
		if(pos_temp > 0)pos = pos_temp;
		counter--;
	}
	var ret = fullURL.toString().substring(pos+1,fullURL.toString().length);
	if(!ret)ret = '.';
	return ret;
}

// создает сервисный блок, для запуска ajax-запроса
function createServiceDIV(divid){
	if(!divid)divid = "service_div";
	if(!document.getElementById(divid)){
		var div=document.createElement("div");
		div.id=divid;
		div.style.display='none';
		document.body.appendChild(div);
	}
}

//function return block DOM element, where can to add modal blocks
function _block(blockname){
	if(!blockname)blockname = 'messageBlock';
	var messageBlock = $('#'+blockname)[0];
	if(!messageBlock){
		messageBlock = document.createElement("div");
		messageBlock.id = blockname;
		document.body.appendChild(messageBlock);
	}
	return messageBlock;
}

//shows block element as modal, if library does not work, function simply shows this block
function showModal(id){
	if($('#'+id)[0].style){
		try{
			$.modal($('#'+id)[0]);
		}
		catch(e){
			$('#'+id)[0].style.display='inline';
		}
	}
}

function fixMSIE6_simplemodal(){
	// IE bug
	if($.browser.msie && $.browser.version == 6)
		$('#simplemodal-overlay').height($(document).height());
}

//shows "wait" modal block
function showWait(func){
	var messageBlock = _block('waitBlock');
	messageBlock.className = '';
	$('#waitBlock').load(
		'templates/default/includes/wait.php',
		function(){
			buildDialog($("#waitformX")[0]);
			showModal('waitformX');
			
			var div = $('#waitformX')[0];
			var table = $('#waitformX table')[0];
			
			var left = (parseInt(document.body.clientWidth)-parseInt(table.clientWidth))/2;
			var top = (parseInt(document.body.clientHeight)-parseInt(table.clientHeight))/2;
			if($.browser.msie&&$.browser.version==6){
				left = 0;
				top = 0;
			}
			div.style.left = left + "px";
			div.style.top = top + "px";
			
			if(func)func();
			fixMSIE6_simplemodal();
		}
	);
}

function showWindow(url,autocomplete,top,func){
	var messageBlock = _block();
	messageBlock.className = '';

	messageBlock.innerHTML = '<div id="messageBox" class="dialog"'+top+'><div style="padding:10px" id="pageContent"></div></div>';
	$('#pageContent').load(
		url,
		function(){
			buildDialog($("#messageBox")[0]);
			buildElements();
			
			if(autocomplete){
				var cnt = autocomplete.length;
				var dotIndex, strlen, id, list;
				for(var i = 0; i < cnt; i++){
					dotIndex = autocomplete[i].indexOf('-');
					strlen = autocomplete[i].length;
					id = autocomplete[i].substr(0,dotIndex);
					list = autocomplete[i].substr(dotIndex+1,strlen-dotIndex-1);
	
					$("#"+id).autocomplete("includes/autocompleteList.php?list="+list, {
						delay:10,
						minChars:1,
						matchSubset:1,
						autoFill:false,
						maxItemsToShow:10
					});
				}
			}

			try{
			$("#addLink").click(function(event) {
				if(document.getElementById('addBlock').style.display=="block")this.innerHTML = "Добавить год";
				else this.innerHTML = "Отмена";
				$("#addBlock").slideToggle();
			});
			}catch(e){;}
			
			$.modal($('#messageBox')[0]);
			
			var div = $('#messageBox')[0];
			var table = $('#messageBox table')[0];
			
			var height_max = $(window).height() - 50;
			if($(table).height() > height_max){
				try{
					var toscrolltable = $('#pageContent form table:first');
					var toscrolldiv = $(document.createElement('div'));
					toscrolldiv.css('overflow','auto');
					toscrolldiv.css('padding','0px 20px');
					toscrolldiv.height(height_max - ($(table).height()-toscrolltable.height()));
					toscrolldiv.width(toscrolltable.width());
					toscrolltable.before(toscrolldiv);
					toscrolldiv.append(toscrolltable);
					
					// IE bug
					if($.browser.msie && ($.browser.version==6 || $.browser.version==7)){
						toscrolldiv.width(toscrolldiv.width() + 20);
					}
				}catch(e){}
			}
			
			var left = (parseInt(document.body.clientWidth)-parseInt(table.clientWidth))/2;
			var top = (parseInt(document.body.clientHeight)-parseInt(table.clientHeight))/2;
			if($.browser.msie&&$.browser.version==6){
				left = 0;
				top = 0;
			}
			div.style.left = left + "px";
			div.style.top = top + "px";
			
			if(func)func();
			fixMSIE6_simplemodal();
		}
	);
}

function showMessage(text,noclose){

	var messageBlock = _block('messageBlock2');
	if(noclose)messageBlock.className = 'no_close';
	else messageBlock.className = '';
	if(!$('#messageBlock2 #messageBox')[0]){
		$('#messageBlock2').load(
			'templates/default/includes/message.php',
			function(){
				if(!$("#messageBox2 table")[0]){
					buildDialog($("#messageBox2")[0]);
					
					var button = $("#messageButton")[0];
					buildButton(button,'green');
				}
				$("#messageText")[0].innerHTML = text;
				$.modal($('#messageBox2')[0]);
				fixMSIE6_simplemodal();
				
				var div = $('#messageBox2')[0];
				var table = $('#messageBox2 table')[0];
				var left = (parseInt(document.body.clientWidth)-parseInt(table.clientWidth))/2;
				var top = (parseInt(document.body.clientHeight)-parseInt(table.clientHeight))/2;
				if($.browser.msie&&$.browser.version==6){
					left = 0;
					top = 0;
				}
				div.style.left = left + "px";
				div.style.top = top + "px";
			}
		);
	}
	else{
		$("#messageText")[0].innerHTML = text;
		$.modal($('#messageBox2')[0]);
	}
}


function showConfirm(text,fn){

	var messageBlock = _block('confirmBlock');
	messageBlock.className = '';
	if(!$('#confirmBlock #confirmBox')[0]){
		$('#confirmBlock').load(
			'templates/default/includes/confirm.php',
			function(){
				if(!$("#confirmBox table")[0]){
					buildDialog($("#confirmBox")[0]);

					buildButton($("#confirmYes")[0],'green');
					buildButton($("#confirmNo")[0],'red');

					$("#confirmYes")[0].onclick=fn;
					
				}
				$("#confirmText")[0].innerHTML = text;
				$.modal($('#confirmBox')[0]);
				fixMSIE6_simplemodal();
				
				var div = $('#confirmBox')[0];
				var table = $('#confirmBox table')[0];
				var left = (parseInt(document.body.clientWidth)-parseInt(table.clientWidth))/2;
				var top = (parseInt(document.body.clientHeight)-parseInt(table.clientHeight))/2;
				if($.browser.msie&&$.browser.version==6){
					left = 0;
					top = 0;
				}
				div.style.left = left + "px";
				div.style.top = top + "px";
			}
		);
	}
	else{
		$("#confirmText")[0].innerHTML = text;
		$("#confirmYes")[0].onclick=fn;
		$.modal($('#confirmBox')[0]);
		fixMSIE6_simplemodal();
	}
}


function changeStep(index,page,withmessage){
	showWait(function(){
		var url = page ? 'stp_ajax_'+index+'_'+page : 'stp_ajax_'+index;
		$('#contentBlock').load(
			url,
			function(){
				onLoadFunc();
				if(withmessage)showMessage("Данные обновлены");
			}
		);
	});
}

var editID = 'editID';
function setID(row){
	var tmp;
	while(tmp = $('#'+editID)[0])tmp.id = "";
	row.id = editID;
}
function getRow(index,cnt,start){
	
	yesScroll();
	
	if(!start)start = 0;
	
	var row = $('#'+editID)[0];
	row.id = "";
	//showProp(row);
	
	var url = 'stepDriver,row,step='+index;
	var counter = 0;
	var cells = [];
	var cells_all = $("td",row);
	//showProp(cells_all);
	
	var cnt_all = cells_all.length - start;
	for(var i = cnt_all - cnt; i < cnt_all; i++)cells[counter++] = cells_all[i];
	//showProp(cells);
	
	counter = 0;
	$.getJSON(url,function(data){
		$.each(data, function(i,item){
			var DOM = cells[counter++];
			if(item == '0.00' || item == '0')item = '<font color="#777777">'+item+'</font>';
			DOM.innerHTML = item;
		});
	});
	
	try{$.modal.close();}catch(e){;}
}


/**
 * JSON data:
 * 
 * 	array(
 * 		'editID' => array(			// 'editID' - это id строки (tr), в которой будут ячейки обновляться
 *	 		'start' => 0,			// с какой ячейки стартовать замену. ВАЖНО!! отсчет идет СПРАВА
 * 			'count' => 2,			// сколько ячеек обновлять
 * 			'data' => $some_data	// массив с данными (например array('2008'=>'20','2009'=>'30'))
 *	 	),
 * 		... => ...
 * 	)
 * 
 * index = номер шага системы (12 - 26)
 */
function getRowEx(index){
	
	yesScroll();
	
	var url = 'stepDriver,row,step='+index;
	
	// если это никакой не шаг, а указан путь полностью
	if(index.length > 3)url = index;

	var data;
	var row;
	var start;
	var count;
	
	var counter = 0;
	var cells = [];
	
	var cells_all;
	var cnt_all;

	$.getJSON(url,function(data){
		
		$.each(data, function(name,value){
			
			row = $('#'+name)[0];
			if(row){
				
				cells = [];
				cells_all = $("td",row);
				cnt_all = cells_all.length - value.start;
				
				counter = 0;
				for(var i = cnt_all - value.count; i < cnt_all; i++)cells[counter++] = cells_all[i];
				counter = 0;
				$.each(value.data, function(i,item){
					var DOM = cells[counter++];
					if(item == '0.00' || item == '0')item = '<font color="#777777">'+item+'</font>';
					DOM.innerHTML = item;
				});
				
			}
		});
		row = $('#'+editID)[0];
		row.id = "";
	});
	
	try{$.modal.close();}catch(e){;}
}

function ajaxImport(step,withmessage){

	var wait = document.createElement("div");
	wait.id = 'importWait';
	wait.style.background = '#EAEEF8';
	wait.innerHTML = '<div style="padding-top:5px"><img src="templates/default/images/loading.gif"></div><div>Импорт данных.<br />Пожалуйста дождитесь ответа сервера...</div>';
	$('#importform')[0].appendChild(wait);

	$('#importInteract')[0].style.display='none';
	if(withmessage)
		$('#importform').ajaxSubmit(function(){changeStep(step,step,withmessage);});
	else
		$('#importform').ajaxSubmit(function(){changeStep(step);});
}

function _load(dom,url){
	showWait(function(){
		$(dom).load(url,function(){onLoadFunc();})
	});
}

// выполняет HTTP запрос и уведомляет о исполнении
function execRequest(urlpar){
	showWait(function(){
		$.ajax({
			type: "POST",
			url: urlpar,
			success: function(){
				$.modal.close();
				showMessage('Запрос выполнен успешно');
			}
		});
	});
}

// выполняет HTTP запрос и после выполняет указанную функцию
function _execRequest(urlpar,func,post){
	if(post)
		$.ajax({
			type: "POST",
			url: urlpar,
			data: post,
			success: func
		});
	else
		$.ajax({
			type: "POST",
			url: urlpar,
			success: func
		});
}

// выполняет HTTP запрос и возвращает результат
function getRequest(urlpar,post){
	var ret = 
	$.ajax({
		type: "POST",
		url: urlpar,
		data: post,
		async: false
	}).responseText;
	return ret;
}

function _ajaxSubmit(formid,element,func){
	if(!formid)formid = 'mainDataTable';
	if(!element)element = $('#contentBlock')[0];
	var options = {
		target: element,
		success: function(){
			buildElements();
			if(func)func();
		}
	};
	$("#"+formid).ajaxSubmit(options);
}

function reloadPage(){
	/*$('#contentBlock').load(
			getLocalURL(),
			function(){
				onLoadFunc();
				if(text)showMessage(text);
			}
	);*/
	location.href = getLocalURL();
}

//проверяем, есть ли что удалять в форме
function deletionExist(form){
	eval("var formEL = document."+form);
	var elements = formEL.elements['check[]'];
	var ok = 0;
	if(isThisTag(elements,"INPUT")&&elements.checked)ok++;
	for(i=0;i<elements.length;i++)if(elements[i].checked)ok++;
	return ok;
}

function deleteElements(url,form){
	if(!form)form = 'mainDataTable';
	if(deletionExist(form))
		showConfirm(
			'Вы действительно хотите удалить выделенные записи?',
			function(){
				eval("var formEL = document."+form);
				var elements = formEL.elements['check[]'];
				var ok = 0;
				if(isThisTag(elements,"INPUT")&&elements.checked)ok++;
				for(i=0;i<elements.length;i++)if(elements[i].checked)ok++;
				if(ok){
					formEL.action = url;
					$(formEL).ajaxSubmit(function(){reloadPage();});
				}
			}
		);
}


function loadCalendar(){
	$.getScript("lib/calendar/engine.js");
}






