/*
	Ajax functionality
	Dependencies:
		YUI libraries
*/

/* Ajaxification of links */

function ajaxify_clipboard_links(type) {
	var re = /cbaction=([\w]+)\/([\w]+)\/([\d]+)/i;
	YAHOO.util.Dom.getElementsByClassName(type + 'ClipboardLink', 'a', document,
		function(a) {
			var match = a.href.match(re);
			if(match) {
				var ctr = YAHOO.util.Dom.getAncestorByClassName(a, type);
				var ctr_id = (ctr && ctr.id ? ctr.id : '');
				a.href = "javascript:clipboard_do_listing("
							+ "'" + match[1] + "',"
							+ "'" + match[2] + "',"
							+ "'" + match[3] + "',"
							+ "'" + type + "',"
							+ "'" + ctr_id + "');";
			}
		}
	);
}

function ajaxify_results() {
	YAHOO.util.Dom.getElementsByClassName('pageLink', 'a', document,
		function(a) {
			var params = a.href.split('/go/')[1];
			var ctr = YAHOO.util.Dom.getAncestorByClassName(a, 'pagination');
			var scroll = (ctr != null &&
							YAHOO.util.Dom.hasClass(ctr, 'autoscroll'));
			
			a.href = "javascript:get_ajax_results("
						+ "'/" + params + "',"
						+ (scroll ? "true" : "false") + ");";
		}
	);
	
	ajaxify_clipboard_links('result');
}

function ajaxify_details() {
	ajaxify_clipboard_links('details');
}

/* Ajax data */

function get_ajax_results(parameters,scroll) {
	var cb = {
		success: function(obj) {
			var html = obj.responseText;
			var container = YAHOO.util.Dom.get('ajaxResultsContainer');
			container.innerHTML = html;
			
			/* code is data */
			var re = /<script>((?:.|[\r\n])*?)<\/script>/;
			var match = html.match(re);
			if(match != null) {
				eval(match[1]);
			}
			
			if(window.g_ajax_update_event) {
				g_ajax_update_event.fire({ success: true, scroll: scroll, parameters: parameters });
			}
		},
		failure: function(obj) {
			alert('Unable to load search results.');
			if(window.g_ajax_update_event) {
				g_ajax_update_event.fire({ success: false });
			}
		}
	};
	
	if(window.g_ajax_preupdate_event) {
		g_ajax_preupdate_event.fire();
	}
	
	YAHOO.util.Connect.asyncRequest('GET', '/ajax/results' + parameters, cb, null);
}
