/* Directory AJAX functions */
/* Requires Prototype */

/* Constructor function, creates ajax call to XML file */
function Directory(file,container,menu, currentpage) {
	this.file = file;
	this.container = container;
	this.menu = menu;
	this.currentpage = currentpage;
	this.data = '';
	this.query = { fetch: 1 };

	this.ranges = [$A($R('A','E')),$A($R('F','K')),$A($R('L','O')),$A($R('P','T')),$A($R('U','Z'))];
	this.rangeindex = 0;
	this.addHandlers();
};

/* Load content (via AJAX) */
Directory.prototype.load = function()
{
	
	if(arguments[0]) this.setQuery(arguments[0]);
	var content = "";
	this.currentrange = this.ranges[0];
	var q = this.query;
	
	/* obtain current range from letter */
	if(!q.country) 
	{
		$A(this.ranges).each(function(r,i){ 
			if(r.include(q.letter)) {
				
				this.currentrange = r; 
				this.rangeindex = i;
			}
		}.bind(this));
	}
	var query = $H(this.query).toQueryString();
	new Ajax.Request(this.file, {
		method: 'get',
		parameters: query,
		contentType: 'text/html',
		onSuccess: function(transport) {
			this.data = transport.responseText;
			$(this.container).update(this.data);
			this.addHandlers();
			if(q.anchor) $(q.letter).scrollTo();
		}.bind(this)
	});
	
	this.query = { fetch: 1 };
}

/* Add event handlers */
Directory.prototype.addHandlers = function()
{
	/* add load handler to country select */
	if($(this.menu)) {
		$(this.menu).stopObserving('change');
		$(this.menu).observe('change',function(event){
			var element = event.element();
			var cid = $F(element);
			if(this.currentpage == 175) this.load({country: cid});
			else element.form.submit();	
		}.bind(this));
	}
	
	/* determine previous and next pages/letters */
	
	var r = this.ranges;
	container = $(this.container);
	
	if(container) {
		var prevrange = this.ranges[this.rangeindex-1] || this.ranges.last();
		var prevletter = prevrange.last();
		var nextrange = this.ranges[this.rangeindex+1] || this.ranges.first();
		var nextletter = nextrange.first();
		/* add event handler to previous letter links */
		container.select('a.prev').invoke('observe', 'click', function(event){
			this.load({letter: prevletter, anchor: 1});
			Event.stop(event);
		}.bindAsEventListener(this));
		
		/* add event handler to next letter links */
		container.select('a.next').invoke('observe', 'click', function(event){
			this.load({letter: nextletter, anchor: 1});
			Event.stop(event);
		}.bindAsEventListener(this));
		
		/* add event handler to page links */
		container.select('ul.pagenav').each(function(u){
			
			links = u.select('a');
			
			links.each(function(l,i){	
				var firstletter = this.ranges[i].first();
				l.observe('click', function(event){
					
					this.load({letter: firstletter});
					Event.stop(event);
				}.bindAsEventListener(this));
			}.bind(this));
		}.bind(this));
	}
}

Directory.prototype.debug = function(q)
{
	alert("letter: "+q.letter+"\ncountry: "+q.country+"\nanchor: "+q.anchor);
}

Directory.prototype.setQuery = function(q)
{
	if(q.country) this.query.country = q.country;
	if(q.letter) this.query.letter = q.letter;
	if(q.anchor) this.query.anchor = q.anchor;
}
