function menuObject(refName_){
	var refName = refName_;
	
	var menuArray = new Object();
	
	var count = 1;
	var curPage = null;
	var curOpenedNode = null;
	var agt = navigator.userAgent.toLowerCase () ;
	var ie = ((agt.indexOf ("msie") != -1) && (agt.indexOf ("opera") == -1)) ; 
	
	this.renderMenu = renderMenu;
	this.add = add;
	this.openCloseLevel = openCloseLevel;
	this.over = over;
	this.out = out;
	this.procUrl = procUrl;
	
	function $(id){
		return document.getElementById(id);
	}
	
	function updateCurPage(){
		var item = menuArray[curPage];
		while(item){
			item.curPagePath = true;
			item.opened = true;
			if(!item.parent) curOpenedNode = item.id;
			item = menuArray[item.parent];
		}
	}
	
	function getCurPage(){
		var searchVar = document.location.search;
		var location = searchVar.substring(searchVar.indexOf("?")+1,searchVar.length).split("&");
		var temp = null;
		for(var i = 0; i < location.length; i++){
			temp = location[i].split("=");
			if(temp[0] == "id") curPage = temp[1];
			break;
		}
		if(!menuArray[curPage]) curPage = null;
	}
	
	function updateMenu(){
		var res = new Array();
		getCurPage();
		for(var i in menuArray){
			if(!menuArray[i].parent) res[res.length] = menuArray[i];
			//if( !curPage ) if(document.location.href.indexOf(menuArray[i].url) != -1) curPage = menuArray[i].id;
			//alert(curPage);
		}
		if(res.length == 0) res = null;
		if(curPage) updateCurPage();
		return res;
	}
	
	function renderMenu(divId){
		var div = $(divId);
		var str = "";
		if(div){
			div.innerHTML = getMenuSource(updateMenu(), false);
		}else{
			alert("Контейнер " + (divId?divId:"") + " не обнаружен.");
		}	
	}
	
	function getOpened(obj){
		var par = " style=\"display:none\"";
		if(obj.opened) par = (ie?" style=\"display:block\"":" style=\"display:table-row\"");
		return par;
	}
	
	function isChild(cur, id){
		var item = menuArray[id];
		var res = false;
		while(item.parent){
			if(item.parent == cur){
				res = true;
				break;
			}
		}
		return res;
	}
	
	function openCloseLevel(id){
		if(curOpenedNode && (id != curOpenedNode) && !isChild(curOpenedNode, id) && menuArray[curOpenedNode]) closeCurLevel(curOpenedNode);
		var obj = $(id + "_tr");
		var objImg = $(id + "_img");
		var objLabel = $(id + "_label");
		if(obj){
			if(menuArray[id]){
				if(menuArray[id].opened){
					obj.style.display = "none";
					if(objImg) objImg.className = "child_closed";
					menuArray[id].opened = false;
					if(objLabel) objLabel.className = "menu_label_over" + ((menuArray[id].opened)?" parent":"");
				}else{
					obj.style.display = (ie?"block":"table-row");
					if(objImg) objImg.className = "child_open";
					menuArray[id].opened = true;
					if(objLabel) objLabel.className = "menu_label_over" + ((menuArray[id].opened)?" parent":"");
				}
			}else{
				alert("Индекс " + id + " неизвестен.");
			}
			curOpenedNode = id;
		}
	}
	
	function closeCurLevel(id){
		var obj = $(id + "_tr");
		var objImg = $(id + "_img");
		var objLabel = $(id + "_label");
		if(obj){
			if(menuArray[id]){
				obj.style.display = "none";
				if(objImg) objImg.className = "child_closed";
				menuArray[id].opened = false;
				if(objLabel) objLabel.className = "menu_label" + ((menuArray[id].opened)?" parent":"");
			}else{
				alert("Индекс " + id + " неизвестен.");
			}
		}
	}
	
	function over(id){
		if(id == curPage) return;
		var obj = $(id + "_label");
		if(obj) obj.className = "menu_label_over" + ((menuArray[id].opened)?" parent":"");
	}
	
	function out(id){
		if(id == curPage) return;
		var obj = $(id + "_label");
		if(obj) obj.className = "menu_label" + ((menuArray[id].opened)?" parent":"");
	}
	
	function procUrl(url, id){
		if(id == curPage) return;
		document.location.href = url + ((url.indexOf("?")==-1)?"?":"&")+"id=" + id;
	}
	
	function getMenuSource(arr, notFirst){
		if(arr && arr.length > 0){
			var str = "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\"" + (notFirst?" width=\"100%\"":" width=\"200\"") + ">";
			for(var i = 0; i < arr.length; i++){
			  //alert(curPage);
				if(arr[i]){
//					str += "<tr><td onclick=\"" + refName + ".openCloseLevel('" + arr[i].id + "')\"" + ((arr[i].children.length > 0)?" class=\"hand\"":"") + "><img src=\"images/0.gif\" class=\"" + ((arr[i].children.length > 0)?((arr[i].opened)?"child_open":"child_closed"):((arr[i].id == curPage)?"cur_page":"empty")) + "\" width=\"5\" height=\"5\" border=\"0\" hspace=\"2\" id=\"" + arr[i].id + "_img\"></td><td class=\"menu_label" + ((arr[i].opened)?" parent":"") + ((arr[i].id == curPage)?" curPage":"") + "\"" + (notFirst?" width=\"100%\"":" width=\"100%\"") + " onmouseover=\"" + refName + ".over('" + arr[i].id + "')\" onmouseout=\"" + refName + ".out('" + arr[i].id + "')\"" + ((arr[i].children.length > 0)?(" onclick=\"" + refName + ".openCloseLevel('" + arr[i].id + "')\""):" onclick=\"" + refName + ".procUrl('" + arr[i].url + "', '" + arr[i].id + "')\"") + " id=\"" + arr[i].id + "_label\"><nobr>" + arr[i].label + "</nobr></td></tr>";
					str += "<tr><td onclick=\"" + refName + ".openCloseLevel('" + arr[i].id + "')\"" + ((arr[i].children.length > 0)?" class=\"hand\"":"") + "><img src=\"images/0.gif\" class=\"" + ((arr[i].children.length > 0)?((arr[i].opened)?"child_open":"child_closed"):((arr[i].id == curPage)?"cur_page":"empty")) + "\" width=\"5\" height=\"5\" border=\"0\" hspace=\"2\" id=\"" + arr[i].id + "_img\"></td><td class=\"menu_label" + ((arr[i].opened)?" parent":"") + ((arr[i].id == curPage)?" curPage":"") + "\"" + (notFirst?" width=\"100%\"":" width=\"100%\"") + " onmouseover=\"" + refName + ".over('" + arr[i].id + "')\" onmouseout=\"" + refName + ".out('" + arr[i].id + "')\"" + ((arr[i].children.length > 0)?(" onclick=\"" + refName + ".openCloseLevel('" + arr[i].id + "')\""):" onclick=\"" + refName + ".procUrl('index.php', '" + arr[i].id + "')\"") + " id=\"" + arr[i].id + "_label\">" + arr[i].label + "</td></tr>";
					if(arr[i].children.length > 0){
						str += "<tr" + getOpened(arr[i]) + " id=\"" + arr[i].id + "_tr\"><td>&nbsp;</td><td>" + getMenuSource(arr[i].children, true) + "</td></tr>";
					}
				}
			}
			str += "</table>";
			return str;
		}else return "empty";
	}
	
	function add(id, label, url, parent){
		var item = new menuItem(count++);
		item.id = id;
		item.label = label;
		item.url = url; 
		item.parent = parent;
		menuArray[id] = item;
		if(parent){
			if(menuArray[parent]){
				menuArray[parent].children[menuArray[parent].children.length] = item;
			}else{
				alert("Добавление элементов меню.");
			}
		}
	}
	
	function menuItem(count){
		this.id = null;
		this.label = null;
		this.url = null;
		this.children = new Array();
		this.parent = null;
		this.countId = count;
		this.opened = false;
		this.curPagePath = false;
	}
}


///////////////////// services scripts

function getOtherField(obj, otherFieldName){
	var form = obj.form;
	if(form && form[otherFieldName]){
		if(obj.checked) form[otherFieldName].disabled = false;
		else form[otherFieldName].disabled = true;
	}else{
		alert("Поле " + otherFieldName + " не определено.");
	}
}

function getFeb(year){
	if(!year){
		var objDate = new Date();
    	year = objDate.getFullYear();
	}
    if(((year%4) == 0) && ((year%100) != 0)) return 29;
    else if(((year%100) == 0) && ((year%400) == 0)) return 29;
    else return 28;
}

function setDateValue(obj, formName, selDay){
	var objDate = new Date();
	var form = null;
	if(obj) form = obj.form;
	if(!form && formName) form = document.forms[formName];
	if(form){
		var dayObj = form["day"];
		var monthObj = form["month"];
		var yearObj = form["year"];
		var febValue = getFeb(yearObj.value);
		var monthDays = new Array(31,febValue,31,30,31,30,31,31,30,31,30,31);
		dayObj.length = 1;
		for(var i = 1; i <= monthDays[monthObj.value?monthObj.value:objDate.getMonth()]; i++){
		  var issel = ( selDay==(i-1) ? true : false );
			dayObj.options[i] = new Option(i, i, false, issel );
		}
		
	}else alert("Форма не определена.");
}

