// Fetch Feed Ajax
// ------------------------------------------------------------------------------------------------------------

function display_stats(r_xml){
	
	var status_target 		= document.getElementById('find_status');
	var request_cat 		= r_xml.getElementsByTagName("category_name")[0].childNodes[0].nodeValue;
	var request_loc 		= r_xml.getElementsByTagName("location_name")[0].childNodes[0].nodeValue;
	var request_cat_safe	= r_xml.getElementsByTagName("category_name_safe")[0].childNodes[0].nodeValue;
	var request_loc_safe	= r_xml.getElementsByTagName("location_name_safe")[0].childNodes[0].nodeValue;
	
	// Clear the status target
	clear_child_nodes(status_target);	
	
	// Stats - current time
	var currentTime = new Date();
	var month = currentTime.getMonth() + 1;
	var day = currentTime.getDate();
	var year = currentTime.getFullYear();
	var hours = currentTime.getHours();
	var mins = currentTime.getMinutes()
	var secs = currentTime.getSeconds()
	
	// Stats - time - leading zero correction
	if(month < 10){ month = new String( '0'+month ); }		
	if(day < 10){ day = new String( '0'+day );  }		
	if(hours < 10){ hours = new String( '0'+hours ); }	
	if(mins < 10){ mins = new String( '0'+mins ); }	
	if(secs < 10){ secs = new String( '0'+secs );  }
	
	var date_time = year+'-'+month+'-'+day+' '+hours+':'+mins+':'+secs;

	// Parse Stats Template
	var content				= window.status_permalink_template;
	content					= content.replace(/{alt}/, request_loc+' - '+request_cat);
	content					= content.replace(/{href}/, window.http_host+'/'+request_loc_safe+'/'+request_cat_safe+'/');
	var s					= document.createElement('span');
	s.innerHTML				= content;
	status_target.appendChild(s);

	// Feed URL
	var feed_url = window.http_host+'/'+request_loc_safe+'/'+request_cat_safe+'/feed.atom';	

	// Parse RSS Template
	var content				= window.status_rss_template;
	content					= content.replace(/{alt}/, request_loc+' - '+request_cat);
	content					= content.replace(/{href}/, feed_url);
	var s					= document.createElement('span');
	s.innerHTML				= content;
	status_target.appendChild(s);
	
	// Page RSS
	if(document.getElementById('page_rss')){ document.getElementById('page_rss').href = feed_url; }

	// Parse Stats Template
	var content				= (window.authenticated) ? window.status_authenticated_template : window.status_template;
	content					= content.replace(/{txt_feed}/, window.txt_feed);
	content					= content.replace(/{txt_last_update}/, window.txt_last_update);	
	content					= content.replace(/{txt_over_ride}/, window.txt_over_ride);
	content					= content.replace(/{date_time}/, date_time);	
	content					= content.replace(/{loc}/, request_loc);
	content					= content.replace(/{cat}/, request_cat);
	content					= content.replace(/{loc_safe}/, request_loc_safe);
	content					= content.replace(/{cat_safe}/, request_cat_safe);

	// Stats - output
	var div = document.createElement('div');
	div.innerHTML = content;	
	status_target.appendChild(div);

}

//Response Helper function
function display_tweets(r_xml,clear_content){
	
	var target 				= document.getElementById('find_tweets');
	var statuses			= r_xml.getElementsByTagName("status");
	
	// Clear the target
	if(clear_content){ clear_child_nodes(target); }
	
	// Display stats
	display_stats(r_xml);			
			
	// Tweets
	for( i=0 ; i < statuses.length ; i++ ){
		var time				= statuses[i].getElementsByTagName("created_at")[0].childNodes[0].nodeValue;		
		var text 				= statuses[i].getElementsByTagName("text")[0].childNodes[0].nodeValue;
		var user				= statuses[i].getElementsByTagName("user")[0];
		var screen_name			= user.getElementsByTagName("screen_name")[0].childNodes[0].nodeValue;
		var profile_image_url 	= user.getElementsByTagName("profile_image_url")[0].childNodes[0].nodeValue;
		var url 				= (user.getElementsByTagName("url")[0].hasChildNodes()) ? user.getElementsByTagName("url")[0].childNodes[0].nodeValue : false;		
		var name_link 			= (url) ? url : 'http://twitter.com/'+screen_name;
		var name 				= user.getElementsByTagName("name")[0].childNodes[0].nodeValue;
		var location			= (user.getElementsByTagName("location")[0].hasChildNodes()) ? user.getElementsByTagName("location")[0].childNodes[0].nodeValue : false;				
		var loc_str 			= (location) ? window.txt_location+': '+location : '';
		var txt 				= text;
		var div 				= document.createElement('div');
		
		// extra links
		var extra_links			= '';

		// Parse Tweet Link Template
		if(url){
			var l				= window.tweet_link_template;
			l					= l.replace(/{txt}/, 'Website');
			l					= l.replace(/{link}/, url);
			extra_links			= extra_links+l;
		}

		// Parse Tweet Link Template
		var l					= window.tweet_link_template;
		l						= l.replace(/{txt}/, 'Twitter');
		l						= l.replace(/{link}/, 'http://twitter.com/'+screen_name);
		extra_links				= extra_links+l;
		
		// Parse Tweet Template
		var content				= window.tweet_template.replace(/{content}/, parse_twitter(txt,{'uri':true,'topic':false,'user':true}));
		content					= content.replace(/{username}/, screen_name);
		content					= content.replace(/{img}/, profile_image_url);
		content					= content.replace(/{extra_links}/, extra_links);
		content					= content.replace(/{location}/, loc_str);
		content					= content.replace(/{name}/, name);
		content					= content.replace(/{name_link}/, name_link);
		content					= content.replace(/{date_time}/, time);

		// Generate Ouput div
		div.innerHTML			= content;
		target.appendChild(div);
	}


}

//Response Function
function ajax_response(r_type,r_data,args){
	
	//r_type should be always be XML in our case - so lets flag that bit
	var r_xml 				= r_data;
	var statuses			= r_xml.getElementsByTagName("status");
	var page 				= r_xml.getElementsByTagName("page")[0].childNodes[0].nodeValue;
	var no_tweets			= r_xml.getElementsByTagName("no_tweets")[0].childNodes[0].nodeValue;
	var same_content		= r_xml.getElementsByTagName("same_content")[0].childNodes[0].nodeValue;
	var request_cat_safe	= r_xml.getElementsByTagName("category_name_safe")[0].childNodes[0].nodeValue;
	var request_loc_safe	= r_xml.getElementsByTagName("location_name_safe")[0].childNodes[0].nodeValue;	
	var target 				= document.getElementById('find_tweets');
	
	//Store / Update Last request info
	var last_loc = window.last_loc;
	var last_cat = window.last_cat;	
	window.last_loc = request_loc_safe;
	window.last_cat = request_cat_safe;
	
	//Acknowledge that data has been returned
	window.current_request 	= { 'active' : false , 'cat' : null , 'loc' : null , 'page' : null } ;
	
	//Is this feed the same as the last one
	var same_feed = (last_loc==window.last_loc && last_cat==window.last_cat) ? 1 : 0 ;
	
	//Update if the content isn't the same, the target is empty, this page is greater than the first one or this feed is not the same as the last one
	if(same_content==0 || target.innerHTML=='' || page!=1 || same_feed==0){
		var clear = (page > 1) ? false : true ;
		display_tweets(r_xml,clear);
	}else{
		display_stats(r_xml);	
	}
}
//Load Status function
function ajax_load(loading,args){
	if(loading){
		document.getElementById(args.id).innerHTML = "<img src='/templates/img/loading.gif' width='50' hieght='50' alt='Loading...' />";
	}else{
		document.getElementById(args.id).innerHTML = "";	
	}	
}
//No Data function
function ajax_no_data(args){
	alert('Fetching Feed Failed');
}

//constructor: var a = new ajax(params, script_name, s_method, output_format, response_func, load_func, no_data_func)
//sendrequest: ajax.sendData(params, script_name, s_method, output_format, response_func, load_func, no_data_func, response_func_arg_array, load_func_arg_array, no_data_func_arg_array)

//define new object
var a = new ajax('','ajax_feed.xml.php','get','xml',ajax_response, ajax_load, ajax_no_data,null,{'id':'load'},null);

// Join Ajax
// ------------------------------------------------------------------------------------------------------------

//Response Function
function ajax_response_join(r_type,r_data,args){
	
	//r_type should be always be XML in our case - so lets flag that bit
	var r_xml 				= r_data;
	var status 				= r_xml.getElementsByTagName("status")[0].childNodes[0].nodeValue;
	var message				= r_xml.getElementsByTagName("message")[0].childNodes[0].nodeValue;
	var request_cat 		= r_xml.getElementsByTagName("category_name")[0].childNodes[0].nodeValue;
	var request_loc 		= r_xml.getElementsByTagName("location_name")[0].childNodes[0].nodeValue;

	// Clear the target
	display_message(message);
	
}
//Load Status function
function ajax_load_join(loading,args){
	if(loading){
		document.getElementById(args.id).innerHTML = "<img src='/templates/img/loading.gif' width='50' hieght='50' alt='Loading...' />";
	}else{
		document.getElementById(args.id).innerHTML = "";	
	}	
}
//No Data function
function ajax_no_data_join(args){
	alert('Joining Feed Failed');
}

//constructor: var a = new ajax(params, script_name, s_method, output_format, response_func, load_func, no_data_func)
//sendrequest: ajax.sendData(params, script_name, s_method, output_format, response_func, load_func, no_data_func, response_func_arg_array, load_func_arg_array, no_data_func_arg_array)

//define new object
var b = new ajax('','ajax_join.xml.php','post','xml',ajax_response_join, ajax_load_join, ajax_no_data_join,null,{'id':'load'},null);

// Save State Ajax
// ------------------------------------------------------------------------------------------------------------

//Response Function
function ajax_response_save_state(r_type,r_data,args){
	
	//r_type should be always be XML in our case - so lets flag that bit
	var r_xml 			= r_data;
	var status 			= r_xml.getElementsByTagName("status")[0].childNodes[0].nodeValue;
	var message			= r_xml.getElementsByTagName("message")[0].childNodes[0].nodeValue;
	var ci				= r_xml.getElementsByTagName("c_id")[0].childNodes[0].nodeValue;
	var li				= r_xml.getElementsByTagName("l_id")[0].childNodes[0].nodeValue;
	var cn				= r_xml.getElementsByTagName("c_name_safe")[0].childNodes[0].nodeValue;
	var ln				= r_xml.getElementsByTagName("l_name_safe")[0].childNodes[0].nodeValue;
	
	window.current_location = li;
	window.current_category = ci;
	window.current_location_name = ln;
	window.current_category_name = cn;
	
}
//Load Status function
function ajax_load_save_state(loading,args){
	// Dont really need to notify user of this activity - interferes with the feed fetching notification
	if(loading){
		//document.getElementById(args.id).innerHTML = "<img src='/templates/img/loading.gif' width='50' hieght='50' alt='Loading...' />";
	}else{
		//document.getElementById(args.id).innerHTML = "";	
	}	
}
//No Data function
function ajax_no_data_save_state(args){
	alert('Saving Feed State Failed');
}

//constructor: var a = new ajax(params, script_name, s_method, output_format, response_func, load_func, no_data_func)
//sendrequest: ajax.sendData(params, script_name, s_method, output_format, response_func, load_func, no_data_func, response_func_arg_array, load_func_arg_array, no_data_func_arg_array)

//define new object
var c = new ajax('','ajax_save_state.xml.php','post','xml',ajax_response_save_state, ajax_load_save_state, ajax_no_data_save_state,null,{'id':'load'},null);

// Widget Code Generator
// ------------------------------------------------------------------------------------------------------------

//Response Function
function ajax_response_widget(r_type,r_data,args){
	
	//r_type should be always be txt in our case - so lets flag that bit
	
	var r_txt 	= r_data;
	var d		= document.createElement('div');
	var ta 		= document.createElement('textarea');
	var target	= document.getElementById('widget_code_content');
	
	// Clear old content
	clear_child_nodes(target);
	
	// Output Widget Code 
	ta.style.width = "400px";
	ta.style.height = "100px";
	ta.style.display = "block";
	ta.style.margin = "auto"
	ta.style.marginBottom = "20px";
	ta.innerHTML = r_txt;
	ta.value = r_txt;
	target.appendChild(ta);
	
	// Output Example wrapper
	d.style.width = "230px";
	d.style.margin = "auto";
	d.id = "widget_example_wrapper";
	target.appendChild(d);
	
	// Output Example - calls the widget script function manually - may need adjusting if widget code eventually contains anything other than the script
	gen_widget("widget_example_wrapper",window.current_location_name,window.current_category_name);
		
}
//Load Status function
function ajax_load_widget(loading,args){
	if(loading){
		document.getElementById(args.id).innerHTML = "<img src='/templates/img/loading.gif' width='50' hieght='50' alt='Loading...' />";
	}else{
		document.getElementById(args.id).innerHTML = "";	
	}	
}
//No Data function
function ajax_no_data_widget(args){
	alert('Fetching Widget Code Failed');
}

//constructor: var a = new ajax(params, script_name, s_method, output_format, response_func, load_func, no_data_func)
//sendrequest: ajax.sendData(params, script_name, s_method, output_format, response_func, load_func, no_data_func, response_func_arg_array, load_func_arg_array, no_data_func_arg_array)

//define new object
var d = new ajax('','ajax_widget.txt.php','get','txt',ajax_response_widget, ajax_load_widget, ajax_no_data_widget,null,{'id':'load'},null);

