/*
 * Copyright - Kotelnikov Dmitriy
 * Created -   2009/4/1
 */
 
var filterClassesArray = [];
var tableElement = 0, i;

var tableRows;

function parse_timetable (){

	var refresh = function(){
		return 0;
	};

	if( (tableElement = $('#page-body .timetable .table > table:first')).length > 0 ){

		var isLocked = 0;

		tableRows = tableElement.find(' > tbody > tr');

		var tableFakeRows = tableElement.find('> tfoot > tr');

			var tableHeader = tableElement.find('> thead > tr');

		var rowsCount = tableFakeRows.length > 0 ? 20 : 0;

		var update = function(){
			tableRows.mouseover(
				function(){
					$(this).addClass('a');
				}
			).mouseout(
				function(){
					$(this).removeClass('a');
				}
			);
		};

		refresh = function(isUpdate){
			var rowIndex = 0, that, isShow;
		
			tableRows.each(
				function(){
					that = $(this);
					isShow = 1;

					for(i = 0; i < filterClassesArray.length; i++)
						if( !that.hasClass(filterClassesArray[i]) ){
							isShow = 0;
							break;
						}
					
					/*console.log(isShow,filterClassesArray)*/
					
					if( isShow && (rowsCount == 0 || rowIndex <= rowsCount) ){
						if( rowIndex % 2 == 0 )
							that.addClass('o');
						else
							that.removeClass('o');

						rowIndex++;

						that.removeClass('hidden');
						return;
					}
					that.addClass('hidden');
				}
			);
			

			if( rowsCount != 0 ){
				tableFakeRows.addClass('hidden');
				if( rowIndex < rowsCount ){
					for(i = 0; i <= rowsCount - rowIndex; i++ ){
						if( tableFakeRows[i] )
							$(tableFakeRows[i]).removeClass('hidden');
						else
							tableElement.find(' > tfoot:first').append($(tableFakeRows[0]).clone());
					}
					tableFakeRows = tableElement.find(' > tfoot:first > tr');
				}
			}

			if( isUpdate )
				update();
		};

		refresh(1);

		var cache = 0, runSort = 0, timeout = 500, rowparse = 10;

		isLocked = 1;
		var makecache = function(object){
			tableHeader.removeClass('nojs');

			cache = [];
			var value = 0;
			var cacher = function(){
				if( value >= tableRows.length ){
					isLocked = 0;
					if( runSort )
						runSort.click();
				}
				else{
					for(var j = 0; j < rowparse; j++){
						if( value == tableRows.length )
							break;
						cache.push([$(tableRows[value])]);
						$(tableRows[value]).find('> td').each(
							function(){
								cache[value].push($(this).text().replace(/\s+/, ''));
							}
						);
						value++;
					}
					setTimeout(cacher, timeout);
				}
			};
			cacher();
		};

		if( tableHeader.hasClass('nojs') )
			makecache();

		tableHeader.find('th').each(
			function(columnIndex){
				$(this).find('a').click(
					function(){
						if( isLocked ){
							timeout = 1;
							rowparse = 50;
							runSort = $(this);
							return false;
						}

						isLocked = 1;

						var that = $(this);
						var iASC = -1;
						if( that.hasClass('asc') ) {
							that.removeClass('asc');
							that.addClass('desc');
							iASC = 1;
						}
						else{
							tableHeader.find('th > a').removeClass('asc').removeClass('desc');
							that.addClass('asc');
						}

						var compare = function(a, b) {
							a = a[columnIndex + 1];
							b = b[columnIndex + 1];
							if( a > b )
								return -iASC;
							if( a < b )
								return iASC;
							return 0;
						};

						cache.sort( compare );
						for(i = 0; i < cache.length; i++)
							cache[i][0].remove();

						for(i = 0; i < cache.length; i++)
							tableElement.append(cache[i][0]);

						tableRows = tableElement.find(' > tbody > tr');
						refresh(1);
						isLocked = 0;
						return false;
					}
				)
			}
		);

	}
	$('#page-body .scroller').each(
		function(){
			var bDrag = 0, oDragging = 0 , iMouse = 0, iRealOffset = 0;
			var scroller = $(this).removeClass('hidden');
			scroller.prev().removeClass('hidden');
			var aObjects = scroller.find('li');
			var oSelected = 0;
			var oMoveToNew = 0,oMoveFrom = scroller.find('.se');
			var oMoveFromText = oMoveFrom.find('a.invisible');

			scroller.mousedown(
				function(e){
					if(e.stopPropagation)
						e.stopPropagation();
					else
						e.cancelBubble=true;

					if(e.preventDefault)
						e.preventDefault();
					else
						e.returnValue = false;
					return false;
				}
			);

			var filter = function(){
				if( oSelected && oSelected.length > 0 ){
					var sFilter = "";

					if( oSelected[0].id ){
						var sFilter = oSelected[0].id.substr(0,1);
						var aFilterClassNew = new Array();
						for(var j = 0; j < filterClassesArray.length; j++)
							if( filterClassesArray[j].substr(0,1) != sFilter ){
								aFilterClassNew.push(filterClassesArray[j]);
							}
						filterClassesArray = aFilterClassNew;
						if( oSelected[0].id.length != 1 ){
							filterClassesArray.push(oSelected[0].id);
						}
					}
					refresh();
					bDrag = false;
					oSelected.find('a').click();
				}
			};

			var moveto = function(oLink,bDoAlways){
				var that = $(oLink);

				if( !that.parents('li:first').hasClass('selected') || bDoAlways ){
					var oMoveTo = that.parents('li:first');
					oSelected = oMoveTo;
					var oMoveToText = oMoveTo.find('> a');

					if( oMoveFrom.length > 0 && oMoveTo.length > 0 ){
						var oPositionFrom = my.getXY(oMoveFrom[0]);
						var oPositionTo = my.getXY(oMoveTo[0]);
						that.parents('ul:first').find('li.selected').removeClass('selected');
						oMoveTo.addClass('selected');
						oMoveFromText.html(oMoveToText.html());

						oMoveFrom.remove();
						oMoveTo.append(oMoveFrom);
						oMoveFrom.css('left',oPositionFrom.x - oPositionTo.x);

						$t(oMoveFrom).tween({
							left:0,
							onComplete:filter,
							time:0.2
						});
					}
				}
			};

			$(window).mouseup(
				function(){
					if( oDragging && bDrag ){
						aObjects.removeClass('stick');
						if( oMoveToNew ){
							moveto($(oMoveToNew).find('> a')[0],1);
						}
						else{
							var iPosition = oMoveFrom[0].parentNode.offsetLeft + iRealOffset;

							for(var i = 0; i < aObjects.length; i++){
								if( aObjects[i].offsetLeft <= iPosition && aObjects[i].offsetLeft + aObjects[i].clientWidth >= iPosition  ){
									if( iRealOffset > 0 && i + 1 < aObjects.length )
										moveto($(aObjects[i+1]).find('> a')[0],1);
									else
										moveto($(aObjects[i]).find('> a')[0],1);
									break;
								}
							}
						}
					}
					oDragging = 0;
					bDrag = 0;
				}
			).mousemove(
				function(e){
					var iOffset = e.clientX - iMouse;
					if( Math.abs(iOffset) > 3 && oDragging ){
						bDrag = 1;
					}
					if( oDragging && bDrag ){
						if( oMoveFrom[0].parentNode.offsetLeft + iOffset <= 0 )
							iRealOffset = -oMoveFrom[0].parentNode.offsetLeft;
						else if( oMoveFrom[0].parentNode.parentNode.clientWidth - iOffset - oMoveFrom[0].parentNode.offsetLeft - oMoveFrom[0].clientWidth <= 0 )
							iRealOffset = oMoveFrom[0].parentNode.parentNode.clientWidth - oMoveFrom[0].parentNode.offsetLeft - oMoveFrom[0].clientWidth;
						else
							iRealOffset = iOffset;

						var iPosition = oMoveFrom[0].parentNode.offsetLeft + iRealOffset;
						oMoveFrom[0].style.left = iRealOffset + 'px';

						aObjects.removeClass('stick');
						for(var i = 0; i < aObjects.length; i++){
							if( aObjects[i].offsetLeft - 10 <= iPosition && aObjects[i].offsetLeft + 10 >= iPosition ){
								oMoveToNew = aObjects[i];
								$(oMoveToNew).addClass('stick');
								oMoveFrom[0].style.left = (aObjects[i].offsetLeft - oMoveFrom[0].parentNode.offsetLeft) + 'px';
							}
						}
					}
				}
			);

			scroller.find('li > a').click(
				function(){
					if( bDrag )
						return false;

					moveto(this);

					return false
				}
			).mousedown(
				function(e){
					iMouse = e.clientX;
					if( $(this).parents('li:first').hasClass('selected') ){
						oDragging = $(this);
					}
				}
			);
		}
	);
}

$(function(){
	parse_timetable();
	if( $('body#timetable_page .timetable').length ){
		setTimeout(function(){
			window.location.reload();
		},1000 * 60 * 3);
	}
	

	
	
	if( $('body#home_page .timetable').length ){
		load_timetable_home_timerID = setTimeout('load_timetable_home()',1000 * 60 * 3);
	}
	
	
});

function load_timetable_home(){
	clearTimeout(load_timetable_home_timerID)
	$('.timetable div.table').load('/timetable_js/', function(response, status, xhr) {
		if (status != "error") {
			parse_timetable();
			load_timetable_home_timerID = setTimeout('load_timetable_home()',1000 * 60 * 3);
		}
	});
}