/**
 * @author Paul Reijnierse
 */

var newTopPosition;
var program_element;
var old_program_element;
var old_program_dimensions;
var oldDimensions;
var closedDimension;
var oldpositions;
var program_tofill = 1;
var program_filled = 2;
var move_to = 0;
var tr_heights = new Hash();

var ProgramDetailRules = {
	'.program_detail .speakers a.speaker' :
		function(element){
			element.onclick = function(){				
				var linktopass = this.href;
				linktopass = linktopass.split("?");
				linktopass = linktopass[1];			
				StateManager.setState(linktopass);
				return false;
			}
		},
	'.program_detail .papers a.paper' :
		function(element){
			element.onclick = function(){				
				var linktopass = this.href;
				linktopass = linktopass.split("?");
				linktopass = linktopass[1];			
				StateManager.setState(linktopass);
				return false;
			}
		}
	};
		
var ProgramRules = {
	'div.program_day td a' :
		function(element){
			element.onclick = function(){				
				program_element = this;
				if(program_element != old_program_element){
					show_program_item(this);
				}				
				return false;
			}
		},
	'div.program_controls a.day1' :
		function(element){
			element.onclick = function(){
				program_move(12);
				return false;				
			}			
		},
	'div.program_controls a.day2' :
		function(element){
			element.onclick = function(){
				program_move(-943);
				return false;			
			}			
		},
	'div.program_controls a.day3' :
		function(element){
			element.onclick = function(){
				program_move(-1898);
				return false;				
			}			
		},
	'div.program_controls a.close' :
		function(element){
			element.onclick = function(){
				var programVisible = $('program_detail'+program_filled).visible();	
				if( programVisible == true){
					var oldparents = old_program_element.ancestors();
					blindProgramUp($('program_detail'+program_filled),oldparents,oldDimensions.height, true);
					program_element = '';
					old_program_element = '';
				}
				return false;				
			}			
		}
	};
	
function checkForProgram(){
	if($('program_overview')){
		$('program_overview').addClassName('program_overview_js');
		var program_days = document.getElementsByClassName('program_day');		
		program_days.each(function(s){		
			s.addClassName('program_day_js');			
			var tr_data = s.getElementsByTagName('tr');	
			for (var i = 0; i < tr_data.length; i++) {
				var fillid = tr_data[i].id;		
				tr_heights[fillid] = Element.getHeight(tr_data[i]);				
			}				
		});				
		var program_detail = document.getElementById('program_detail1');		
		if(program_detail == undefined){			
			var div = '<div id="program_detail1" style="display:none" class="program_detail"></div>';
			new Insertion.Bottom($('program_overview'),div);
			var div2 = '<div id="program_detail2" style="display:none" class="program_detail"></div>';
			new Insertion.Bottom($('program_overview'),div2);
		}
		Behaviour.register(ProgramRules);
	}
}

function show_program_item(el){
	var parents = program_element.ancestors();	
	var sibling = parents[1].next();
	var sibling2 = parents[5];
	var positions = Position.cumulativeOffset(sibling);	
	var positions2 = Position.cumulativeOffset(sibling2);
	positions[0] = positions[0] - positions2[0];
	positions[1] = positions[1] - positions2[1];
	var program_detail_style = $('program_detail'+program_tofill).getStyle('display');
	if(program_detail_style == 'none'){
		oldDimensions = parents[1].getDimensions();
	}		
	var active_td = $('program_overview').getElementsByClassName('active');
	active_td.each(function(s){
		s.removeClassName('active');	
	});
	parents[0].addClassName('active');
	if(old_program_element){	
		var oldparents = old_program_element.ancestors();		
		var oldsibling = oldparents[1].next();
		var oldparents_id = oldsibling.id;		
		if(sibling.id >= oldparents_id){				
			old_program_dimensions = $('program_detail'+program_filled).getDimensions();				
			newTopPosition = positions[1] - old_program_dimensions.height;
		}else{
			newTopPosition = positions[1];
		}	
		blindProgramUp($('program_detail'+program_filled),oldparents,false);			
	}else{
		newTopPosition = positions[1];
	}
	
	pars = 'id='+program_element.id;
	new Ajax.Updater('program_detail'+program_tofill, '/ajax/program_detail.ajax.php',{
		parameters: pars,
		method: 'get',
		evalScripts: true,
		onComplete: function(el){
			showProgram_detail();			
			if(program_tofill == 1){
				program_tofill = 2;
				program_filled = 1;
			}else{
				program_tofill = 1;
				program_filled = 2;
			}			
			old_program_element = program_element;
		}
	});			
}
	

function showProgram_detail(){
	//de hoogte van de tr instellen	
	var parents = program_element.ancestors();
	var sibling = parents[1].next();
	if(!closedDimension){
		closedDimension = sibling.getHeight();
	}
	var sibling2 = parents[5];
	var positions = Position.cumulativeOffset(sibling);	
	var positions2 = Position.cumulativeOffset(sibling2);
	positions[0] = positions[0] - positions2[0];
	positions[1] = positions[1] - positions2[1];
		
	var class_topass = program_element.classNames;	
	$('program_detail'+program_tofill).addClassName(class_topass[0]);
	var newdimensions = $('program_detail'+program_tofill).getDimensions();	
	var currentDimensions = parents[1].getDimensions();	
	var newHeight = newdimensions.height+tr_heights[parents[1].id];
	var program_detail_style = $('program_detail'+program_tofill).getStyle('display');
	if(program_detail_style == 'none'){
		oldDimensions = parents[1].getDimensions();
		$('program_detail'+program_tofill).setStyle({
			position: 'absolute',
			top: newTopPosition+'px',
			left: positions[0]+'px',
			width: oldDimensions.width+'px'
		});
	}
	blindProgramDown('program_detail'+program_tofill,parents,newHeight);
	oldpositions = positions;	
}

function blindProgramUp(el, parents, move){
	if(program_element != old_program_element || move == true){
		new Effect.BlindUp(el, {duration: 0.5});
		var changeid = parents[1].id;
		var newHeight = tr_heights[changeid];		
		new Effect.Morph(parents[1].id,{
 			style:{ height: newHeight+'px' },
			duration: 0.5 
		});		
	}
}

function blindProgramDown(el, parents, newHeight){	
	if(program_element != old_program_element){
		new Effect.BlindDown(el, {duration: 0.5});
		newHeight = newHeight + closedDimension;		
		var id_tomorph = parents[1].id;
		new Effect.Morph(parents[1].id,{
 			style:{ height: newHeight+'px' },
			duration: 0.5 
		});		
	}
}

function program_move(movement){
	var active_td = $('program_overview').getElementsByClassName('active');
	active_td.each(function(s){
		s.removeClassName('active');	
	});
	var programVisible = $('program_detail'+program_filled).visible();	
	if( programVisible == true){
		var oldparents = old_program_element.ancestors();
		blindProgramUp($('program_detail'+program_filled),oldparents, true);
		program_element = '';
		old_program_element = '';
	}
	var program_position = Position.positionedOffset($('program_overview'));	
	switch( program_position[0] ){
		case 12:
			if(movement != program_position[0]){
				movement = movement - program_position[0];				
				new Effect.Move ($('program_overview'),{x: movement, y: 0, mode: 'relative'});
			}
			break;
		case -943:
			if(movement != program_position[0]){
				movement = movement - program_position[0];			
				new Effect.Move ($('program_overview'),{x: movement, y: 0, mode: 'relative'});
			}
			break;
		case -1898:
			if(movement != program_position[0]){
				movement = movement - program_position[0];
				new Effect.Move ($('program_overview'),{x: movement, y: 0, mode: 'relative'});
			}
			break;
		default:
			break;			
	}
}

function closeProgram(){	
	new Effect.Fade('overlay', { duration: 0.2});
}
