var gRequest;

function urlencode( s ) 
{
	s = encodeURIComponent(s);
	return s.replace(/~/g,'%7E').replace(/%20/g,'+');
}

var handleEvent = {
	start:function(eventType, args){
		if ( args[1].targetLayer != "" ) {
			document.getElementById( args[1].targetLayer ).innerHTML = "<img src='/img/loader.gif' />";
		}
	},

	complete:function(eventType, args){
	},

	success:function(eventType, args){
		var ContentType = args[0].getResponseHeader['Content-Type'];		

		do
		{
			if ( ContentType.indexOf( "text/xml" ) >= 0 )
			{
				try
				{
					var XMLDoc 			= args[0].responseXML;
					var RootElement = XMLDoc.getElementsByTagName( "root" )[0];
					var ChildNode 	= RootElement.firstChild;
					while( ChildNode )
					{
						if ( ChildNode.getAttribute( "target" ) == "redirect" )
						{
							var ChildText = ChildNode.childNodes.item( 0 ).nodeValue;
							ChildText = ChildText.replace(/\&amp;/g,'&');
							window.location = ChildText;
							break;
						}								

						if ( ChildNode.getAttribute( "target" ) == "javascript" )
						{
							var ChildText = ChildNode.childNodes.item( 0 ).nodeValue;
							eval( ChildText );
						}
						else
						{
							document.getElementById( ChildNode.getAttribute( "target" )).innerHTML = 
								ChildNode.childNodes.item( 0 ).nodeValue;
						}
																						
						ChildNode = ChildNode.nextSibling;
					}
					
					try 
					{
						pageTracker._trackPageview( "/ajax" );
					} 
					catch(err) 
					{
						alert( err );
					}					
				}
				catch( Error )
				{
					document.getElementById( DestDiv ).innerHTML = "Something went wrong!";
				}
				break;
			}

			if ( ContentType.indexOf( "text/html" ) >= 0 )
			{			
				document.body.innerHTML = gRequest.responseText;
				break;
			}
				
			alert( "unexpected response format" );
		}
		while ( 0 );
	},

	failure:function(eventType, args){
	// do something when failureEvent fires.
	},

	abort:function(eventType, args){
	// do something when abortEvent fires.
	}
};

var callback = {
	customevents:{
		onStart:handleEvent.start,
		onComplete:handleEvent.complete,
		onSuccess:handleEvent.success,
		onFailure:handleEvent.failure,
		onAbort:handleEvent.abort
	},
	argument:{ targetLayer:"tbd" }
};


function makeRequest( sUrl, sTargetLayer ){
	callback.argument.targetLayer = sTargetLayer;
	gRequest = YAHOO.util.Connect.asyncRequest( 'GET', sUrl, callback );
}

function postForm( sForm, sUrl, sTargetLayer ){
	var formObject = document.getElementById( sForm ); 

	YAHOO.util.Connect.setForm( formObject ); 	
		
	callback.argument.targetLayer = sTargetLayer;
	gRequest = YAHOO.util.Connect.asyncRequest( 'POST', sUrl, callback );
}

function cancelRequest() {
		YAHOO.util.Connect.abort( gRequest );
}
