var WikiDirectory = {wikis:[]}

WikiDirectory.fetch = function(params) {
	WikiDirectory.showStatus('Loading...');
	var url = 'WikiList';
	if (params) {
		for (var i = 0; i < params.length; i++) {
			url += (i == 0 ? '?' : '&') + params[i];
		}
	}
	XMLRequest.send(url, WikiDirectory.receive);
}

WikiDirectory.receive = function(response) {
	WikiDirectory.hideStatus();
	var list = XML.tag(response.responseXML, 'wikilist');
	if (list) {
		WikiDirectory.setLastUpdate(list.getAttribute('lastupdate'));
		
		var array = XML.tags(list, 'wikisummary');
		for (var i = 0; i < array.length; i++) {
			var w = new WikiSummary(array[i]);
			WikiDirectory.wikis.push(w);
		}
		
		WikiDirectory.display('title');
	}
}

WikiDirectory.showStatus = function(text) {
	var s = $('wikidirectory-status-indicator');
	if (text) {
		DOM.clearNode(s);
		s.appendChild(DOM.text(text));
	}
	DOM.show(s);
}

WikiDirectory.hideStatus = function() {
	DOM.hide($('wikidirectory-status-indicator'));
}

WikiDirectory.setLastUpdate = function(lastupdate) {
	var s = $('wikidirectory-lastupdate-date');
	if (lastupdate) {
		DOM.clearNode(s);
		s.appendChild(DOM.text(lastupdate));
	}
}

WikiDirectory.display = function(sortfield) {
	WikiDirectory.setSortKey(sortfield);
	if (sortfield == 'title') WikiDirectory.wikis.sort(WikiDirectory.sortByTitle);
	else if (sortfield == 'description') WikiDirectory.wikis.sort(WikiDirectory.sortByDescription);
	else if (sortfield == 'creator') WikiDirectory.wikis.sort(WikiDirectory.sortByCreator);
	else if (sortfield == 'views') WikiDirectory.wikis.sort(WikiDirectory.sortByViews);
	else if (sortfield == 'edits') WikiDirectory.wikis.sort(WikiDirectory.sortByEdits);
	else if (sortfield == 'lastupdate') WikiDirectory.wikis.sort(WikiDirectory.sortByLastUpdate);
	
	var doc = $('wikidirectory-list');
	DOM.clearNode(doc);
	
	var eidparams = new Array();
	for (var i = 0; i < WikiDirectory.wikis.length; i++) {
		var b = WikiDirectory.wikis[i];
		doc.appendChild(b.domTree);
	}
}

WikiDirectory.sortByTitle = function(a, b) {return WikiDirectory.sortStrings('title', a, b);}
WikiDirectory.sortByDescription = function(a, b) {return WikiDirectory.sortStrings('description', a, b);}
WikiDirectory.sortByCreator = function(a, b) {return WikiDirectory.sortStrings('creator', a, b);}
WikiDirectory.sortByViews = function(a, b) {return WikiDirectory.sortInts('views', a, b);}
WikiDirectory.sortByEdits = function(a, b) {return WikiDirectory.sortInts('edits', a, b);}
WikiDirectory.sortByLastUpdate = function(a, b) {return WikiDirectory.sortInts('lastupdatems', a, b);}

WikiDirectory.sortStrings = function(field, a, b) {
	var x = a[field] ? a[field].toLowerCase() : '';
	var y = b[field] ? b[field].toLowerCase() : '';
	if (x == y && field != 'title') return (WikiDirectory.sortStrings('title', a, b));
	return (x > y ? (y != '' ? 1 : -1) : (x < y ? (x != '' ? -1 : 1) : 0));
}

WikiDirectory.sortInts = function(field, a, b) {
	var x = a[field] ? parseInt(a[field]) : 0;
	var y = b[field] ? parseInt(b[field]) : 0;
	if (x == y && field != 'title') return (WikiDirectory.sortStrings('title', a, b));
	return (x > y ? -1 : (x < y ? 1 : 0));
}

WikiDirectory.setSortKey = function(field) {
	(field == 'title') ? DOM.appendClass($('wikisummary-title-sort'), 'sortkey') : DOM.removeClass($('wikisummary-title-sort'), 'sortkey');
	(field == 'description') ? DOM.appendClass($('wikisummary-description-sort'), 'sortkey') : DOM.removeClass($('wikisummary-description-sort'), 'sortkey');
	(field == 'creator') ? DOM.appendClass($('wikisummary-creator-sort'), 'sortkey') : DOM.removeClass($('wikisummary-creator-sort'), 'sortkey');
	(field == 'views') ? DOM.appendClass($('wikisummary-views-sort'), 'sortkey') : DOM.removeClass($('wikisummary-views-sort'), 'sortkey');
	(field == 'edits') ? DOM.appendClass($('wikisummary-edits-sort'), 'sortkey') : DOM.removeClass($('wikisummary-edits-sort'), 'sortkey');
	(field == 'lastupdate') ? DOM.appendClass($('wikisummary-lastupdate-sort'), 'sortkey') : DOM.removeClass($('wikisummary-lastupdate-sort'), 'sortkey');
}

WikiDirectory.createRow = function(wiki) {
	var row = DOM._('span');
	row.className = 'wikisummary';
	
	var s = DOM._('span');
	s.className = 'wikisummary-title';
	
	var anchor = DOM._('a');
	anchor.href = wiki.siteurl;
	anchor.appendChild(DOM.text(wiki.title));
	s.appendChild(anchor);
	row.appendChild(s);
	
	s = DOM._('span');
	s.className = 'wikisummary-field wikisummary-description';
	s.appendChild(DOM.text(wiki.description));
	row.appendChild(s);
	
	s = DOM._('span');
	s.className = 'wikisummary-field wikisummary-creator';
	s.appendChild(DOM.text(wiki.creator));
	row.appendChild(s);
	
	s = DOM._('span');
	s.className = 'wikisummary-field wikisummary-views';
	s.appendChild(DOM.text(wiki.views));
	row.appendChild(s);
	
	s = DOM._('span');
	s.className = 'wikisummary-field wikisummary-edits';
	s.appendChild(DOM.text(wiki.edits));
	row.appendChild(s);
	
	s = DOM._('span');
	s.className = 'wikisummary-field wikisummary-lastupdate';
	s.appendChild(DOM.text(wiki.lastupdate));
	row.appendChild(s);
	
	return row;
}

var WikiSummary = function(w) {
	this.wikiid = w.getAttribute('id');
	this.title = XML.value(XML.tag(w,'title'));
	this.description = XML.value(XML.tag(w,'description'));
	this.siteurl = XML.value(XML.tag(w,'siteurl'));
	this.views = XML.value(XML.tag(w,'views'));
	this.edits = XML.value(XML.tag(w,'edits'));
	this.lastupdate = XML.value(XML.tag(w,'lastupdate'));
	this.lastupdatems = XML.tag(w,'lastupdate').getAttribute('ms');
	
	var c = XML.tag(w,'creator');
	if (c) {
		this.creator = XML.value(c);
		this.creatoreid = c.getAttribute('eid');
	}
	
	this.domTree = WikiDirectory.createRow(this);
	
}
