// JavaScript Document

var show_popup_alert = false;

var event_html = ''; 
event_html += '<div class="ac_event">';
event_html += '\t<div class="ac_event_title"><strong>__title__</strong></div>';
event_html += '\t<div class="ac_event_time"><em>__time__</em>...</div>';
event_html += '\t<div class="ac_event_intro" style="width:500px;">__intro__</div>';
event_html += '\t<div class="ac_event_detail"><a href="__link__" target="_blank">Link</a></div>';
event_html += '</div>';
event_html += '<br />';


function event_request(url, target_elem_id, event_prams) {
 var http_request, response, i;

	if ( !document.getElementById(target_elem_id) ) {
		return false;
	}
	
 var activex_ids = [
   'MSXML2.XMLHTTP.3.0',
   'MSXML2.XMLHTTP',
   'Microsoft.XMLHTTP'
 ];

 if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+...
   http_request = new XMLHttpRequest();
   //http_request = null;
   if (http_request.overrideMimeType) {
	//if (window.XMLHttpRequest) {
	   //http_request = new window.XMLHttpRequest();
     http_request.overrideMimeType('text/xml');
   }
 } else if (window.ActiveXObject) { // IE6 and older
   for (i = 0; i < activex_ids.length; i++) {
     try {
       http_request = new ActiveXObject(activex_ids[i]);
     } catch (e) {}
   }
 }

 if (!http_request) {
   clock_alert('AJAX_CLOCK ERROR: Unfortunately your browser doesnt support this feature.');
   return false;
 }

 http_request.onreadystatechange = function() {
   if (http_request.readyState !== 4) {
       // not ready yet
       return;
   }
   if (http_request.status !== 200 && http_request.status !== 0) {
     // ready, but not OK
     clock_alert('AJAX_CLOCK ERROR: There was a problem with the request.(Code: ' + http_request.status + ')');
     return;
   }
   
   response = http_request.responseXML;
	
	var output = parse_events(response);
	print_events(output, target_elem_id, event_prams);
	setTimeout("event_request('"+url+"', '"+target_elem_id+"', '"+event_prams+"');", 60000);
 };

 http_request.open('GET', url, true);
 http_request.send(null);
}


function parse_events(xml) {
	var data = new Array();
	data['time'] = 0;
	data['events'] = new Array();
	var count = 0;
	
	//if (xml.getElementsByTagName('root').item(0) == null) { document.getElementById('vp_event_output').innerHTML += ' t:'+xml;  }

	var root = xml.getElementsByTagName('root').item(0);
	data['time'] = root.getAttribute('timestamp');

	for (var iNode = 0; iNode < root.childNodes.length; iNode++) {
		var node = root.childNodes.item(iNode);

		
		if (node.tagName == 'event') {
			new_event = new Array();
			for (i = 0; i < node.childNodes.length; i++) {
				var sibl = node.childNodes.item(i);
				if ( sibl.tagName != null && sibl.tagName != '' && sibl.childNodes.item(0) != null && sibl.childNodes.item(0).data != '') {
					new_event[sibl.tagName] = sibl.childNodes.item(0).data;
				}
			}
			data['events'][count] = new_event;
			count++;
		}
	}
	
	return data;
}


function print_events(data, target_elem_id, event_prams) {
	
	if (document.getElementById(target_elem_id)) {
		output_elem = document.getElementById(target_elem_id)
	}
	else {
		clock_alert('AJAX_CLOCK ERROR: target output layer "'+target_elem_id+'" not found');	
	}
	
	if (data['events'] == null || data['events'].length === 0) {
		output_elem.innerHTML = 'No events';
	}
	else {
		var events = data['events'];
		var timestamp_now = data['time'];
		var pram_id = new Array();
		var pram_name = new Array();
		var pram_limit = 100;
		
		if ( event_prams != null && event_prams != '' ) { 
			var prams = event_prams.match(/([^\&]+)/g);
			if ( prams != null && prams.length > 0 ) {
				for (i = 0; i < prams.length; i++) {
					var pram = prams[i].match(/([^=]+)/g);
					if ( pram != null && pram.length === 2 ) {
						switch(pram[0]) {
							case('id'):
								pram_id = pram[1].match(/(\d+)/g);
								break;
							case('name'):
								pram_name = pram[1];
								break;
							case('limit'):
								pram_limit = pram[1].match(/(\d+)/);
								pram_limit = parseInt(pram_limit);
								break;
						}
					}
				}
			}
		}

		html = '';

		for (x = 0; x < events.length; x++) {
			
			// pram check: id
			if ( pram_id != null & pram_id.length > 0 ) { 
				var id_check = false;
				for(var i=0; i<pram_id.length; i++) {
					if ( events[x].id == pram_id[i] ) { id_check = true; }
				}
				if ( !id_check ) {
					continue;
				}
			}
			
			// pram check: name
			if ( pram_name != null && pram_name != '' ) { 
				
				var re = new RegExp( pram_name, "i" );
				var name_check = re.test(events[x].title);
			
				if ( !name_check ) {
					continue;
				}
			}
			
			var event_val_array = new Array();
			
			event_val_array['title'] = events[x].title;
			
			// time
			var time_string = '';
			var timestamp_to_go = events[x].time - timestamp_now;
			
			if (timestamp_to_go > 0) {
				//days
				var dday=Math.floor(timestamp_to_go/(60*60*24)*1);
				if (dday > 1) { 
					time_string += dday+' days';
				}
				else if (dday == 1) {
					time_string += '1 day';
				}
				
				// hours
				var dhour=Math.floor((timestamp_to_go%(60*60*24))/(60*60)*1);
				if (dhour > 0 && time_string != '') { time_string += ', '; }
				if (dhour > 1) { 
					time_string += dhour+' hours'
				}
				else if (dhour == 1) {
					time_string += '1 hour'
				}
				
				// minutes
				var dmin=Math.floor(((timestamp_to_go%(60*60*24))%(60*60))/(60)*1);
				if (dmin > 0 && time_string != '') { time_string += ', '; }
				if (dmin > 1) { 
					time_string += dmin+' minutes'
				}
				else if (dmin == 1) {
					time_string += '1 minute'
				}
			}
			else {
				if ( events[x]['length'] != null && events[x]['length'] > 0 ) {
					// past time
					var time_over = timestamp_to_go - (timestamp_to_go*2);
					var event_secs_length = events[x].length*60;
					if (event_secs_length > time_over) {
						time_string = 'Happening now';
					}
					else {
						time_string = 'Event has finished';
					}
				}
				else {
					time_string = 'Event has finished';
				}
			}
			event_val_array['time'] =  time_string;
			
			// intro
			if (events[x].intro == null || events[x].intro == '' || events[x].intro == 'none') {
				event_val_array['intro'] = '';
			}
			else {
				event_val_array['intro'] = events[x].intro;
			}
			
			// detail link
			if (events[x].url == null || events[x].url == '' || events[x].url == 'none') {
				event_val_array['link'] = '';
			}
			else {
				event_val_array['link'] = events[x].url;
			}
			
			html += event_html;
			for (y in event_val_array) {
				var pattern = new RegExp('__'+y+'__', 'g');
				html = html.replace(pattern, event_val_array[y]);	
			}
			
		}
		
		output_elem.innerHTML = html;
	}
}


function clock_alert(message) {
	if ( show_popup_alert ) {
		alert(message);
	}
}
