//----------------------------------------------------------------------------------------------------------
// JAVASCRIPT AJAX LIBRARY
// SHAPESHIFT INTERACTIVE 
// CREATED: 19.03.2009
// VER: 1.0 
//----------------------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------------------
// AJAX CONSTRUCTS
//----------------------------------------------------------------------------------------------------------

var xmlHttpArray	= new Array();

function ajaxPost(url, data_string) {
	var index	= xmlHttpArray.push(GetXmlHttpObject(processXML)) - 1;
	
	xmlHttpArray[index].open("POST", url , true);
	xmlHttpArray[index].setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlHttpArray[index].send(data_string);
}

function GetXmlHttpObject(handler) {
	var objXmlHttp = null;
	
	if (window.ActiveXObject) { // IE
		try {
			if (!objXmlHttp) {
				objXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
		} catch (e) {
			try {
				objXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				try {
					objXmlHttp = new XMLHttpRequest();
				} catch (e) {
					alert(e);
				}
			}
		}
		if (handler)
			objXmlHttp.onreadystatechange = handler;
		
	} else if (window.XMLHttpRequest) { // Mozilla, Safari,...
		objXmlHttp = new XMLHttpRequest();
		if (handler) {
			objXmlHttp.onload = handler;
			objXmlHttp.onerror = handler;
		}
	}
	
	return objXmlHttp;
}

//----------------------------------------------------------------------------------------------------------
// PARSE XML
//----------------------------------------------------------------------------------------------------------

function processXML() {
	try {
		for (index=0; index<xmlHttpArray.length; index++) {
			if (xmlHttpArray[index].readyState==4 || xmlHttpArray[index].readyState=="complete") {
				var str	= '';
				var data_array	= new Array();
				
				hideLoading();
				
				//alert(xmlHttpArray[index].responseText)
				
				var xmldoc = xmlHttpArray[index].responseXML;
				
				if (xmldoc.getElementsByTagName('response').length) {
					var root_node = xmldoc.getElementsByTagName('response').item(0);
					
					for (i=0; i<root_node.childNodes.length; i++) {
						response_node	= root_node.childNodes.item(i);
						
						if (response_node.nodeName != '#text') {
							data_array[response_node.nodeName]	= new Array();
							
							for (j=0; j<response_node.childNodes.length; j++) {
								replace_node	= response_node.childNodes.item(j);
								
								if (replace_node.nodeName != '#text') {
									for (k=0; k<replace_node.childNodes.length; k++) {
										data_node	= replace_node.childNodes.item(k);
										
										if (data_node.nodeName == '#text') {
											if (!data_array[response_node.nodeName][replace_node.nodeName])
												data_array[response_node.nodeName][replace_node.nodeName]	= '';
											
											data_array[response_node.nodeName][replace_node.nodeName]	+= data_node.nodeValue;
										}
									}
								}
							}
						}
					}
					
					//alert(unescape(data_array['replace']['outerHTML']))
					
					var outerHTML	= '';
					
					if (data_array['replace']['outerHTML'])
						outerHTML	= unescape(data_array['replace']['outerHTML'])
					
					drawDiv(data_array['replace']['id'], data_array['replace']['class'], data_array['replace']['type'], outerHTML, data_array['replace']['originator']);
					
					if (data_array['output'] && data_array['output']['message'])
						publishMessage(data_array['output']);
					
					if (data_array['finalisation']['js_eval'])
						eval(data_array['finalisation']['js_eval']);
					
					xmlHttpArray.splice(index, 1);
				}
			}
		}
	} catch (e) {
		setCookie('ajax_error', e, 1);
		//if (confirm(e) + "\n\nReload page?")
		//	location.reload(true);
	}
}

//----------------------------------------------------------------------------------------------------------
// TARGET DIV
//----------------------------------------------------------------------------------------------------------

function processContainer(divObj, sourceObj, originatorObj) {
	if ((sourceObj.childNodes.length > 0) && (sourceObj.childNodes[0].id == divObj.id) && (divObj.getAttribute('type') != 'placeholder')) {
		mergeAttributes(divObj, sourceObj.childNodes[0]);
		sourceObj.innerHTML	= sourceObj.childNodes[0].innerHTML;
	}
	
	if (divObj) {
		var div_id	= divObj.id
		
		switch(divObj.getAttribute('type')) {
			case 'placeholder':
				var parentObj		= createPlaceholder(divObj);
				divObj.innerHTML	= sourceObj.innerHTML;
				
				if (parentObj.id == parentObj.childNodes[0].id)
					inheritAll(parentObj, parentObj.childNodes[0])
				break;
			
			case 'stack':
				pushStack(divObj);
				divObj.innerHTML	= sourceObj.innerHTML;
				break;
			
			case 'deque':
				loadDeque(divObj, sourceObj.innerHTML, document.getElementById(originatorObj).getAttribute('index'));
				break;
			
			case 'pagenation':
				loadPagenation(divObj, sourceObj.innerHTML, document.getElementById(originatorObj.id).getAttribute('pagesize'), document.getElementById(originatorObj.id).getAttribute('index'));
				break;
			
			default:
				divObj.innerHTML	= sourceObj.innerHTML;
				break;
		}
		
		return divObj;
	}
}