/* Tijdcie.nl - heattracker
* Javascript/AJAX code door Alexander Hoogerheide 
* Tracker.IntRA
*
*/

function displayContent(content) {

	if ( content !== null) {

		var event_name = content.getElementsByTagName('name')[0].firstChild.nodeValue;
		//alert(event_name);
		//showMessage(event_name);

		var heats = content.getElementsByTagName('heat');
		var tracker_div = document.getElementById('tracker');

		for (var i = 0; i < heats.length; i ++) {
			
			var this_heat        = heats[i];
			var this_heat_id     = this_heat.getElementsByTagName('id')[0].firstChild.nodeValue;
			var this_heat_status = this_heat.getElementsByTagName('status')[0].firstChild.nodeValue;
			var races            = this_heat.getElementsByTagName('race');
			var this_heat_div    = document.getElementById('heat_' + this_heat_id);

			if(this_heat_div==null) {
				// this_heat_div doesn't exist yet, create it
				var this_heat_title  = this_heat.getElementsByTagName('title')[0].firstChild.nodeValue;
				var this_heat_status  = this_heat.getElementsByTagName('statustext')[0].firstChild.nodeValue;

				this_heat_div = document.createElement('div');
				this_heat_div.id = 'heat_' + this_heat_id;
				fadeIn(this_heat_div, 0, 4);

				var this_heat_header = document.createElement('h2');
				    this_heat_header.appendChild(document.createTextNode(this_heat_title));


				this_heat_div.appendChild(this_heat_header);


				var this_heat_promotions = this_heat.getElementsByTagName('promotion');

				if (this_heat_promotions.length) {
					for (var j = 0; j < this_heat_promotions.length; j ++) {
						if ( this_heat_promotions[j] && this_heat_promotions[j].firstChild && this_heat_promotions[j].firstChild.nodeValue) {
							var this_heat_sub = document.createElement('h3');
							this_heat_sub.appendChild(document.createTextNode('promotion: '+this_heat_promotions[j].firstChild.nodeValue));
							this_heat_div.appendChild(this_heat_sub);
						}
					}
				}


				var this_heat_table = document.createElement('table');
				    this_heat_table.className = 'listing';

				var this_heat_table_thead      = document.createElement('thead');
				var this_heat_table_tbody      = document.createElement('tbody');
				var this_heat_table_header_row = document.createElement('tr');

				this_heat_table_thead.appendChild(this_heat_table_header_row);
				this_heat_table.appendChild(this_heat_table_thead);
				this_heat_table.appendChild(this_heat_table_tbody);
				this_heat_div.appendChild(this_heat_table);

				tracker_div.insertBefore(this_heat_div, tracker_div.firstChild);
			}

			this_heat_div.getElementsByTagName('h2')[0].className = 'status_'+this_heat_status;

			var this_heat_table             = this_heat_div.getElementsByTagName('table')[0];
			var this_heat_table_thead       = this_heat_table.getElementsByTagName('thead')[0];
			var this_heat_table_tbody       = this_heat_table.getElementsByTagName('tbody')[0];
			var this_heat_table_header_row  = this_heat_table_thead.getElementsByTagName('tr')[0];

			var header_titles = races[0].childNodes;
			var header_cells  = this_heat_table_header_row.getElementsByTagName('td');
			var current_header_td = 0;

			for (var j = 0; j < header_titles.length; j ++) {
				if(!isTextNode(header_titles[j])) {
					var this_header_cell  = header_cells[current_header_td];
					var this_header       = header_titles[j];
					var this_header_name  = this_header.getAttribute('display');
					var this_header_class = this_header.tagName;

					if (this_header_cell==null) {
						// not enough cells available, create a new one
						this_header_cell = document.createElement('td');
						this_header_cell.appendChild(document.createTextNode(this_header_name));

						this_heat_table_header_row.appendChild(this_header_cell);
					}

					this_header_cell.className = this_header_class;
					this_header_cell.firstChild.nodeValue = this_header_name;
					current_header_td ++;
				}
			}

			// check for header-cell-removal here
			while (header_cells[current_header_td]!=null) {
				this_heat_table_header_row.removeChild(header_cells[current_header_td]);
				current_header_td ++;
			}

			var race_rows = this_heat_table_tbody.getElementsByTagName('tr');
			var current_race_tr = 0;

			for (var j = 0; j < races.length; j ++) {
				var this_race_row = race_rows[current_race_tr];
				var this_race     = races[j];

				if (this_race_row==null) {
					// not enough rows available, create a new one
					this_race_row = document.createElement('tr');
					this_heat_table_tbody.appendChild(this_race_row);
				}

				var race_tag_cells  = this_race_row.getElementsByTagName('td');
				var race_tags       = this_race.childNodes;
				var current_race_td = 0;

				for (var k = 0; k < race_tags.length; k ++) {
					if (!isTextNode(race_tags[k])) {

						var this_race_tag_cell  = race_tag_cells[current_race_td];
						var this_race_tag       = race_tags[k];
						var this_race_tag_class = this_race_tag.tagName;
						var this_race_tag_value = this_race_tag.firstChild.nodeValue;

						if (this_race_tag_cell==null) {
							// not enough cells available, create a new one
							this_race_tag_cell = document.createElement('td');
							this_race_tag_cell.appendChild(document.createTextNode(this_race_tag_value));

							this_race_row.appendChild(this_race_tag_cell);
						}

						this_race_tag_cell.className = this_race_tag_class;
						this_race_tag_cell.firstChild.nodeValue = this_race_tag_value;
						current_race_td ++;
					}
				}

				// check for race-tag-cell-removal here
				while (race_tag_cells[current_race_td]!=null) {
					this_race_row.removeChild(race_tag_cells[current_race_td]);
					current_race_td ++;
				}

				current_race_tr ++;
			}

			// check for race-row-removal here
			while (race_rows[current_race_tr]!=null) {
				this_heat_table_tbody.removeChild(race_rows[current_race_tr]);
				current_race_tr ++;
			}
		}

		// check for heat-div-removal here
		var heat_divs = tracker_div.childNodes;
		var heat_div_exists = false;

		for (var i = 0; i < heat_divs.length; i ++) {
			heat_div_exists = false;

			// check whether heat_divs[i] exists in XML file ...
			for (var j = 0; j < heats.length; j ++) {
				if (heat_divs[i].id=='heat_' + heats[j].getElementsByTagName('id')[0].firstChild.nodeValue) {
					heat_div_exists = true;
				}
			}

			// ... and remove it when it doesn't
			if (!heat_div_exists && heat_divs[i].id!='removed') {
				heat_divs[i].id = 'removed';
				fadeOut(heat_divs[i], 100, 4);
			}
		}
	} else {
		setError('.');

	}
}

function isTextNode(n) {
	return n.nodeType==3
}

function fadeOut(element, current, inc) {
	if(current>0) {
		// action
		current -= inc;
		element.style.filter = 'alpha(opacity=' + current + ')';
		element.style.opacity = (current / 100);
		setTimeout(function() { fadeIn(element, current, inc); }, 100);
		// was 50
	} else {
		// finalize
		element.parentNode.removeChild(element);
	}
}

function fadeIn(element, current, inc) {
	if(current<100) {
		// action
		current += inc;
		element.style.filter = 'alpha(opacity=' + current + ')';
		element.style.opacity = (current / 100);
		setTimeout(function() { fadeIn(element, current, inc); }, 100);
		// was 50
	} else {
		// finalize
		element.style.filter = '';
		element.style.opacity = '';
	}
}

function initPage() {

	makeRequest("tracker.xml");
	var pageTimeout = setTimeout("initPage()", 5000);
}

