/* Home Page Module Sort */
/**
 * Turns a URL into an argument for links which function
 * purely as event launchers.
 */
String.prototype.getUrlArgument = function() {
	// Parses a URL like "javascript:void(42);" and returns "42"
	if (val = this.match(/[Jj]avascript:void\(\'?(.*?)\'?\);?/i)) {
		if (val[1]) return val[1];
	}
	return this;
}

var AcceptDeleteEndorsmentClass = Class.create();
AcceptDeleteEndorsmentClass.prototype = {
	//Properties
	el: null,
	id: null,
	modName: null,
	accept:null,
	li: null,
	oldel: null,
	removeFunc: null,
	ajax: null,
	ajaxUrl: null,
	
	//Constructor
	initialize: function(el, accept) {
		this.ajaxUrl = window.location;
		this.el = el;
		var argument = this.el.href.getUrlArgument().split('|');
		
		this.modName = argument[0];
		this.id = argument[1];
		
		//alert(this.modName + '|' + this.id);
		
		this.accept = accept; //true - accept, false - delete
		this.observeLink();
		this.findLI();
	},
	
	//Methods
	observeLink: function () {
		this.removeFunc = this.removeLI.bindAsEventListener(this)
		Event.observe(this.el, 'click', this.removeFunc);
	},
	removeLI: function () {
		new Effect.Highlight(this.li);
		if (this.accept && $('accepted_endorsements'))
		{
			this.el.innerHTML = 'Reciprocate';
			Element.removeClassName(this.el, 'accept_endorsement');
			Event.stopObserving(this.el, 'click', this.removeFunc);
			$('accepted_endorsements').appendChild(this.li);
			this.setLIClass();
		}
		else if (this.accept)
		{
			Event.stopObserving(this.el, 'click', this.removeFunc);
			new Element.hide(this.li);
		}
		else
		{
			new Effect.DropOut(this.li, {afterFinish: this.destroyLI.bind(this)});
		}
		//this.setLIClass();
		this.AjaxOut();
	},
	findLI: function () {
		var element = this.el;
		var tagName = 'li';
		while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase())))
			element = element.parentNode;
		this.li = element;
	},
	destroyLI: function () {
		//var ul = obj.effects[0].element.parentNode
		//ul.removeChild(obj.effects[0].element);
		//setLIClass(ul);
		this.li.parentNode.removeChild(this.li);
		this.setLIClass();
	},
	setLIClass: function() {
		// function to reset class="last" to the appropriate LI
		var lis;
		if ($('pending_endorsements')) {
			lis = $('pending_endorsements').getElementsByTagName('LI');
		}
		if ($('accepted_endorsements')) {
			/*lis = $('accepted_endorsements').getElementsByTagName('LI');
			alert (lis.length);*/
			lis = $('accepted_endorsements').getElementsByTagName('LI');
			for (var i=0; i<lis.length; i++) {
				if (i == lis.length-1) { // && lis[i].className.indexOf("last") != -1) {
					//lis[i].className += ' last';
					//alert (this.li[i]);
					Element.addClassName(lis[i], 'last');
				}
				else {
					Element.removeClassName(lis[i], 'last');	
					//lis[i].className = '';
				}
			}
		}
		/*
		var tagName = 'ul';
		while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName.toUpperCase())))
			element = element.parentNode;
		*/
		//var lis = element.getElementsByTagName('LI');
		//alert (lis.length);
	},
	AjaxOut: function() {
		var vars = '__ajax__=' + this.modName + '&endorsement=' + this.id + '&action=' + (this.accept ? 'accept' : 'delete');
		this.ajax = new Ajax.Request(this.ajaxUrl,
			{
				parameters: vars,
				onSuccess: this.AjaxIn.bind(this)
			}
		);
	},
	AjaxIn : function(req) {
		//alert('acceptdeleteendorsement.js: ' + req.responseText);
		var response = this.getElementTextNS(null, 'response', req.responseXML, 0);
		if (this.accept && $('accepted_endorsements') && response)
			this.el.href = response;
	},
	getElementTextNS: function (prefix, local, parentElem, index) {
		var result = "";
		if (prefix && document.all) {
			// IE/Windows way of handling namespaces
			result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
		} else {
			result = parentElem.getElementsByTagName(local)[index];
		}
		if (result) {
			// get text, accounting for possible
			// whitespace (carriage return) text nodes
			if (result.childNodes.length > 1) {
				return result.childNodes[1].nodeValue;
			} else {
				return result.firstChild.nodeValue;
			}
		} else {
			return null;
	}
}
};

/*function setLIClass(elem) {
	// function to reset class="last" to the appropriate LI
	var lis = elem.getElementsByTagName('li');
	alert (lis.length);
}*/
/*
var AcceptDeleteEndorsmentClass_Rules = {
	'li .actions a.delete_endorsement' : function(el){
		new AcceptDeleteEndorsmentClass (el, false); //false = delete
	},
	'li .actions a.accept_endorsement' : function(el){
		new AcceptDeleteEndorsmentClass (el, true); //true = accept
	}
};
Behaviour.register(AcceptDeleteEndorsmentClass_Rules);*/



EventSelectors.register({
	'li .actions a.delete_endorsement': function(el) {
		new AcceptDeleteEndorsmentClass (el, false); //false = delete
	}, 
	'li .actions a.accept_endorsement' : function(el){
		new AcceptDeleteEndorsmentClass (el, true); //true = accept
	}	
}, true);
