$(document).ready(function(){
	A.init();
})

var A={
	init: function(){
		A.style();
		A.tf.init();
		A.mil.init();
	},
	
	style: function(){
		// layout
		if($.browser.msie && $.browser.version<=6){
			var $main_td=$(document.createElement('td')).attr({id:'mainTd'}).
				appendTo($(document.createElement('tr')).
					appendTo($(document.createElement('table')).attr({id:'mainTbl'}).
						appendTo('body')));
			$('body').css({position:'absolute',width: '100%',height: '100%'}).children('div').appendTo($main_td);
			$('html').css({position:'static',width: '100%',height: '100%'})
		}
		// controls
		if($('#controls').length){
			var $admin_controls=$('#controls').wrap(
				$(document.createElement('div')).attr({id:'adminControls'})
			).parent();
			if($.evIE6()){
				$admin_controls.evPositionFixed({attach:'lb'});
			}
		}
		var $model_items=$('#modelItems');
		if($model_items.length){
			$model_items.show();
		}
	},

	tf: {
		init: function(){
			$('#typeFilterForm').ajaxForm({
				beforeSubmit: function(){$('#ajaxLoader').show()},
				method: 'post',
				dataType: 'json',
				success: function(json){
					$('#modelItems').empty().append(json.html);
					$('#ajaxLoader').hide();
					if(json.tf){
						A.tf.decor();
					}
				}
			})
			A.tf.decor();
		},

		decor: function(){
			if($('#typeFilterForm input')[0] && $('#typeFilterForm input')[0].value){
				$('#typeFilterForm a.reset').show().bind('click',function(event){
					event.preventDefault();
					$(this).hide().next().attr({value:''}).css({border:''}).parent().trigger('submit');
				}).next().css({border: '2px solid #F98315'});
			}
		}
	},

	mil: {//model items list
		init: function(){
			A.mil.bindPlusMinusClick();
		},
		bindPlusMinusClick: function($parent){
			if(!$parent){
				$parent=$('#modelItems');
			}
			if ($parent.length) {
				$parent.find('a.plus, a.minus').each(function(){
					$(this).bind('click',function(event){
						event.preventDefault();
						A.mil.getToggleChildren($(this));
					})
				})
	  	}
		},
		up: function(model_name,id){
			A.mil.updown(model_name,id,'up');
		},
		down: function(model_name,id){
			A.mil.updown(model_name,id,'down');
		},
		updown: function(model_name,id,action){
			var hash={};
			hash[model_name+'[id]']=id;
			hash['tf']=(document.forms['model_'+model_name+'_form'].elements['tf'].value || '');
			hash.action=action;
			$.getJSON('./?json=1',hash,function(json){
				if(json.id){
					var $current_element_node=$('#'+model_name+id);
					//ищем на странице элемент, с которым поменялись местами
					var $next_element_node=$('#'+model_name+json.id);
					if($next_element_node.length){
						//меняем местами содержимое элементов
						//меняем идентификаторы
						var current_element_inner_html=$current_element_node.html();
						var next_element_inner_html=$next_element_node.html();
						$current_element_node.empty().append(next_element_inner_html).attr('id',model_name+json.id);
						$next_element_node.empty().append(current_element_inner_html).attr('id',model_name+id);
						//если next_element_node находится внутри страницы, которая свернута, то разворачиваем ее
						A.mil.try2expandPage($next_element_node);
					}else{
						//если $next_element_node отсутствует на странице, 
						//то скрываем страницу с которой он ушел (удаляя из нее элементы)
						//и вытаскиваем новую страницу
						A.mil.try2retrivePage($current_element_node,action);
					}
				}
				//скрываем ajax-loader
				$('#ajaxLoader').hide();
			});
			//показываем ajax-loader
			$('#ajaxLoader').show();
		},
		try2expandPage: function($next_element_node){
			//пытаемся найти node plusminus
			try{
				var $a_plus=$next_element_node.parent().prev().children('a.plus');
				if($a_plus.length){
					var $children=A.mil.getChildren($a_plus);
					A.mil.toggleChildren($a_plus,$children);
				}
			}
			catch(e){/*alert(e)*/}
		},
		try2retrivePage: function($current_element_node,action){
			try{
				//находим ссылку a.plus выше или ниже текущей
				$parent_li=$current_element_node.parent().parent().parent();
				$a_plus=((action=='up')?$parent_li.prev():$parent_li.next()).find('div.children div.nobullet a.plus');
				//если такая нашлась
				if($a_plus.length){
					//сворачиваем текущую страницу
					var $a_minus=$parent_li.find('div.children div.nobullet a.minus');
					if($a_minus.length){
						var $children=A.mil.getChildren($a_minus);
						A.mil.toggleChildren($a_minus,$children);
					}
					//и удаляем из нее все элементы
					$current_element_node.parent().remove();
					//выполняем как бы клик по ссылке
					$a_plus.trigger('click');
				}
			}
			catch(e){/*alert(e)*/}
		},
		getChildren: function($node){
			var $children=$node.parent().parent().children('ul');
			return $children;
		},
		getToggleChildren: function($node){
			//определяем, есть ли у элемента детки
			var $children=A.mil.getChildren($node);
			if($children.length){
				//дети присутствуют
				A.mil.toggleChildren($node,$children);
			}else{
				//дети отсутствуют, нужно их получить
				$.getJSON($node.attr('href'),function(json){
					$node.parent().parent().append(json.html);
					$children=$node.parent().parent().children('ul.itemsList').hide();
					A.mil.bindPlusMinusClick($children);
					//вызываем повторно себя же
					A.mil.getToggleChildren($node);
					//скрываем ajax-loader
					$('#ajaxLoader').hide();
				});
				//показываем ajax-loader
				$('#ajaxLoader').show();
			}
			return false;
		},
		toggleChildren: function($node,$children){
			//дети присутствуют, определяем нужно ли их скрыть или показать
			$node.children('span').text(($children[0].offsetHeight)?'+':'-');
			$node.toggleClass('minus').toggleClass('plus');
			if($.browser.msie && $.browser.version<7){
				if(($children[0].offsetHeight)){
					$children.hide('fast');
				}else{
					$children.show('fast');
				}
			}else{
				$children.slideToggle('fast');
			}
		}
	},

	MTMfieldTakeAll: function(manage_all){
		//поле MTM реализовано так, что в форме может появляться либо селектбокс, либо чекбоксы
		//поэтому реализация функции будет состоять из двух частей.

		//определяем название селектбокса или чекбокса, с которым работать
		var box_name=manage_all.name.substr(0,(manage_all.name.length-11))+'[]';//alert(box_name);
		//определяем сам элемент селектбокса или чекбокса
		var box_or_chbox_arr=(manage_all.form).elements[box_name];
		//делаем ветвление логики, в зависимости от типа элемента (селектбокс или чекбокс)
		if(box_or_chbox_arr.tagName=='SELECT'){
			//пробегаемся по опшинам и либо включаем, либо выключаем их
			var sbox=box_or_chbox_arr;
			for(var i=0; i<sbox.options.length; i++){
				sbox.options[i].selected=manage_all.checked;
			}
		}else{
			var chbox_arr=box_or_chbox_arr;
			for(var i=0; i<chbox_arr.length; i++){
				chbox_arr[i].checked=manage_all.checked;
			}
		}
	}
}

function checkAll(chbox){
	//alert(chbox.name);
	//пробегаемся по всем элементам формы, ищем chekbox 
	//с точно таким же [содержимым], как у chbox.name
	var form=chbox.form;//alert(form);alert(form.elements[chbox.name].checked)
	var str=checkAllGetStr(chbox.name);
	for(var i=0;i<form.elements.length;i++){
		if(form.elements[i].type=='checkbox' && checkAllGetStr(form.elements[i].name)==str){
			form.elements[i].checked=chbox.checked;
		}
	}
}

function checkAllGetStr(str){
	var start=str.indexOf('[')+1;
	var end=str.indexOf(']');
	if(start>0 && end>start){
		var result=str.substring(start,end);
		//alert(result);
	}else{alert('в checkAllGetStr(str) невозможно определить содержимое в квадратных скобках строки «'+ str+ '»');}
	return result;
}

