var timers = new Array();
timers['controlsize'] = new Array();
timers['filters'] = new Array();
var modalDiv = new Array();
var filterDiv = new Array();
var scrollSpeed = 100;
var filterElement = new Array();

function control(state, id){
	switch(state){
		case 'minimize':
			timers['controlsize']['percent'] = 100;
			timers['controlsize']['direction'] = 'minimize';
			timers['controlsize']['timer'] = setInterval("control('resize'," + id + ")", 10);
			timers['controlsize']['item'] = document.getElementById('el' + id).tBodies[0];
			timers['controlsize']['lock'] = true;
			var theimg = document.getElementById('c' + id);
			theimg.src = 'images/maximize_up.png';
			theimg.onmouseover = function(){	this.src='images/maximize_over.png'; }
			theimg.onmouseout = function(){	this.src='images/maximize_up.png'; }
			theimg.onclick = function(){	control('maximize',id); }
			var sPage = window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1).replace('.','');
			_Cookie('write', sPage + id, 'minimize');
			break;
		case 'maximize':
			timers['controlsize']['percent'] = 0;
			timers['controlsize']['direction'] = 'maximize';
			timers['controlsize']['timer'] = setInterval("control('resize'," + id + ")", 10);
			timers['controlsize']['item'] = document.getElementById('el' + id).tBodies[0];
			timers['controlsize']['item'].style.display = '';
			timers['controlsize']['lock'] = true;
			var theimg = document.getElementById('c' + id);
			theimg.src = 'images/minimize_up.png';
			theimg.onmouseover = function(){	this.src='images/minimize_over.png'; }
			theimg.onmouseout = function(){	this.src='images/minimize_up.png'; }
			theimg.onclick = function(){	control('minimize',id); }
			var sPage = window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1).replace('.','');
			_Cookie('destroy', sPage + id);
			break;
		case 'resize':
			switch(timers['controlsize']['direction']){
				case 'minimize':
					timers['controlsize']['percent'] = timers['controlsize']['percent'] - 5;
					if(timers['controlsize']['percent'] <= 0){
						clearInterval(timers['timer']);
						timers['controlsize']['item'].style.display = 'none';
						timers['controlsize']['lock'] = false;
					}
					break;
				case 'maximize':
					timers['controlsize']['percent'] = timers['controlsize']['percent'] + 5;
					if(timers['controlsize']['percent'] >= 100){
						clearInterval(timers['timer']);
						timers['controlsize']['lock'] = false;
					}
					break;
			}
			try{ 
				timers['controlsize']['item'].style.height = (timers['controlsize']['percent'] / 100) + '%'; 
				timers['controlsize']['item'].style.opacity = (timers['controlsize']['percent'] / 100); 	
			} 
			catch(e){
				timers['controlsize']['percent'] = (timers['controlsize']['precent'] == 95)? 0 : 100;
			}
			break;
	}
}
function rowColors(tableid){
	try{
		var tbl = document.getElementById(tableid).getElementsByTagName('tr');
		var showRow = 0;
		for(i=1; i<tbl.length; i++){
			if(tbl[i].style.display == 'none'){
				continue;
			}
			tbl[i].className = (showRow % 2 == 0)? 'odd' : 'even';
			showRow++;
		}
	}
	catch(e){ }
}
function _filters(option){
	var item = document.getElementById('floatControls');
	switch(option){
		case "setup":
			//get left boundary of pageContent
			var eLeft = 0;	var eTop = 0; 
			filterElement['left'] = document.getElementById('menu');
			filterElement['top'] = document.getElementById('el0');
			var oElement = filterElement['left'];
			while(oElement != null){
				eLeft += oElement.offsetLeft;
				oElement = oElement.offsetParent;
			}
			var oElement = filterElement['top'];
			while(oElement != null){
				eTop += oElement.offsetTop;
				oElement = oElement.offsetParent;
			}			
			//eLeft += filterElement.offsetWidth + 5;
			itemWidth = 800 - (filterElement.offsetWidth + 5);
			item.style.left = eLeft + 'px';
			item.style.top = eTop + 'px';
			//invoke filter in case it's a page refresh or something
			doFilters();
			//add scroll event listener
			if(document.addEventListener){ 
				document.addEventListener('scroll', catchScroll, false); 
				document.addEventListener('resize', catchScroll, false);
			}
			if(document.body.attachEvent){ 
				document.body.attachEvent('onscroll', catchScroll); 
				document.body.attachEvent('onresize', catchScroll); 
			}
			break;
		case 'minimize':
			item.style.zIndex = '0';
			item.style.width = 800 - (item.offsetWidth + 5) + 'px';
			document.getElementById('floatControlsSmall').style.display = '';
			document.getElementById('filters').style.display = 'none';
			break;
		case 'maximize':
			item.style.zIndex = '100';
			item.style.width = '300px';
			document.getElementById('floatControlsSmall').style.display = 'none';
			document.getElementById('filters').style.display = '';
			break;
		case 'positionScroll':
			timers['filters']['iteration']++;
			var eLeft = 0; 
			var startLeft = timers['filters']['startLeft'];
			var curLeft = parseInt(item.style.left.replace(/px/, '')); 
			var finalLeft = timers['filters']['left'];
			if(startLeft == finalLeft){
				eLeft = finalLeft;
			}
			else{
				eLeft = curLeft - ((startLeft - finalLeft)/20 * timers['filters']['iteration']);
				if((startLeft > finalLeft && curLeft <= finalLeft)
				|| (startLeft < finalLeft && curLeft >= finalLeft))
				{
					eLeft = finalLeft;
					clearInterval(timers['filters']['scrollTimer']);
					timers['filters']['iteration'] = 0;
				}				
			}
			var eTop = 0; 
			var startTop = timers['filters']['startTop'];
			var curTop = parseInt(item.style.top.replace(/px/, '')); 
			var finalTop = timers['filters']['top'];			
			if(startTop == finalTop){
				eTop = finalTop;
			}
			else{
				eTop = curTop - ((startTop - finalTop)/20 * timers['filters']['iteration']);
				if((startTop > finalTop && curTop <= finalTop)
				|| (startTop < finalTop && curTop >= finalTop))
				{
					eTop = finalTop;
					clearInterval(timers['filters']['scrollTimer']);
					timers['filters']['iteration'] = 0;
				}				
			}			
			item.style.left = eLeft + 'px';
			item.style.top = eTop + 'px';
			break;
	}
}
function doFilters(field){
	if(field == 'clear'){
		var arrayMonth = {
			0:'Jan', 1:'Feb', 2:'Mar', 3:'Apr', 4:'May', 5:'Jun', 
			6:'Jul', 7:'Aug', 8:'Sep', 9:'Oct', 10:'Nov', 11:'Dec'
		};	
		for(i=0; i<document['filterForm']['venues'].length; i++){
			document['filterForm']['venues'][i].checked = true;
		}
		var today = new Date();
		document.forms[0]['fromDate'].value = today.getDate() + ' ' + arrayMonth[today.getMonth()] + ' ' + today.getFullYear();
		var events = document.getElementById('el1').tBodies[0].childNodes[document.getElementById('el1').tBodies[0].childNodes.length-1];
		for(i=0; i<events.childNodes.length; i++){
			if(events.childNodes[i].tagName == 'TH'){
				document.forms[0]['toDate'].value = events.childNodes[i].innerHTML;
			}
		}
		document['filterForm']['keyword'].value = '';
	}
	//set up venue filter
	var venues = new Array();
	for(i=0; i<document['filterForm']['venues'].length; i++){
		if(document['filterForm']['venues'][i].checked == false){
			venues[venues.length] = document['filterForm']['venues'][i].value;
		}
	}
	//set up date filter
	var monthArray = {
		'Jan':0, 'Feb':1, 'Mar':2, 'Apr':3, 'May':4, 'Jun':5, 'Jul':6, 
		'Aug':7, 'Sep':8, 'Oct':9, 'Nov':10, 'Dec':11
	};	
	var from = document.forms[0]['fromDate'].value; 	var to = document.forms[0]['toDate'].value;
	from = from.split(' '); 							to = to.split(' ');
	var fromDate = new Date();							var toDate = new Date();
	fromDate.setFullYear(from[2], monthArray[from[1]], from[0]);			
	toDate.setFullYear(to[2], monthArray[to[1]], to[0]);
	if(toDate < fromDate){
		document.forms[0]['toDate'].value = document.forms[0]['fromDate'].value;
		doFilters(field);
		return;
	}
	//set up keyword filter
	var kw = document['filterForm']['keyword'].value.toLowerCase();
	var keywords = new Array();
	if(kw.length > 0){
		keywords = kw.split(' ');
	}
	
	var events = document.getElementById('el1').tBodies[0].childNodes;
	//set all rows to visible	
	for(k=0; k<events.length; k++){
		if(events[i].tagName == 'TR'){
			events[i].style.display = '';
		}
	}
	
	//apply filters
	for(i=0; i<events.length; i++){
		if(events[i].tagName != 'TR'){
			continue;
		}
		var cells = events[i].childNodes;
		var cellNo = 0;
		var hidden = false;
		var keywordContained = false;
		for(k=0; k<cells.length; k++){
			if(cells[k].tagName != 'TH' && cells[k].tagName != 'TD'){
				continue;
			}
			cellNo++;
			if(cells[k].tagName == 'TH'){		//date filter
				var eD = cells[k].innerHTML.split(' ');
				var eventDate = new Date();
				eventDate.setFullYear(eD[2], monthArray[eD[1]], eD[0]);
				if(eventDate < fromDate || eventDate > toDate){
					events[i].style.display = 'none';
					hidden=true;
					continue;
				}
			}
			if(cellNo == 4){					//venue filter
				var isContained = false;
				for(j=0; j<venues.length; j++){
					if(cells[k].innerHTML.indexOf(venues[j]) != -1){
						isContained = true;
						break;
					}
				}
				if(isContained){
					events[i].style.display = 'none';
					hidden=true;
					continue;
				}
			}
			if(keywords.length > 0 && !keywordContained){
				var cellContains = true;
				for(j=0; j<keywords.length; j++){
					if(stripTags(cells[k].innerHTML.toLowerCase()).indexOf(keywords[j]) == -1){
						cellContains = false;
						break;
					}
				}
				if(cellContains){
					keywordContained = true;
				}
			}
			if(!hidden){
				events[i].style.display = '';
			}
		}
		if(!keywordContained && keywords.length > 0){
			events[i].style.display = 'none';
		}
	}
	rowColors('el1');
	catchScroll();
}
function catchScroll(){
	var item = document.getElementById('floatControls');
	var scrollTop = document.body.scrollTop;
	if (scrollTop == 0)	{
		if (window.pageYOffset){
			scrollTop = window.pageYOffset;
		}
		else{
			scrollTop = (document.body.parentElement) ? document.body.parentElement.scrollTop : 0;
		}
	}
	var eTop = 0; var eLeft = 0;
	var oElement = filterElement['left'];
	while(oElement != null){
		eLeft += oElement.offsetLeft;
		oElement = oElement.offsetParent;
	}
	var oElement = filterElement['top'];
	while(oElement != null){
		eTop += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}	
	timers['filters']['left'] = eLeft;
	timers['filters']['startLeft'] = parseInt(item.style.left.replace(/px/, ''));
	timers['filters']['top'] = (scrollTop + 5 > eTop)? scrollTop + 5 :  eTop;
	timers['filters']['startTop'] = parseInt(item.style.top.replace(/px/, ''));	
	timers['filters']['iteration'] = 0;
	clearInterval(timers['filters']['scrollTimer']);
	timers['filters']['scrollTimer'] = setInterval('_filters("positionScroll")', scrollSpeed);
	eLeft += filterElement.offsetWidth + 5;
}

function getPageDimensions(){
	var theWidth = 0, theHeight = 0, scrollX = 0, scrollY = 0;
	if(typeof(window.innerWidth) == 'number'){
		theWidth = window.innerWidth;
		theHeight = window.innerHeight;
	}
	else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)){
		theWidth = document.documentElement.clientWidth;
		theHeight = document.documentElement.clientHeight;
	}
	else if(document.body && (document.body.clientWidth || document.body.clientHeight)){
		theWidth = document.body.clientWidth;
		theHeight = document.body.clientHeight;
	}

	if( typeof( window.pageYOffset ) == 'number' ) {
		scrollX = window.pageXOffset;
		scrollY = window.pageYOffset;
	} 
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		scrollX = document.body.scrollLeft;
		scrollY = document.body.scrollTop;
	} 
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		scrollX = document.documentElement.scrollLeft;
		scrollY = document.documentElement.scrollTop;
	}
	
	return [theWidth, theHeight, scrollX, scrollY];
}
function stripTags(thetext){
	return thetext.replace(/(<([^>]+)>)/ig,"");
}
function _Cookie(state, name, value){
	switch(state){
		case 'write':
			var date = new Date();
			date.setTime(date.getTime() + (30*24*60*60*1000));
			var expiration = "; expires="+date.toGMTString();
			document.cookie = name + "=" + value + expiration + "; path=/";
			return;
		case 'read':
			name += "=";
			var cookieArray = document.cookie.split(';');
			for(i=0; i<cookieArray.length; i++){
				var cElement = cookieArray[i];
				while(cElement.charAt(0) == ' '){
					cElement = cElement.substring(1, cElement.length);
				}
				if(cElement.indexOf(name) == 0){
					return cElement.substring(name.length, cElement.length);
				}
			}
			return false;
		case 'destroy':
			var date = new Date();
			date.setTime(date.getTime() - 64000);
			document.cookie = name + "=; expires=" + date.toGMTString() + "; path=/";
			break;
	}
}

function _window_(option){
	switch(option){
		case 'modal':
			if(typeof(modalDiv['object']) == 'object'){
				_window_('remove_modal');
			}
			var a = getPageDimensions();
			var theWidth = a[0];
			var theHeight = a[1];
			var scrollX = a[2];
			var scrollY = a[3];
			modalDiv['object'] = document.createElement('div');
			modalDiv['object'].id = 'modalDiv';
			modalDiv['object'].style.backgroundColor = '#222222';
			modalDiv['object'].style.position = 'absolute';
			modalDiv['object'].style.left = scrollX + 'px';
			modalDiv['object'].style.top = scrollY + 'px';
			modalDiv['object'].style.width = theWidth + 'px';
			modalDiv['object'].style.height = theHeight + 'px';
			modalDiv['object'].style.zIndex = '80';
			modalDiv['object'].style.opacity = '.6';
			modalDiv['object'].style.filter = 'alpha(opacity=60)';
			document.body.appendChild(modalDiv['object']);
			modalDiv['timer'] = setInterval("_window_('maintain_modal')", 25);
			break;
		case 'maintain_modal':
			var a = getPageDimensions();
			var theWidth = a[0];
			var theHeight = a[1];
			var scrollX = a[2];
			var scrollY = a[3];
			modalDiv['object'].style.left = scrollX + 'px';
			modalDiv['object'].style.top = scrollY + 'px';
			modalDiv['object'].style.width = theWidth + 'px';
			modalDiv['object'].style.height = theHeight + 'px';			
			break;
		case 'remove_modal':
			clearInterval(modalDiv['timer']);
			modalDiv['object'].parentNode.removeChild(modalDiv['object']);
			break;
	}
}