include.js ( 'ajaxLoad.js' );
include.js ( 'ajaxLoadForm.js' );
include.js ( 'changeBackground.js' );
include.js ( 'menu.js' );


Style.Extend (

	{
		DisplayNoneHeight : function ( object ) {
		
			var tempPosition = object.style.position;
			var tempTop = object.style.top;
			var tempLeft = object.style.left;

			object.style.position = 'absolute';
			object.style.top = '-1000px';
			object.style.left = '-1000px';
			
			object.style.display = 'block';
			var realHeight = object.offsetHeight;
			
			object.style.display = 'none';
			object.style.position = tempPosition;
			object.style.top = tempTop;
			object.style.left = tempLeft;

			return realHeight;
				
		},
		
		Opacity : {
			
			Set : function ( element, value ) {
		
				var arVersion = navigator.appVersion.split("MSIE");
				var version = parseFloat(arVersion[1]);
				
				if ( browser.isIE && version < 7 ) {
					element.style.filter = 'alpha(opacity=' + value + ')';
				}
				else {
					element.style.opacity = value / 100;
				}		
			}
			
		}
	}
	
);

var plashka = {};

plashka.Extend(

	{
		/* Максимальная высота окошка */
		height : 0,

		/* Высота контента внутри окошка */
		scrollHeight : 0,
		
		/* Текущая высота окошка */
		nowHeight : 10,

		speed : 10,
		
		/**
		 * Открываем (именяем размер) плашки
		 */
		open : function ( ) {

			if ( callbackLayer.startOpen ) {
				callbackLayer.startOpen();
			}
			
			this.initVar( );
			this.hideElements();
			
			$("content_body").style.display = 'none';
			$("content").style.display = 'block';
			$('bg_size_content').style.height = this.nowHeight + 'px';

			Effects.callbackResize = this.steepSecond.bind( this );
			Effects.resizeHeight ( $("bg_size_content"), this.speed, this.nowHeight, this.height );

		},
		
		/**
		 * Закрываем плашку
		 */
		close : function ( ) {

			if ( $("content_body") ) {
				
				if ( callbackLayer.startOpen ) {
					callbackLayer.startClose();
				}
				
				$("content_body").style.display = 'none';
	
				var context = this;
				
				Effects.callbackResize = function ( ) { 
					
					$("content").style.display = 'none'; 
					context.showElements();
					context.nowHeight = 10;
					
					if ( callbackLayer.endClose ) {
						callbackLayer.endClose();
					}
	
				}
				
				Effects.resizeHeight ( $("bg_size_content"), this.speed, this.nowHeight, 10 );
			
			}
			
		},
		
		/* private  */
		
		/**
		 * Шаг поле того как плашка раскрылась
		 */
		steepSecond : function ( ) {

			this.nowHeight = this.height;
			
			$("content_body").style.display = 'block';
			this.initScroll( );
			
			if ( callbackLayer.endOpen ) {
				callbackLayer.endOpen();
			}
			
		},

		/**
		 * Инициализируем все нужные переменные
		 */
		initVar : function ( ) {

			this.height = document.body.offsetHeight / 2 + 50;
			this.scrollHeight = this.height - 70;

		},
		
		/**
		 * Прячем все "ненужные элементы"
		 */
		hideElements : function ( ) {
			
			$("banner_prog").style.display		= 
				$("curent").style.display		= 
				$("curent_bg").style.display		= 
				$("main_menu").style.display	= 
				$("back_menu").style.display	= 'none';

		},
		
		/**
		 * Показываем все "ненужные элементы"
		 */
		showElements : function ( ) {
			
			$("banner_prog").style.display		= 
				$("curent").style.display		= 
				$("curent_bg").style.display		= 
				$("main_menu").style.display	= 
				$("back_menu").style.display	= 'block';

		},

		/**
		 * Иниацилизируем скролл
		 */
		initScroll : function ( ) {

			$("mycustomscroll").style.height = this.scrollHeight + 'px';
			CSBfleXcroll('mycustomscroll');

		}
	
	}

);

var Effects = {};

Effects.Extend (
	
	{
	
		callbackFade : null,
		
		/**
		 * Плавное исчезание элемента
		 */
		fadeOut : function ( element, speed, start, end ) {
			
			var startFade = (start) ? start : 100;
			var endFade = (end) ? end : 0;
			var speedFade = (speed) ? speed : 30;
			

			this.fade( element, speedFade, startFade, endFade );
			
		},
		
		/**
		 * Плавное проявление элемента
		 */
		fadeIn : function ( element, speed, start, end ) {
			
			var startFade = (start) ? start : 0;
			var endFade = (end) ? end : 100;
			var speedFade = (speed) ? speed : 30;

			this.fade( element, speedFade, startFade, endFade );
			
		},
		
		
		/* private */
		
		/**
		 * Плавное изменения полупрозрачноси
		 */
		fade : function ( element, speed, start, end ) {

			var decr = 10;
			
			if ( start >= end ) {
				var nStart = start - decr;
			}
			else {
				var nStart = start + decr;
			}

			Style.Opacity.Set( element, start );
			
			if ( (nStart > start && nStart <= end) || (nStart < start && nStart >= end) ) {

				setTimeout( this.fade.Bbind( this, element, speed, nStart, end ), speed );
				
			}
			else if ( this.callbackFade != null )  {
				
				this.callbackFade( element );
				
			}
			
		},

		
		
		callbackResize : null,

		resizeHeight : function ( element, speed, startHeight, endHeight ) {
			
			var decr = 20;
			
			if ( startHeight >= endHeight ) {
				var nStart = startHeight - decr;
			}
			else {
				var nStart = startHeight + decr;
			}
			
			if ( (nStart > startHeight && nStart <= endHeight) || (nStart < startHeight && nStart >= endHeight) ) {

				element.style.height = nStart + 'px';
				setTimeout( this.resizeHeight.Bbind( this, element, speed, nStart, endHeight ), speed );
				
			}
			else if ( this.callbackResize != null )  {
				
				this.callbackResize( element );
				
			}
			
		}
		
	}

);

var side = {
	
	speed : 20, 
	
	/* public */
	
	/**
	 * Открытие плашки
	 */	
	open : function ( element ) {

		Effects.callbackFade = this.steepBeforeOpen.bind( this );
		Effects.fadeOut( element, this.speed, 100, 10 );
		
	},

	/**
	 * Закрытие плашки
	 */
	close : function ( element ) {

		Effects.callbackFade = this.steepBeforeClose.bind( this );
		Effects.fadeOut( element, this.speed, 100, 10 );
		
	},
	
	
	/* private */
	
	/**
	 * Шаг перед тем как открыть плашку
	 */
	steepBeforeOpen : function ( element ) {
		
		this.setElementProp( element, 'open', this.close.Bbind( this, element ) );
		
	},
	
	/**
	 * Шаг перед тем как закрыть плашку
	 */
	steepBeforeClose : function ( element ) {
		
		this.setElementProp( element, 'close', this.open.Bbind( this, element ) );
		
	},

	/**
	 * Установить свойства на 2 шаге
	 */
	setElementProp : function ( element, className, onclickFunc ) {
		
		var openElement = $('opener');
		openElement.className = className;
		element.onclick = onclickFunc;

		Effects.callbackFade = null;
		Effects.fadeIn( element, this.speed, 10, 100 );
		
	}
	
}







var setAjaxLink = function ( e, parent ) {
	
	if ( parent ) {
		links = $t( 'a', parent );
	}
	else {
		links = $t( 'a' );
	}

	for ( var i = 0, length = links.length; i < length; i++ ) {
		
		if ( links[i].href.match('click.php') || links[i].href.lastIndexOf(_root) == -1 || links[i].href.lastIndexOf('download_files') != -1 ) {
			continue;
		}
		else {

			if ( !links[i].onclick ) {
				links[i].onclick = ajaxLoad.url.Bbind( ajaxLoad, links[i].href );
			}
			else {
	
				var hr = links[i].href.split( _root );
				links[i].href ='#' + hr[1];
			}

		}
		
	}

}



/**
 * Функция для фикса бага с формами в IE6
 * при перезагрузки флэшки-пустышки пропадает фокус из поля
 */
var setEventsFormElement = function ( parent ) {
	
	if ( browser.isIE && navigator.appVersion.match('6') == 6 ) {
		
		var array = new Array();

		
		
		var funcFocus = function ( ) {
			
			historyPage.StopDisplatch();

		}
		
		var funcBlur = function ( ) {
			
			historyPage.StartDispatch();
			
		}
		
		// назначаем обработчик для input type="text"
		var element = $t('input', parent);
		
		for ( var i=0, length=element.length; i<length; i++ ) {
			
			if ( element[i].type == 'text' ) {
				
				element[i].onfocus = funcFocus;
				element[i].onblur = funcBlur;
				
			}
			
		}
		
		// назначаем обработчик для textarea
		var element = $t('textarea', parent);
		for ( var i=0, length=element.length; i<length; i++ ) {
			
			element[i].onfocus = funcFocus;
			element[i].onblur = funcBlur;

		}
		
	}
	
}


/**
 * Объект для смены фотографии пользователя на главной странице
 *
 */
var onlineChangeUser = {
	
	/**
	 * Свободный ли сейчас блок (для слайдинга)
	 */
	free : true,
	
	/**
	 * Timeout для слайдинга
	 */
	timeOut : 5,
	
	/**
	 * Установка element в активное состояние
	 */
	set : function ( element ) {

		var photoPath = element.getAttribute('img');
		
		var arVersion = navigator.appVersion.split("MSIE");
		var version = parseFloat(arVersion[1]);

		if( browser.isIE && version < 7 ) {
			$('dj_select').style.filter = strFilter +  "(src='" + photoPath + "', sizingMethod='scale')";
		}
		else {
			$('dj_select').src = photoPath
		}
		
		this.resetSelection();
		element.className = 'here';
		
	},
	
	/**
	 * Сброс выделения
	 */
	resetSelection : function( ) {
		
		var items = $t('h2', $('users_online'));
		
		for ( var i = 0, length = items.length; i < length; i++ ) {
			items[i].className = '';
		}
		
	},

	/**
	 * Запуска слайдинга
	 */
	startSlide : function ( ) {
		
		Timer.Start( this.slide.Bbind(this), this.timeOut );
		
	},

	/*
	 * Процесс слайдинга
	 */
	slide : function ( ) {
		
		if ( this.free == true ) {
			
			var items = $t('h2', $('users_online'));
			var nextElementIndex = 0;
			
			for ( var i = 0, length = items.length; i < length; i++ ) {
				
				if ( items[i].className == 'here' ) {
	
					if ( i + 1 >= length ) {
						nextElementIndex = 0;
					}
					else {
						nextElementIndex = i + 1;
					}

					this.set( items[(( i + 1 >= length ) ? 0 : ++i )] );	
					break;
	
				}
	
			}

		}
		
	},

	/**
	 * Инициализация
	 */
	init : function ( ) {

		var items = $t('h2', $('users_online'));
		
		for ( var i = 0, length = items.length; i < length; i++ ) {
			
			items[i].firstChild.onmouseover = this.elementMouseOuver.Bbind(this, items[i]);
			items[i].firstChild.onmouseout = this.elementMouseOut.Bbind(this, items[i]);
			
		}
		
		this.startSlide( );
		
	},

	/**
	 * Обработчик мыши при наведении на элемент
	 */
	elementMouseOuver : function ( element ) {
		
		this.free = false;
		this.set( element );
		
	},

	/**
	 * Обработчик мыши при уведении с элемента
	 */
	elementMouseOut : function ( element ) {

		this.free = true;
		
	}
	
}

Events.Attach( window, 'load', onlineChangeUser.init.bind(onlineChangeUser) );


/**
 * Callback функции при открытии и закрытии плашки
 *
 */
var callbackLayer = {
		
	startOpen : function ( ) { },
	
	endOpen : function ( ) { },
	
	startClose : function ( ) {	},
	
	endClose : function ( ) { }
	
};



function FormSubmit( form ) {
	
	var url = document.location.toString().split('#');
	var array = new Array();

	var inputs = $t('input', form);

	for ( var i=0, length=inputs.length; i<length; i++ ) {

		array[ inputs[i].name ] = inputs[i].value;
		
	}

	var textarea = $t('textarea', form);

	for ( var i=0, length=textarea.length; i<length; i++ ) {
		
		array[ textarea[i].name ] = textarea[i].value;
		
	}
	
	var sep = /\?/.test(url);
	
	ajaxLoadForm.loadUrl( _root + url[1] + (sep ? '&' : '?') + 'post=1', array);
	
}

function deleteComment( idComment ) {
	
	var url = document.location.toString().split('#');
	var array = new Array();
		
	array['idComment'] = idComment.toString();
	
	ajaxLoadForm.loadUrl( _root + url[1] + '&delete=1', array);
	
	
}

function editComment( idComment ) {
	
	var url = document.location.toString().split('#');
	var array = new Array();

	array['idComment'] = idComment.toString();
	
	ajaxLoadForm.loadUrl( _root + url[1] + '&edit=1', array);
	
}

var getFlash = function ( flashId ) {
			
	if (browser.isIE) {
		return window[flashId];
	}
	else {
		return document[flashId];
	}
	
}

function closePlayers() {
	
	var elements = $c_arr('top_show');

	for ( var i=0, length=elements.length; i<length; i++ ) {
		elements[i].className = 'top';
	}
	
	var elements = $c_arr('top2_show');
	
	for ( var i=0, length=elements.length; i<length; i++ ) {
		elements[i].className = 'top2';
	}
	
}

function openPlayer( element, parent ) {
	
	var elements = $c( 'top_show', parent, true );
	var flash = '';
		
	closePlayers();
	
	for ( var i=0, length=elements.length; i<length; i++ ) {
		
		if ( elements[i] == element ) {
			continue;
		}
		
		flash = $c_arr('for_flash', elements[i]);

		flash[0].innerHTML = '';
		reInitPlayers(flash);
		
		
		elements[i].className = 'top';
		
	}


	element.className = 'top top_show';
	
}

function openPlayerPretendents( element, parent ) {
	
	var elements = $c( 'top2_show', parent, true );
		
	closePlayers();

	for ( var i=0, length=elements.length; i<length; i++ ) {
		
		if ( elements[i] == element ) {
			continue;
		}
		
		elements[i].className = 'top2';
		
		flash = $t('object', elements[i]);
		
	}

	
	element.className = 'top2 top2_show';
	
}


var setSheccmateBackground = function () {
	
	var items = $c('prog_list');
	
	for(var i = 0, length = items.length; i < length - 1; i=i+2) {
		
		if (items[i].offsetHeight > items[i+1].offsetHeight) {
			
			items[i+1].style.height = items[i].offsetHeight + 'px';
		}
		else {
			
			items[i].style.height = items[i+1].offsetHeight + 'px';
		}
	}

}
