// JavaScript Document
//var url = "http://phoenix/main.php"; // The server-side script
var http;
var http_id;

var xmlreqs = new Array(); 
var js_objs = new Array(); 

function exec_js_real() {
	while(js_objs.length >0 ) {
		var id = js_objs.pop();
		
		try{var node = document.getElementById(id); }
		catch(e) {}
		
		if(node){	
			var st = node.getElementsByTagName('script');
		  var strExec="";
		  for(var i=0;i<st.length; i++) {     
			  strExec = st[i].innerHTML;
			try {eval(strExec);
			} catch (e)	{}
			
		  }
		}
	}
}

function exec_js(id) {
	js_objs.push(id);
}



function ajaxRequest(id, xmlhttp, handler) { 
	this.id = id; 
	this.xmlhttp = xmlhttp; 
	this.callback = handler;
} 
 
function ajax_post(id,url,handler,data) { 
	//alert(url);
	var xmlhttp=false; 
	/*for (var i=0; i < xmlreqs.length; i++) { 
		if (xmlreqs[i].id = id)
			xmlreqs[i].xmlhttp.abort();
	}*/
	if (window.XMLHttpRequest) { 
		// Mozilla etc. 
		xmlhttp=new XMLHttpRequest(); 
		xmlhttp.onreadystatechange=xml_http_change; 
		xmlhttp.open("POST",url,true); 
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		
		xmlhttp.send(data); 
		
		
	} 	else if (window.ActiveXObject) { 
		// IE 
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		if (xmlhttp) { 
			xmlhttp.onreadystatechange=xml_http_change; 
			xmlhttp.open("POST",url,true); 
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
			xmlhttp.send(data); 

		} 
	}
	
	
		var xmlreq = new ajaxRequest(id, xmlhttp,handler); 
		xmlreqs.push(xmlreq);
	
}
function ajax_post_js(url,data) { 

	//alert(url);
	var xmlhttp=false; 
	/*for (var i=0; i < xmlreqs.length; i++) { 
		if (xmlreqs[i].id = id)
			xmlreqs[i].xmlhttp.abort();
	}*/
	if (window.XMLHttpRequest) { 
		// Mozilla etc. 
		xmlhttp=new XMLHttpRequest(); 
		xmlhttp.onreadystatechange=xml_http_change_no_update; 
		xmlhttp.open("POST",url,true); 
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		xmlhttp.send(data); 
		
	} 	else if (window.ActiveXObject) { 
		// IE 
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
		if (xmlhttp) { 
			xmlhttp.onreadystatechange=xml_http_change_no_update; 
			xmlhttp.open("POST",url,true); 
			xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
			xmlhttp.send(data); 

		} 
	} 
	var xmlreq = new ajaxRequest('', xmlhttp); 
	
	xmlreqs.push(xmlreq); 
} 
function update_id(id,html) {
	if (typeof(window['id']) == "undefined"){
		alert("Tried to update id: " + id +" but it doesn't appear to exist.");
		return;  
	}
	//alert("updateing: "+id);
	//return;
	var id_object = document.getElementById(id);
	
	if(id_object != null && html != null)
	     id_object.innerHTML = html;
}
function update_id_url(id,url) {
	var address = url;
	if(update_id_url.arguments.length > 2) {
		address = address + "?";
		for (var i = 2; i < update_id_url.arguments.length; i=i+2){ // iterate through arguments 
			address = address +update_id_url.arguments[i] + "=" + update_id_url.arguments[i+1]+"&";		
		}
	}

	ajax_post(id,address,update_id);
}
function update_id_url_xml(id,url,xml_handler) {
	var address = url; 

	if(update_id_url_xml.arguments.length >3) {
		address = address + "?";
		for (var i = 3; i < update_id_url_xml.arguments.length; i=i+2){ // iterate through arguments 
			address = address +update_id_url_xml.arguments[i] + "=" + update_id_url_xml.arguments[i+1]+"&";		
		}
	}


	ajax_post(id,address,xml_handler);
}
function update_id_url_js(url) {
	var address = url;
	if(update_id_url_js.arguments.length > 1) {
		address = address + "?";
	for (var i = 1; i < update_id_url_js.arguments.length; i=i+2){ // iterate through arguments 
		address = address +update_id_url_js.arguments[i] + "=" + update_id_url_js.arguments[i+1]+"&";		
	}
	}
	
	ajax_post_js(address);
}
function getpage(url) {
	update_id_url('content',url);
}

function live_box(object,address)
{	
	address =  address + "?id="+object.id + "&" + object.name + "=" + escape(object.value) + "&"
	for (var i = 2; i < live_box.arguments.length; i=i+2) // iterate through arguments 
		address = address +"&"+live_box.arguments[i] + "=" + escape(live_box.arguments[i+1]);

	update_id_url(object.id,address);
}
function debug(id,num) {

}

function xml_http_change() { 
	if (typeof(window['xmlreqs']) == "undefined") return; 
   
   // var response;	
	
	for (var i=0; i < xmlreqs.length; i++) { 
		response ="";		
		id ="";	
		//debug(xmlreqs[i].id,0);
		
		if (xmlreqs[i].xmlhttp.readyState == 4) { 
				//debug(xmlreqs[i].id,1);
			if (xmlreqs[i].xmlhttp.status == 200 || xmlreqs[i].xmlhttp.status == 304) { 
				
				// 200 OK // get response info here before splicing - see below on creating an xml object 
				type = xmlreqs[i].xmlhttp.getResponseHeader("Content-Type");
				
				if(type.match("text/xml") !=  null) {
					response = xmlreqs[i].xmlhttp.responseXML;
					try{ xmlreqs[i].callback(xmlreqs[i].id,response); }
					catch (e) {}
				} else{
					response = xmlreqs[i].xmlhttp.responseText;
					try{ xmlreqs[i].callback(xmlreqs[i].id,response); }
					catch (e) {}
					
					exec_js(xmlreqs[i].id);
				}
			}
			
			xmlreqs.splice(i,1); 
			i--;
		} 
	}
	
	var t=setTimeout(exec_js_real,1);
}
function xml_http_change_no_update() { 
	if (typeof(window['xmlreqs']) == "undefined") return; 

	for (var i=0; i < xmlreqs.length; i++) { 
		
		if (xmlreqs[i].xmlhttp.readyState == 4) { 
			if (xmlreqs[i].xmlhttp.status == 200 || xmlreqs[i].xmlhttp.status == 304) { 
				// 200 OK // get response info here before splicing - see below on creating an xml object 
				type = xmlreqs[i].xmlhttp.getResponseHeader("Content-Type");
				id = xmlreqs[i].id;
				if(type.match("text/xml") !=  null) {
					response = xmlreqs[i].xmlhttp.responseXML;
					
					alert("ajax.js xmlhtmlChange");
				} else{
					var response = xmlreqs[i].xmlhttp.responseText;
					
					
				}
							  
				xmlreqs.splice(i,1); 
				
				exec_js(id);	

				i--; 
				
			} 
			else { 
				// error 
				xmlreqs.splice(i,1); 
				i--; 
			} 
		} 
	}
	//alert(xmlreqs.length);
}
function remove_child_nodes ( parent_node)
{
	var childs = parent_node.childNodes
	for(i=childs.length-1; i >=0 ; i=i-1) {
		parent_node.removeChild(childs[i]);
	}	
}

function set_element_value (element_id, value)

{
	field = document.getElementById(element_id);
	
	if(field.tagName.toLowerCase() === "input") {
		if(field.type=="text") {
			field.value = value;
		} else if (field.type=="checkbox") {
			if(val == "1")
				field.checked = true;
			else
				field.checked = false;
		}
		else
		{
			field.value = value;
		}
		//alert("1: " +detail_nodes[i].getAttribute('target_id'));
	}
	else if(field.tagName.toLowerCase() === "select") {
		for (x in field.options)
		{
			
			if(field.options[x].value === value) {
				
				field.options[x].selected = true;
				break;
			}
			//alert (field.options[x].text + "::" + value);
		}	
	}
	else{
		field.value = value;	
	}
}

function apply_new_value (xmldoc, name){
	var details = xmldoc.getElementsByTagName(name);
	if(details.length > 0){
		var detail_nodes = details[0].childNodes;
		for(i=0; i <= detail_nodes.length; i=i+1) {
			set_element_value(detail_nodes[i].getAttribute('target_id'),detail_nodes[i].getAttribute('value'));
		}
	}
}
function fill_select (xmldoc , parent_name, list_name, target_name, value_name)
{
	
	var triplist = xmldoc.getElementsByTagName(list_name);
	if(triplist.length > 0){
		var trips = triplist[0].childNodes;
		var list = document.getElementById(parent_name);
		remove_child_nodes (list);
		
		o_element=document.createElement('option');
		list.appendChild(o_element);
		
		for(i=0; i < trips.length; i=i+1) {
			o_element=document.createElement('option');
			name = trips[i].getAttribute(target_name);
			value = trips[i].getAttribute(value_name);
			o_element.setAttribute("value",value);
			o_element.appendChild(document.createTextNode(name));
			list.appendChild(o_element);
		}

	}
	
}

function xml_process(id,xmldoc) {
	//processes trip list tags
	var triplist = xmldoc.getElementsByTagName("triplist");
	if(triplist.length > 0){
		var trips = triplist[0].childNodes;
		
		var list = document.getElementById('trips_list');
		remove_child_nodes (list);

		for(i=0; i < trips.length; i=i+1) {
			div_element=document.createElement('div');
			div_element.setAttribute('class','bus_list_item');
			div_element.style.paddingBottom="2px";
			div_element.style.paddingLeft="2px";
			a_element=document.createElement('a');
			a_element.setAttribute('href',"javascript:update_id_url_xml('xmltripsview','/busrequest/live_trips.php',xml_process,'showtrip',"+trips[i].getAttribute('id')+")");
			text_element=document.createTextNode(trips[i].getAttribute('name'));
			div_element.appendChild(a_element);
			a_element.appendChild(text_element);
			list.appendChild(div_element);
			//alert( trips[i].getAttribute('name') );
		}
	}
	
	//processes bus list tags
	var triplist = xmldoc.getElementsByTagName("buslist");
	if(triplist.length > 0){
		var trips = triplist[0].childNodes;
		var list = document.getElementById('buses_list');
		remove_child_nodes (list);

		for(i=0; i < trips.length; i=i+1) {
			div_element=document.createElement('div');
			div_element.setAttribute('class','bus_list_item');
			div_element.style.paddingBottom="2px";
			div_element.style.paddingLeft="2px";
			a_element=document.createElement('a');
			a_element.setAttribute('href',"javascript:update_id_url_xml('xmlbusesview','/busrequest/live_buses.php',xml_process,'show_bus',"+trips[i].getAttribute('id')+")");
			text_element=document.createTextNode(trips[i].getAttribute('name'));
			div_element.appendChild(a_element);
			a_element.appendChild(text_element);
			list.appendChild(div_element);
			//alert( trips[i].getAttribute('name') );
		}
	}
		//processes bus list tags
	var triplist = xmldoc.getElementsByTagName("driverlist");
	if(triplist.length > 0){
		var trips = triplist[0].childNodes;
		var list = document.getElementById('drivers_list');
		remove_child_nodes (list);

		for(i=0; i < trips.length; i=i+1) {
			div_element=document.createElement('div');
			div_element.setAttribute('class','bus_list_item');	
			div_element.style.paddingBottom="2px";
			div_element.style.paddingLeft="2px";
			a_element=document.createElement('a');
			a_element.setAttribute('href',"javascript:update_id_url_xml('xmldriversview','/busrequest/live_drivers.php',xml_process,'show_driver',"+trips[i].getAttribute('id')+")");
			text_element=document.createTextNode(trips[i].getAttribute('name'));
			div_element.appendChild(a_element);
			a_element.appendChild(text_element);
			list.appendChild(div_element);
			//alert( trips[i].getAttribute('name') );
		}
	}

		//processes bus list tags
	var triplist = xmldoc.getElementsByTagName("routelist");
	if(triplist.length > 0){
		var trips = triplist[0].childNodes;
		var list = document.getElementById('routes_list');
		remove_child_nodes (list);

		for(i=0; i < trips.length; i=i+1) {
			div_element=document.createElement('div');
			div_element.setAttribute('class','bus_list_item');
			div_element.style.paddingBottom="2px";
			div_element.style.paddingLeft="2px";
			a_element=document.createElement('a');
			a_element.setAttribute('href',"javascript:update_id_url_xml('xmlroutesview','/busrequest/live_routes.php',xml_process,'show_route',"+trips[i].getAttribute('id')+")");
			text_element=document.createTextNode(trips[i].getAttribute('name'));
			div_element.appendChild(a_element);
			a_element.appendChild(text_element);
			list.appendChild(div_element);
			//alert( trips[i].getAttribute('name') );
		}
	}
	
	fill_select (xmldoc , "trip_from"				, "trip_location_list"	, 'name'	, 'name');
	fill_select (xmldoc , "trip_bus_number"			, "trip_bus_list"		, 'name'	, 'id');
	fill_select (xmldoc , "trip_assigned_driver"	, "trip_driver_list"		, 'name'	, 'id');
	fill_select (xmldoc , "route_bus"				, "route_bus_list"		, 'name'	, 'id');
	
	apply_new_value(xmldoc, "tripdetails");
	apply_new_value(xmldoc, "busdetails");
	apply_new_value(xmldoc, "driverdetails");
	apply_new_value(xmldoc, "routedetails");
	
}

function connect(o,e,p) {
	if(window.addEventListener){ // Mozilla, Netscape, Firefox
		o.addEventListener(e, p, false);
		o.addEventListener(e, p, false);
	} else { // IE
		o.attachEvent("on"+e, p);
		o.attachEvent("on"+e, p);
	}
}

function change_location(name,img_path)
{
	document.getElementById('webadmin_location_bar').innerHTML = name;
	document.getElementById('webadmin_location_img').src = img_path;
}
