//Assign biog viewing function to cast/crew names
function prepare(area){
	clickers = area + "Menu";
	targets = area + "Info";
	//Find and hide biographies
	biogDivs = document.getElementById(targets).getElementsByTagName('DIV');
	for(i=0;i<biogDivs.length;i++){
		biogDivs[i].className = "hiddenInfo";
	}
	//Find and activate cast names
	nameSpans = document.getElementById(clickers).getElementsByTagName('SPAN');
	for(i=0;i<nameSpans.length;i++){
		nameSpans[i].onclick=viewVenue;
		nameSpans[i].onmouseover=function(){this.style.textDecoration="underline"};
		nameSpans[i].onmouseout=function(){this.style.textDecoration="none"};
	}
}

//Biog viewing function
function viewVenue(){
	area = this.parentNode.id;
	area = area.substr(0,(area.length-4));
	clickers = area + "Menu";
	targets = area + "Info";
	nameSpans = document.getElementById(clickers).getElementsByTagName('SPAN');
	biogDivs = document.getElementById(targets).getElementsByTagName('DIV');
	//Reveal correct biog
	for(i=0;i<nameSpans.length;i++){
		if(nameSpans[i] == this){
			biogDivs[i].className = "visibleInfo";
			nameSpans[i].className = "activeClicker";
			nameSpans[i].onmouseover=function(){};
			nameSpans[i].onmouseout=function(){};
		} else {
			biogDivs[i].className = "hiddenInfo";
			nameSpans[i].className = "clicker";
			nameSpans[i].style.textDecoration = "none";
			nameSpans[i].onmouseover=function(){this.style.textDecoration="underline"};
			nameSpans[i].onmouseout=function(){this.style.textDecoration="none"};
		}
	}
}

//Form fun function for venues
function venueForm(){
	if(!document.getElementById('newDateButton').onclick){
		document.getElementById('newDateButton').onclick=newDateRow;
	}
	buttons = document.getElementsByTagName('BUTTON');
	for(i=0;i<buttons.length;i++){
		if(buttons[i].parentNode.nodeName == "TD"){
			buttons[i].onclick=deleteDateRow;
		}
	}
	if(!document.getElementById('extraDateButton').onclick){
		document.getElementById('extraDateButton').onclick=extraDateRows;
	}
	
/*
	allSelects = document.getElementById('datesTable').getElementsByTagName('SELECT');
	allInputs = document.getElementById('datesTable').getElementsByTagName('INPUT');
	for(i=0;i<allSelects.length;i++){
		allSelects[i].onchange=function(){};
	}
	for(i=0;i<allInputs.length;i++){
		allInputs[i].onchange=function(){};
	}
	rowParent = document.getElementById('datesTable').getElementsByTagName('TR')[0].parentNode;
	tableChilds = rowParent.childNodes;
	for(i=(tableChilds.length - 1);i>=0;i--){
		if(tableChilds[i].nodeName == "TR"){
			lastRow = tableChilds[i];
			break;
		}
	}
	cellContents = lastRow.childNodes[1].childNodes;
	for(i=0;i<cellContents.length;i++){
		if((cellContents[i].nodeName == "SELECT") || (cellContents[i].nodeName == "INPUT")){
			cellContents[i].addEventListener('change',newDateRow,false);
		}
	}
*/
}

//Function to generate new blank date rows
function newDateRow(){
	rowParent = document.getElementById('datesTable').getElementsByTagName('TR')[0].parentNode;
	tableChilds = rowParent.childNodes;
	for(i=(tableChilds.length - 1);i>=0;i--){
		if(tableChilds[i].nodeName == "TR"){
			lastRow = tableChilds[i];
			break;
		}
	}
	newDateRow = lastRow.cloneNode(true);
	options = newDateRow.getElementsByTagName('OPTION');
	selects = newDateRow.getElementsByTagName('SELECT');
	inputs = newDateRow.getElementsByTagName('INPUT');
	for(i=0;i<inputs.length;i++){
		controlName = inputs[i].getAttribute('name');
		postNumber = controlName.search(']');
		controlNumber = controlName.substr(6,(postNumber - 6));
		controlTerminus = controlName.substr(postNumber);
		controlNumber = parseInt(controlNumber) + 1;
		controlName = 'dates[' + controlNumber + controlTerminus;
		inputs[i].setAttribute('name',controlName);
		inputs[i].className="";
		inputs[i].value="";
	}
	for(i=0;i<selects.length;i++){
		controlName = selects[i].getAttribute('name');
		postNumber = controlName.search(']');
		controlNumber = controlName.substr(6,(postNumber - 6));
		controlTerminus = controlName.substr(postNumber);
		controlNumber = parseInt(controlNumber) + 1;
		controlName = 'dates[' + controlNumber + controlTerminus;
		selects[i].setAttribute('name',controlName);
		selects[i].className="";
	}
	for(i=0;i<options.length;i++){
		options[i].className="";
		if(options[i].getAttribute){
		if(options[i].getAttribute('selected')){
			options[i].removeAttribute('selected');
		}}
	}
	lastRow.parentNode.appendChild(newDateRow);
	venueForm();
}

//Function to automatically fill in date rows
function extraDateRows(){
	rowParent = document.getElementById('datesTable').getElementsByTagName('TR')[0].parentNode;
	tableChilds = rowParent.childNodes;
	numRows = tableChilds.length;
	firstRow = "";
	for(i=0;i<tableChilds.length;i++){
		if(tableChilds[i].nodeName == "TR"){
			if(firstRow == ""){
				firstRow = tableChilds[i];
			}
		}
	}
	firstDate = checkDateRow(firstRow);
	if(firstDate == false){
		return false
	}
	//Delete current rows
	for(i=(tableChilds.length - 1);i>=0;i--){
		if(tableChilds[i].nodeName == "TR"){
			if(tableChilds[i] != firstRow){
				rowParent.removeChild(tableChilds[i]);
			}
		}
	}
	//Generate new rows
	numExtraDates = document.getElementById('extraDates').value;
	for(i=1;i<=numExtraDates;i++){
		newDate = firstDate + (i * 60 * 60 * 24 * 1000);
		newDate = new Date(newDate);
		newRow = firstRow.cloneNode(true);
		selects = newRow.getElementsByTagName('SELECT');
		inputs = newRow.getElementsByTagName('INPUT');
		options = newRow.getElementsByTagName('OPTION');
		for(j=0;j<inputs.length;j++){
			controlName = inputs[j].getAttribute('name');
			postNumber = controlName.search(']');
			controlNumber = controlName.substr(6,(postNumber - 6));
			controlTerminus = controlName.substr(postNumber);
			controlNumber = parseInt(controlNumber) + i;
			controlName = 'dates[' + controlNumber + controlTerminus;
			inputs[j].setAttribute('name',controlName);
			inputs[j].className="";
			inputs[j].value="";
		}
		for(j=0;j<selects.length;j++){
			controlName = selects[j].getAttribute('name');
			postNumber = controlName.search(']');
			controlNumber = controlName.substr(6,(postNumber - 6));
			controlTerminus = controlName.substr(postNumber);
			controlNumber = parseInt(controlNumber) + i;
			controlName = 'dates[' + controlNumber + controlTerminus;
			selects[j].setAttribute('name',controlName);
			selects[j].className="";
		}
		for(j=0;j<options.length;j++){
			options[j].className="";
			if(options[j].getAttribute){
				if(options[j].getAttribute('selected')){
					options[j].removeAttribute('selected');
				}
			}
		}
		if(newDate.getHours() < 10){
			selects[0].value = '0' + newDate.getHours();
		} else {
			selects[0].value = newDate.getHours();
		}
		if(newDate.getMinutes() < 10){
			selects[1].value = '0' + newDate.getMinutes();
		} else {
			selects[1].value = newDate.getMinutes();
		}
		if(newDate.getDate() < 10){
			selects[2].value = '0' + newDate.getDate();
		} else {
			selects[2].value = newDate.getDate();
		}
		if((newDate.getMonth() + 1) < 10){
			selects[3].value = '0' + (newDate.getMonth() + 1);
		} else {
			selects[3].value = (newDate.getMonth() + 1);
		}
		inputs[0].value = newDate.getFullYear();
		rowParent.appendChild(newRow);
	}
	venueForm();
}

//Function to check date rows for valid dates
function checkDateRow(dateRow){
	selects = dateRow.getElementsByTagName('SELECT');
	inputs = dateRow.getElementsByTagName('INPUT');
	hour = selects[0].value;
	minute = selects[1].value;
	day = selects[2].value;
	month = selects[3].value;
	year = inputs[0].value;
	rowDate = Date.parse(hour + ':' + minute + ' ' + year + '/' + month + '/' + day);
	if(!rowDate){
		alert('That is not a valid date. Please try again.');
		return false
	}
	return rowDate;
}

//Function to clear date rows
function deleteDateRow(){
	inputs = this.parentNode.getElementsByTagName('INPUT');
	selects = this.parentNode.getElementsByTagName('SELECT');
	for(i=0;i<inputs.length;i++){
		inputs[i].value="";
	}
	for(i=0;i<selects.length;i++){
		selects[i].value="";
	}
}

//Initiating sequence
function initiate(){
	if(document.getElementById){
		if(document.getElementById('venueInfo')){
			prepare('venue');
		}
		if(document.getElementById('castInfo')){
			prepare('cast');
		}
		if(document.getElementById('reviewInfo')){
			prepare('review');
		}
		if(document.getElementById('datesTable')){
			venueForm();
		}
	}
}
onload=initiate;
