/*<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />*/
/*
	Общие JS функции используемые движком
*/


/*Определение браузера*/
var ua='';
if (window.navigator.userAgent.indexOf ("Opera") >= 0)
  {
   ua = 'Opera';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("Opera")+6,4);
  }
else
if (window.navigator.userAgent.indexOf ("Gecko") >= 0) // (Mozilla, Netscape, FireFox)
  {        // Их врядли стоит разделять, так как их разделение – только попытка вдохнуть новую жизнь в одного и того же вымирающего динозавра
   ua = 'Netscape';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("Gecko")+6,8)+ ' ('+ window.navigator.userAgent.substr(8,3) + ')';
  }
else
if (window.navigator.userAgent.indexOf ("MSIE") >= 0)
  {
   ua = 'Explorer';
   uaVers=window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("MSIE")+5,3);
  }
else
   ua = window.navigator.appName; // Неизвестные мне браузеры

function formkeypress(event,objid){
  if ( (event.ctrlKey && event.keyCode=='13') || (ua=='Explorer' && window.event.keyCode=='10') )
	{
        document.getElementById(objid).submit();
	}
}
function formkeypresssubmit(event,objid){
  if ( (event.ctrlKey && event.keyCode=='13') || (ua=='Explorer' && window.event.keyCode=='10') )
	{
        document.getElementById(objid).click();
	}
}

/*
	Функция отмечает или снимает все галочки в указанной форме
*/
function checkAll(formId, inputName, currentInputObj){
	formObj = document.getElementById(formId)
	if (formObj){
		var i = formObj.elements.length;
		for(ii = 0; ii<=i; ii++){
			if (typeof formObj.elements[ii]!="undefined"){
				if(formObj.elements[ii].type=='checkbox' && formObj.elements[ii].name.substr(0,inputName.length)==inputName ){
					formObj.elements[ii].checked=currentInputObj.checked;
				}
			}
		}
	}else{
		alert("Element "+formId+" not found");		
	}
}

/*
Ширина и высота клиентской (рабочей) области окна браузера
*/

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}


/*скроллинг*/
function getBodyScrollTop()
{
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft()
{
  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}


function getMaxZIndex(nameTag){
	var maxIndex = 0;
	var layers = document.getElementsByTagName(nameTag); 
	var layerLength = (layers.length - 1);
	
	for(var i=1; i < (layerLength + 1); i++) {
//		alert(layers[i].getAttribute('id'));
		
		if (maxIndex<layers[i].style.zIndex){
			maxIndex = layers[i].style.zIndex;
		}
	}
//	alert(maxIndex);
	return maxIndex;
	
}

var lay=null;
var dragIsStarted=false;
var differenceTop = 0;
var differenceLeft = 0;
function startDrag(e, layerName){
	lay=document.getElementById(layerName); //ищем слой, на котором произошло событие
	//lay.style.cursor="move";
	lay.style.zIndex = Math.round(getMaxZIndex('div'))+1;
	//действия, помогающие найти отношение координат слоя к координатам курсора
	differenceLeft = parseInt(mousex)-parseInt(lay.style.left);
	differenceTop = parseInt(mousey)-parseInt(lay.style.top);
	//«рычаг» вкл
	dragIsStarted = true;	
}

function stopDrag(){
	//«рычаг» выкл.
	dragIsStarted = false;
	//lay.style.cursor="normal";
}

function updateCoords(e)
{
	//если «рычаг» вкл, то слой должен двигаться за курсором
	if (dragIsStarted){
		//действия, которые изменяют координаты слоя, зная их отношение к координатам курсора
		lay.style.top = (parseInt(mousey) - parseInt(differenceTop)) + "px";
		lay.style.left = (parseInt(mousex) - parseInt(differenceLeft)) + "px";
	}
}




var mousex = 0;
var mousey = 0;

function getMouseCoordinates(){
	if(ua=="Explorer"){
	  document.onmousemove=function(){
		mousex=event.clientX+document.body.scrollLeft;
		mousey=event.clientY+document.body.scrollTop;
		updateCoords(event);
		return true;
	  }
	}else if(ua=="Opera"){
	  document.onmousemove=function(){
		mousex=event.clientX;
		mousey=event.clientY;
		updateCoords(event);
		return true;
	  }
	}else if(ua=="Netscape"){
	  document.onmousemove=function(e){
		mousex = e.pageX;
		mousey = e.pageY;
		updateCoords(e);
		return true;
	  }  
	}
}
if (ua=="Explorer")//window.attachEvent) 
	window.attachEvent("onload", getMouseCoordinates); 
else if (ua=="Netscape")
	document.addEventListener("DOMContentLoaded", getMouseCoordinates,true);
else if (ua=="Opera")
	document.addEventListener("DOMContentLoaded", getMouseCoordinates,true);




/* START функции для работы с добавлением и удалениям имен классов*/
function addClass(obj,className){
	if ('object' != typeof obj)
		obj = document.getElementById(obj);
	if (obj==null) return false;
	if ('undefined' == typeof obj.className) return false;
	//Добавить класс если такого ещё нет
	re = new RegExp("(?:^| ){1}"+className+"(?:$| ){1}")
	res = re.exec(obj.className);
	if (res==null){ //Добавляем класс
		obj.className = obj.className+" "+className;
	}
	return true;
}
function removeClass(obj,className){
	if ('object' != typeof obj)
		obj = document.getElementById(obj);
	if (obj==null) return false;
	if ('undefined' == typeof obj.className) return false;
	//Удалить класс если такой есть
	re = new RegExp("((?:^| ){1}"+className+"(?:$| ){1})")
	var a = String;
	a = obj.className;
	obj.className = a.replace(re,"");
	return true;
}
function replaceClass(obj,classNameAdd,classNameRemove){
	if ('object' != typeof obj)
		obj = document.getElementById(obj);
	if (obj==null) return false;
	if ('undefined' == typeof obj.className) return false;
	//Удалить класс если такой есть
	re = new RegExp("((?:^| ){1}"+classNameRemove+"(?:$| ){1})")
	var a = String;
	a = obj.className;
	obj.className = a.replace(re,classNameAdd);
	return true;
}
//Получает массив с классами
function getClasses(obj){
	if (typeof obj == 'object')
		object = obj;
	else
		object = document.getElementById(obj);
	if (object==null) return false;
	if ('undefined' == typeof obj.className) return false;
	sclass = object.className;
	return sclass.split(" ");
}
function checkClass(obj,className){
	ar = getClasses(obj);
	if (ar==false) return false;
	var iLen = ar.length;
	for (var i = 0; i < iLen; ++i) {
		if (ar[i]==className) return true;
	}
	return false;
}
/* END функции для работы с добавлением и удалениям имен классов*/



function fadeOut(obj_id,step,pause){
	obj = document.getElementById(obj_id);

	if (typeof obj == "object"&&obj!=null){
		if (ua=="Netscape" || ua=="Opera"){
			fStep = step/100;
			
			if (!obj.style.opacity) obj.style.opacity = 0;
			opacity = parseFloat(obj.style.opacity);
			//alert(opacity);
			opacity = opacity+fStep;
			obj.style.opacity = opacity;
			//xajax.dom.assign(this.winid,'style.visibility','hidden');
//			obj.style.filter
			//if (opacity<100){
				setTimeout("fadeOut('"+obj_id+"',"+step+","+pause+");",pause);
			//}
		}
	}
}




//Класс окна
//obj - объект или идентификатор объекта где создавать окно (create);
//winid - идентификатор окна
var Wins = function(obj,winid){
	if (typeof obj == 'object')
		this.obj = obj;
	else
		this.obj = document.getElementById(obj);
	if (this.obj==null) return false;
	this.winid = winid; //идентификатор окна
	this.mainClassName = '';
	this.headerClassName = '';
	this.headerText = '';
	this.headerTextClass = '';
	this.bodyClassName = '';
	this.bodyHTML = '';
	
	this.showEffect = 1;
	this.xPosition = 'center';
	this.yPosition = 'center';	
	return true;
};

Wins.prototype.createMain = function(){
	//alert(document.getElementById(this.winid));
	if (typeof document.getElementById(this.winid) == 'object' && document.getElementById(this.winid)!=null){
		xajax.dom.remove(this.winid); //А если есть то обнуляем его
	};
//		alert(document.getElementById(this.winid));
//	}else{
		xajax.dom.create(this.obj,'div',this.winid); //Создание общего DIV окна
//		alert(document.getElementById(this.winid));
	//};
	
	xajax.dom.assign(this.winid,'className',this.mainClassName); //Назначем класс
	xajax.dom.assign(this.winid,'style.visibility','hidden'); //Указываем что оно пока невидимо
	xajax.events.setEvent(this.winid,'onclick','this.style.zIndex=(this.style.zIndex!=getMaxZIndex("div")?Math.round(getMaxZIndex("div"))+1:this.style.zIndex)'); //Назначаем события на клик чтобы поднималось на верх
	xajax.dom.assign(this.winid,'style.zIndex',Math.round(getMaxZIndex('div'))+1); //Поднимаем созданное окно наверх
	xajax.dom.assign(this.winid,'style.left','0px'); //Право ставим авто
	xajax.dom.assign(this.winid,'style.top','0px');	 //Низ ставим авто
	xajax.dom.assign(this.winid,'style.right','auto'); //Право ставим авто
	xajax.dom.assign(this.winid,'style.bottom','auto');	 //Низ ставим авто
};

Wins.prototype.createHeader = function(){

	this.winHeaderId = this.winid+"_header";
	xajax.dom.create(this.winid,'div',this.winHeaderId); //Создаем заголовок внутри основного окна
	xajax.dom.assign(this.winHeaderId,'className',this.headerClassName); //Назначем класс

/*
	xajax.dom.assign(this.winHeaderId,'style.width','auto'); //Различные стили заголовка
	xajax.dom.assign(this.winHeaderId,'style.height','20px');
	xajax.dom.assign(this.winHeaderId,'style.position','relative');
	xajax.dom.assign(this.winHeaderId,'style.display','block');
*/	
	xajax.dom.assign(this.winHeaderId,'innerHTML','<div class="'+this.headerTextClass+'">'+this.headerText+'</div><div onClick="xajax.dom.remove(\''+this.winid+'\');" style="float:right;" class="closeButton">&nbsp;</div>');
	xajax.events.setEvent(this.winHeaderId,'onmousedown','startDrag(event,"'+this.winid+'");');
	xajax.events.setEvent(this.winHeaderId,'onmouseup','stopDrag();');
	xajax.events.setEvent(document.body,'onmouseup','stopDrag();');
	
	//xajax.events.setEvent(document.body,'onmousemove','null;');	
	//<table style="width:100%; height:100%;"><tr><td>&nbsp;</td><td></td></tr></table>
};

Wins.prototype.createBody = function(){
	
	this.winBodyId = this.winid+"_body";
	xajax.dom.insertAfter(this.winHeaderId,'div',this.winBodyId);
	xajax.dom.assign(this.winBodyId,'className',this.bodyClassName); //Назначем класс	
	xajax.dom.assign(this.winBodyId,'style.width','auto');
	xajax.dom.assign(this.winBodyId,'style.height','auto');
	xajax.dom.assign(this.winBodyId,'style.position','relative');
	xajax.dom.assign(this.winBodyId,'style.display','block');	
	
}

Wins.prototype.fillBody = function(){
	xajax.dom.assign(this.winBodyId,'innerHTML',this.bodyHTML); //Указываем что оно видимо
}

Wins.prototype.show = function(){
	xajax.dom.assign(this.winid,'style.visibility','visible'); //Указываем что оно видимо
	if (this.showEffect==0){
		xajax.dom.assign(this.winid,'style.visibility','visible'); //Указываем что оно видимо
	} else if (this.showEffect==1){
		fadeOut(this.winid,2,10);
	};
}

Wins.prototype.position = function(){
	if (this.yPosition=='center')
		document.getElementById(this.winid).style.top = Math.round(getClientHeight()/2+getBodyScrollTop())-Math.round(document.getElementById(this.winid).clientHeight/2)+'px';// + Math.random()*50-Math.random()*50 ) + 'px';
	else
		document.getElementById(this.winid).style.top = this.yPosition;	
	if (this.xPosition=='center')		
		document.getElementById(this.winid).style.left = Math.round(getClientWidth()/2+getBodyScrollLeft())-Math.round(document.getElementById(this.winid).clientWidth/2)+'px';
	else
		document.getElementById(this.winid).style.left = this.xPosition;
}

Wins.prototype.create = function(){
	this.createMain();
	this.createHeader();
	this.createBody();	
	this.fillBody();
	this.position();
	this.show();

//	xajax.dom.create(this.obj,'div',this.winid); //Создание общего DIV окна
	
}

Wins.prototype.createDebug = function(){
	alert(6);
	alert(this.obj);
	this.createMain();
	alert(5);
	this.createHeader();
	alert(4);
	this.createBody();	
	alert(3);
	this.fillBody();
	alert(2);
	this.position();
	alert('after position: '+document.getElementById(this.winid));
	alert('top: '+document.getElementById(this.winid).style.top);
	alert('left: '+document.getElementById(this.winid).style.left);
	this.show();

//	xajax.dom.create(this.obj,'div',this.winid); //Создание общего DIV окна
	
}

//=====================================================================================
/*Добавить слева символы ch чтобы общая длинна строки была не больше num*/
String.prototype.lpad = function(ch,num){
	var t = this.toString();
	if (t.length<num){
		for(var i=t.length; i<num; i++){
			t = ch+t;
		}		
	}
	return t;
}

//=====================================================================================
String.entities = {};
String.entities['34'] = '&quot;';
String.entities['38'] = '&amp;';
String.entities['60'] = '&lt;'; 
String.entities['62'] = '&gt;';
String.entities['160'] = '&nbsp;';
String.entities['161'] = '&iexcl;';
String.entities['162'] = '&cent;';
String.entities['163'] = '&pound;';
String.entities['164'] = '&curren;';
String.entities['165'] = '&yen;';
String.entities['166'] = '&brvbar;';
String.entities['167'] = '&sect;';
String.entities['168'] = '&uml;';
String.entities['169'] = '&copy;';
String.entities['170'] = '&ordf;';
String.entities['171'] = '&laquo;';
String.entities['172'] = '&not;';
String.entities['173'] = '*';
String.entities['174'] = '&reg;';
String.entities['175'] = '&macr;';
String.entities['176'] = '&deg;';
String.entities['177'] = '&plusmn;';
String.entities['178'] = '&sup2;';
String.entities['179'] = '&sup3;';
String.entities['180'] = '&acute;';
String.entities['181'] = '&micro;';
String.entities['182'] = '&para;';
String.entities['183'] = '&middot;';
String.entities['184'] = '&cedil;';
String.entities['185'] = '&sup1;';
String.entities['186'] = '&ordm;';
String.entities['187'] = '&raquo;';
String.entities['188'] = '&frac14;';
String.entities['189'] = '&frac12;';
String.entities['190'] = '&frac34;';
String.entities['191'] = '&iquest;';
String.entities['192'] = '&Agrave;';
String.entities['193'] = '&Aacute;';
String.entities['194'] = '&Acirc;';
String.entities['195'] = '&Atilde;';
String.entities['196'] = '&Auml;';
String.entities['197'] = '&Aring;';
String.entities['198'] = '&AElig;';
String.entities['199'] = '&Ccedil;';
String.entities['200'] = '&Egrave;';
String.entities['201'] = '&Eacute;';
String.entities['202'] = '&Ecirc;';
String.entities['203'] = '&Euml;';
String.entities['204'] = '&Igrave;';
String.entities['205'] = '&Iacute;';
String.entities['206'] = '&Icirc;';
String.entities['207'] = '&Iuml;';
String.entities['208'] = '&ETH;';
String.entities['209'] = '&Ntilde;';
String.entities['210'] = '&Ograve;';
String.entities['211'] = '&Oacute;';
String.entities['212'] = '&Ocirc;';
String.entities['213'] = '&Otilde;';
String.entities['214'] = '&Ouml;';
String.entities['215'] = '&times;';
String.entities['216'] = '&Oslash;';
String.entities['217'] = '&Ugrave;';
String.entities['218'] = '&Uacute;';
String.entities['219'] = '&Ucirc;';
String.entities['220'] = '&Uuml;';
String.entities['221'] = '&Yacute;';
String.entities['222'] = '&THORN;';
String.entities['223'] = '&szlig;';
String.entities['224'] = '&agrave;';
String.entities['225'] = '&aacute;';
String.entities['226'] = '&acirc;';
String.entities['227'] = '&atilde;';
String.entities['228'] = '&auml;';
String.entities['229'] = '&aring;';
String.entities['230'] = '&aelig;';
String.entities['231'] = '&ccedil;';
String.entities['232'] = '&egrave;';
String.entities['233'] = '&eacute;';
String.entities['234'] = '&ecirc;';
String.entities['235'] = '&euml;';
String.entities['236'] = '&igrave;';
String.entities['237'] = '&iacute;';
String.entities['238'] = '&icirc;';
String.entities['239'] = '&iuml;';
String.entities['240'] = '&eth;';
String.entities['241'] = '&ntilde;';
String.entities['242'] = '&ograve;';
String.entities['243'] = '&oacute;';
String.entities['244'] = '&ocirc;';
String.entities['245'] = '&otilde;';
String.entities['246'] = '&ouml;';
String.entities['247'] = '&divide;';
String.entities['248'] = '&oslash;';
String.entities['249'] = '&ugrave;';
String.entities['250'] = '&uacute;';
String.entities['251'] = '&ucirc;';
String.entities['252'] = '&uuml;';
String.entities['253'] = '&yacute;';
String.entities['254'] = '&thorn;';
String.entities['255'] = '&yuml;';
String.prototype.htmlspecialchars = function(){
	var t = this.toString();
	var s = new String('');
	for ( var i = 0; i < t.length; i++ ){
		if ( 'undefined' != typeof String.entities[ t.charCodeAt(i).toString() ]  ){
			s += String.entities[ t.charCodeAt(i).toString() ] ;	
		}else{
			s += t.charAt(i);	
		}
	}
	return s;
}


/*
function getClasses(obj){
	if (typeof obj == 'object')
		object = obj;
	else
		object = document.getElementById(obj);
	
	if (object==null) return false;
	
	sclass = object.className;
	return sclass.split(" ");
	
}

/*
function addClass(obj, SclassName){
	if (typeof obj == 'object')
		obj = obj;
	else
		obj = document.getElementById(obj);
	if (obj==null) return false;
	
	getClasses(obj);
	
	var arClass=getClasses(obj);
	
	//Ищем этот класс, если его нет то добавляем
	for (var i=0; i<arClass.length; i++){
		if (arClass[i]==SclassName){ return true;}  //Нашли класс выходим
	}
	obj.className = obj.className + ' ' + SclassName;
	return true;
	
}

function removeClass(obj, SclassName){
	if (typeof obj == 'object')
		obj = obj;
	else
		obj = document.getElementById(obj);
	if (obj==null) return false;
	
	var arClass=getClasses(obj);
	
	//Ищем этот класс, если его нет то добавляем
	var sclass="";
	for (var i=0; i<arClass.length; i++){
		if (arClass[i]!=SclassName){sclass = sclass + ' ' + arClass[i];} //Добавляем все кроме указанного
	}
	obj.className = sclass;
	return true;
	
}
*/






//Класс календаря
//obj - объект или идентификатор объекта где создавать окно (create);
//winid - идентификатор окна
var Calendar = function(obj,winid){
	if (typeof obj == 'object')
		this.obj = obj;
	else
		this.obj = document.getElementById(obj);
	if (this.obj==null) return false;
	
	this.winid = winid; //идентификатор окна
	this.mainClassName = '';
	this.showEffect = 0;
	
	//this.selectedDay = 1;
	//this.selectedMonth = 1;
	//this.selectedYear = 2009;
	this.listMonth = new Array();
	this.varName = '';

	this.dateValue = ''; //Исходная дата в формате this.dateFormat. Если не указана то берется текущая!
	this.date = new Date();
	this.selectedDay = this.date.getDate();
	this.selectedMonth = this.date.getMonth();
	this.selectedYear = this.date.getFullYear();	
	this.startYear = 2009;
	this.endYear = 2020;
	
	this.outID = '';
	this.outPARAM = '';
	this.outScript = '';
	this.dateFormat = 'd.m.Y'; 
	/*в PHP стиле 
	Y - Порядковый номер года, 4 цифры - Примеры: 1999, 2003
	m - Порядковый номер месяца с ведущими нулями - От 01 до 12
	d - День месяца, 2 цифры с ведущими нулями - от 01 до 31
	*/
	return false;
};

Calendar.prototype.init = function(){

	
	if (this.dateValue.length>0){ //Распарсить эту байду
		var regexpstring;
		regexpstring = "";
		Y = 0;
		m = 0;
		d = 0;	
		mat = 1;
		for (i=0; i<this.dateFormat.length; i++){
			switch(this.dateFormat.substr(i,1)){
				case "Y":
					regexpstring +="([0-9]{4})";
					Y = mat;
					mat++;
					break;
				case "m":
					regexpstring +="([0,1][0-9])";
					m = mat;
					mat++;
					break;
				case "d":
					regexpstring +="([0-3][0-9])";
					d = mat;
					mat++;
					break;														
				default:
				regexpstring += this.dateFormat.substr(i,1);
			}
		}	

		re = new RegExp(regexpstring);
	
		if (!re.test(this.dateValue)){
			alert('Формат даты некорректный');
			return false;
		}
		myArray = re.exec(this.dateValue);	

		this.selectedYear = myArray[Y];
		this.selectedMonth = myArray[m]-1;
		if (this.selectedMonth<0)this.selectedMonth=0;
		this.selectedDay = myArray[d];		


	
	}
	this.date.setFullYear(this.selectedYear);
	this.date.setMonth(this.selectedMonth);
	this.date.setDate(this.selectedDay);
	
	if (this.startYear>this.endYear) this.startYear=this.endYear;
	return false;
};



Calendar.prototype.monthChange = function(smonth){
	if (smonth<0 || smonth>11){smonth=0;}
	this.selectedMonth = smonth;
	//xajax.dom.assign(this.varName+"_selmonth","value",smonth);
	this.dayspaint();
	return true;
};

Calendar.prototype.yearChange = function(syear){
	if (syear<1950 || syear>2050){syear=2001;}
	this.selectedYear = syear;
	this.dayspaint();
	return true;
};

Calendar.prototype.dayChange = function(day){
	this.selectedDay = day;
	if (this.selectedDay<1) this.selectedDay = 1;
	//Узнаем количество дней
	var dayCount = new Date(this.selectedYear, this.selectedMonth, 0).getDate();	
	if (this.selectedDay>dayCount) this.selectedDay=dayCount;
	this.dayspaint();
	return true;
};



Calendar.prototype.paint = function(){
	var html;
	
	html = "<div id='"+this.varName+"_my'></div><div id='"+this.varName+"_days'></div><div id='"+this.varName+"_buttons'></div>";
	xajax.dom.assign(this.winid,'innerHTML',html);
	
	this.mypaint();

	this.dayspaint();

	this.buttonspaint();

}


Calendar.prototype.convertDateToFormat = function(){
	var sDate;
	
	var sYear = new String(this.selectedYear);
	var sMonth = new String( (this.selectedMonth*1+1) );
	var sDay = new String(this.selectedDay);	

	
	//.lpad('0',4)
	sDate = this.dateFormat;
	re = /[Y]/;
	sDate = sDate.replace(re,sYear.lpad('0',4));
	re = /[m]/;
	sDate = sDate.replace(re,sMonth.lpad('0',2));
	re = /[d]/;
	sDate = sDate.replace(re,sDay.lpad('0',2));		

	return sDate;
}

Calendar.prototype.returnDate = function(){
	if (this.outID.length>0 && this.outPARAM.length>0){
//		alert(this.convertDateToFormat());
		xajax.dom.assign(this.outID,this.outPARAM,this.convertDateToFormat()); //Соответственно дата приобразовывается к формату...
	}
	
}


//отрисовка месяца и года
Calendar.prototype.mypaint = function(){
	var html;
	
	html = "<table class='headmy'>"+
		"<tr>"+
			"<td class='monthlist'>"+
				"<select onChange='"+this.varName+".monthChange(this.value);' id='"+this.varName+"_selmonth'>";

	var i;
	var la = this.listMonth.length;
	for (i=0; i<la; i++){
		html = html + "<option value='"+(i)+"' "+(i==this.selectedMonth?" selected ":"")+">"+this.listMonth[i]+"</option>";
	};
	
	html = html + "</select>"+
			"<td>"+
			"<td class='yearlist'>"+
				"<select  onChange='"+this.varName+".yearChange(this.value);' id='"+this.varName+"_selyear'>";
	for (i=this.startYear; i<this.endYear; i++){
		html = html + "<option value='"+(i)+"'"+(i==this.selectedYear?" selected ":"")+">"+i+"</option>";
	}
	html = html + "</select>"+
			"<td>"+			
		"</tr>"+
	"</table>";
	
	xajax.dom.assign(this.varName+"_my",'innerHTML',html);	
	
}

//отрисовка месяца и года
Calendar.prototype.dayspaint = function(){
	var html;
	//Узнаем количество дней
	var dayCount = new Date(this.selectedYear, this.selectedMonth-1, 0).getDate();
	//Получить стартовый день недели
	var dayWeek = new Date(this.selectedYear, this.selectedMonth, 1).getDay();
	if (dayWeek==0){dayWeek=7;}
	
	html = "<table class='calendardays'>"+
		"<tr class='weekdays'>"+
			"<td>"+
				"пн"+
			"</td>"+
			"<td>"+
				"вт"+
			"</td>"+
			"<td>"+
				"ср"+
			"</td>"+
			"<td>"+
				"чт"+
			"</td>"+
			"<td>"+
				"пт"+
			"</td>"+
			"<td>"+
				"сб"+
			"</td>"+
			"<td>"+
				"вс"+
			"</td>"+			
		"</tr>";
	
	var currentDayWeek = 1;
	var curDay = 1;
	if (this.selectedDay<1) this.selectedDay=1;
	if (this.selectedDay>dayCount) this.selectedDay=dayCount;
	
	while(dayCount>0 || currentDayWeek>1){
		if (currentDayWeek==1){html = html + "<tr class='days'>";}
		if (dayWeek!=currentDayWeek || dayCount<=0){
			html = html + "<td ondblclick='alert(\"dfdsf\");' class='free'>&nbsp;</td>";
		}else{
			dayWeek++;
			if (dayWeek>7){dayWeek=1;}			
			html = html + "<td ondblclick='alert(\"dfdsf\");' class='";
			if (this.selectedDay==curDay) html = html + "cday"; else  html = html + "day";
			html = html + "' onClick='"+this.varName+".dayChange("+curDay+");' onMouseOver='addClass(this,\"mover\");' onMouseOut='removeClass(this,\"mover\");'>"+curDay+"</td>";
			dayCount--;
			curDay++;				
		}
		currentDayWeek++;
		if (currentDayWeek>7){html = html + "</tr>"; currentDayWeek=1;}
	};
	
	html = html + "</table>";
	

	
	
	
	xajax.dom.assign(this.varName+"_days",'innerHTML',html);	
}

//отрисовка кнопок
Calendar.prototype.buttonspaint = function(){
	var html;
	
	html = "<input type='button' value='ОК' onClick='"+this.varName+".returnDate();"+this.varName+".close();'><input type='button' value='ВЫЙТИ' onClick='"+this.varName+".close();'>";
	
	xajax.dom.assign(this.varName+"_buttons",'innerHTML',html);	
	
}

Calendar.prototype.show = function(){
	xajax.dom.assign(this.winid,'style.visibility','visible'); //Указываем что оно видимо
	if (this.showEffect==0){
		xajax.dom.assign(this.winid,'style.visibility','visible'); //Указываем что оно видимо
	} else if (this.showEffect==1){
		fadeOut(this.winid,2,10);
	};
}

Calendar.prototype.create = function(){

	if (typeof document.getElementById(this.winid) == 'object' && document.getElementById(this.winid)!=null){
		xajax.dom.remove(this.winid); //А если есть то обнуляем его
	};

	this.init();

	xajax.dom.create(this.obj,'div',this.winid); //Создание общего DIV окна
	
	xajax.dom.assign(this.winid,'className',this.mainClassName); //Назначем класс
	xajax.dom.assign(this.winid,'style.visibility','hidden'); //Указываем что оно пока невидимо
	xajax.events.setEvent(this.winid,'onclick','this.style.zIndex=(this.style.zIndex!=getMaxZIndex("div")?Math.round(getMaxZIndex("div"))+1:this.style.zIndex)'); //Назначаем события на клик чтобы поднималось на верх
	xajax.dom.assign(this.winid,'style.zIndex',Math.round(getMaxZIndex('div'))+1); //Поднимаем созданное окно наверх
	xajax.dom.assign(this.winid,'style.left','0px'); //Право ставим авто
	xajax.dom.assign(this.winid,'style.top','0px');	 //Низ ставим авто
	xajax.dom.assign(this.winid,'style.right','auto'); //Право ставим авто
	xajax.dom.assign(this.winid,'style.bottom','auto');	 //Низ ставим авто

	this.paint();
	

	this.show();
	//alert('test - ok');
	
}

Calendar.prototype.close = function(){
	xajax.dom.remove(this.winid);	
}













//Функции для отображения - показа объектов при наведении и убирании мышки (с таймером)
var ShowHide = function(varName, obj_manupulate){
	this.obj_manupulate = obj_manupulate;
	this.varName = varName;
	//varName - имя переменной копии класса
	//obj_manupulate - идентификатор или объект который будет показываться или скрываться
	this.tmr = null;
}

ShowHide.prototype.Run = function(){
	if (typeof this.obj_manupulate == 'object')
		this.obj_manupulate = this.obj_manupulate;
	else
		this.obj_manupulate = document.getElementById(this.obj_manupulate);
	if (this.obj_manupulate==null) return false;	
	return true;
}
ShowHide.prototype.Show = function(){
	this.Run();
	if (this.tmr!=null){
		clearTimeout(this.tmr);	
		this.tmr = null;
	}
	this.obj_manupulate.style.display='block';
	return true;
}
ShowHide.prototype.Hide = function(){
	this.Run();
	if (this.tmr==null){
		this.tmr = setTimeout(""+this.varName+".Hide();",200);
		return;
	}
	this.obj_manupulate.style.display='none';
}



function fnShowProps(obj, objName){
    var result = "";
    for (var i in obj) // обращение к свойствам объекта по индексу
        result += objName + "." + i + " = " + obj[i] + "<br />\n";
	return result;
    //document.write(result);
}


function searchObj2IdParent(obj,id){
//	alert(1);
	if ('undefined' == typeof obj) return false;
	if ('undefined' == typeof obj.getAttribute) return false;
	if (obj.getAttribute('id')==id) return true;
	if ('undefined' == typeof obj.parentNode) return false;
	if (null == obj.parentNode) return false;
	if (searchObj2IdParent(obj.parentNode,id)==true) return true;
	return false;
}
/*
getFormValues = function(parent) {
	
	var submitDisabledElements = false;
	if (arguments.length > 1 && arguments[1] == true)
		submitDisabledElements = true;
	
	var prefix="";
	if(arguments.length > 2)
		prefix = arguments[2];
	
	if ("string" == typeof(parent))
		parent = $(parent);
	
	var aFormValues = {};
	
//		JW: Removing these tests so that form values can be retrieved from a specified
//		container element like a DIV, regardless of whether they exist in a form or not.
//
//		if (parent.tagName)
//			if ("FORM" == parent.tagName.toUpperCase())

	if (parent)
		if (parent.childNodes)
			_getFormValues(aFormValues, parent.childNodes, submitDisabledElements, prefix);
	//alert('end getFormValues');
	alert(fnShowProps(aFormValues),'test');
	return aFormValues;
}
*/
/*
	Function: _getFormValues
	
	Used internally by <xajax.tools.getFormValues> to recursively get the value
	of form elements.  This function will extract all form element values 
	regardless of the depth of the element within the form.
*//*
_getFormValues = function(aFormValues, children, submitDisabledElements, prefix)
{
	//return;
	var iLen = children.length;
	for (var i = 0; i < iLen; ++i) {
		var child = children[i];
		if ('undefined' != typeof child.childNodes){
			//alert(child.name);
			_getFormValues(aFormValues, child.childNodes, submitDisabledElements, prefix);
		}
		
		if (child.name && (child.tagName=='INPUT'||child.tagName=='SELECT'||child.tagName=='TEXTAREA')){
			_getFormValue(aFormValues, child, submitDisabledElements, prefix);
		//	alert(child.name);
			//alert(aFormValues);
		}
	//	alert(child.nodeType + ' ' + child.tagName);
	}
	//alert ('end _getFormValues');
}
*/
/*
	Function: _getFormValue
	
	Used internally by <xajax.tools._getFormValues> to extract a single form value.
	This will detect the type of element (radio, checkbox, multi-select) and 
	add it's value(s) to the form values array.
*//*
_getFormValue = function(aFormValues, child, submitDisabledElements, prefix)
{
	
	if (!child.name)
		return;
	
	
	if (child.disabled)
		if (true == child.disabled)
			if (false == submitDisabledElements)
				return;
				
	if (prefix != child.name.substring(0, prefix.length))
		return;
		
	if (child.type)
		if (child.type == 'radio' || child.type == 'checkbox')
			if (false == child.checked)
				return;

	var name = child.name;

	var values = [];
	if ('select-multiple' == child.type) {
		var jLen = child.length;
		for (var j = 0; j < jLen; ++j) {
			var option = child.options[j];
			if (true == option.selected)
				values.push(option.value);
		}
	} else {
		values = child.value;
	}
	
	var keyBegin = name.indexOf("[");
	if (0 <= keyBegin) {
		var n = name;
		var k = n.substr(0, n.indexOf("["));
		var a = n.substr(n.indexOf("["));
		if (typeof aFormValues[k] == 'undefined')
			aFormValues[k] = [];
		var p = aFormValues; // pointer reset
		while (a.length != 0) {
			var sa = a.substr(0, a.indexOf("]")+1);
			a = a.substr(a.indexOf("]")+1);
			p = p[k];
			k = sa.substr(1, sa.length-2);
			if (k == "")
				k = p.length;
			if (typeof p[k] == 'undefined')
				p[k] = [];
		}
		p[k] = values;
	} else {
		aFormValues[name] = values;
	}
}

$ = function(sId) {
	if (!sId)
		return null;
	
	var oDoc = document;

	var obj = oDoc.getElementById(sId);
	if (obj)
		return obj;
		
	if (oDoc.all)
		return oDoc.all[sId];

	return obj;
}
*/


/*
	Конверт HTML текст в BB
*/
function HTMLTOBB(HTMLText){
	re = /(<b>)([\w\W]+?)(<\/b>)/ig
	HTMLText = HTMLText.replace(re,"[b]$2[/b]");
	re = /(<blockquote>)([\w\W]+?)(<\/blockquote>)/ig
	HTMLText = HTMLText.replace(re,"[quote]$2[/quote]");
	
	re = /(?:<a(?:[\w\W]+?)href=(?:"|')([\w\W]+?)(?:"|')(?:[\w\W]*?)>)([\w\W]+?)(?:<\/a>)/ig
	HTMLText = HTMLText.replace(re,"[url=$1]$2[/url]");		

	re = /(<br>)/ig
	HTMLText = HTMLText.replace(re,"\r");
	
	HTMLText = HTMLText.replace(/&amp;/ig,"&");
	return HTMLText;
}
	
	

//Определение координат элемента на страницы
function getElementPosition(elemId)
{
var elem = typeof elemId == 'object' ? elemId : document.getElementById(elemId);
var w = elem.offsetWidth;
var h = elem.offsetHeight;
var l = 0;
var t = 0;
while (elem)
{
l += elem.offsetLeft;
t += elem.offsetTop;
elem = elem.offsetParent;
}
return {"left":l, "top":t, "width": w, "height":h};
}

//Крассбраузерная обертка для получения элемента по ID
function cmGetObject (idname){
	if (document.getElementById) {
			return document.getElementById(idname);
	} else if (document.all) {
			return document.all[idname];
	} else if (document.layers) {
			return document.layers[idname];
	} else {
			return null;
	}
}


var cookieEnabled=(navigator.cookieEnabled)? true : false
if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled){ 
  document.cookie="testcookie";
  cookieEnabled=(document.cookie=="testcookie")? true : false;
  document.cookie="";
}


