//merge of ajax.js with ajaxloader.js
//beginning of ajax.js
var IsBrowserIE = false;
var activeXType;
var HttpXMLObj;

function isSupportedBrowser()
{
	if (window.XMLHttpRequest != null)
	{
		return true;
	}
	if (navigator.platform.toLowerCase() == 'win32' || navigator.platform.toLowerCase() == 'win64')
	{
		if (window.ActiveXObject != null)
		{
			var UserAgent = navigator.userAgent.toLowerCase();
			if (parseInt(UserAgent.substring(UserAgent.indexOf('msie ') + 5 )) >= 5)
			{
				IsBrowserIE = true;
				return true;
			}
		}
	}
	return false;
}

function isPlatformWindows()
{
	if ((navigator.platform.toLowerCase() == 'win32') || (navigator.platform.toLowerCase() == 'win64'))
	{
		return true;
	}
	return false;
}
function getNewHttpXmlObject()
{	
	if (isPlatformWindows() && IsBrowserIE)
	{		
		if (activeXType == null)
		{
			var HttpXmlProgIdCandidates = [
				'Microsoft.XMLHTTP',
				'MSXML2.XMLHTTP',
				'MSXML2.XMLHTTP.5.0',
				'MSXML2.XMLHTTP.4.0',
				'MSXML2.XMLHTTP.3.0'];
			for (var i = 0; i < HttpXmlProgIdCandidates.length; i++)
			{
				try
				{
					HttpXMLObj = new ActiveXObject(HttpXmlProgIdCandidates[i]);
					activeXType = HttpXmlProgIdCandidates[i];
					return true
				}
				catch (objException) {}
			}
		}
		else
		{
			HttpXMLObj  = new ActiveXObject(activeXType);
			return true;
		}
	}
	else
	{
		try
		{
			HttpXMLObj  = new XMLHttpRequest();				
			return (HttpXMLObj  != null);
		}
		catch (objException) {}
	}
	return false;
}
function makeDCCProxyCall(strPostPayload, verb, proxy_url, readyStateFunction) 
{
	if (! getNewHttpXmlObject()) 
	{ 
		return; 
	}
	HttpXMLObj.onreadystatechange = readyStateFunction;
	HttpXMLObj.open(verb, proxy_url, true);
	HttpXMLObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');	
	HttpXMLObj.send(strPostPayload);	
}
// end of ajax.js

// dynamic content loader
function createXMLHttpRequest() {
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
	try { return new XMLHttpRequest(); } catch(e) {}
	return null;
}
function ajax_getContent(url, type, doNext, timeout){
	if(!timeout) timeout=300000; //5 minutes
	var xhReq = createXMLHttpRequest();
	var json;
	var requestTimer = setTimeout(function() {
       xhReq.abort();
       // Handle timeout situation, e.g. Retry or inform user.
     }, timeout);
	xhReq.open("GET", url, true); // Server stuck in a loop.
	xhReq.send(null);
	xhReq.onreadystatechange = function() {
		if (xhReq.readyState != 4)  { return; }
		clearTimeout(requestTimer);
		if (xhReq.status != 200)  {
			// Handle error, e.g. Display error message on page
			return;
		}
		switch(type){
			case 'js'  : ajax_installScript(xhReq.responseText); break;
			case 'css' : ajax_installCss(xhReq.responseText); break;
			//case 'html': ajax_loadContent(div, xhReq.responseText);
			case 'json' : json = ajax_json(xhReq.responseText); break;
		}
		if(doNext) setTimeout(doNext, 0, json); //do next inmediately
	}
}
function ajax_loadJs(url, doNext, timeout){
	ajax_getContent(addRandomToUrl(url), 'js', doNext, timeout);
}
function ajax_loadCss(url, doNext, timeout){
	ajax_getContent(url, 'css', doNext, timeout);
}
function ajax_loadContent(divId, url, waitingContent) {

	ajax_showLoading(divId, waitingContent);

	url = addRandomToUrl(url);
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
			var targetObj = $(divId);
			targetObj.innerHTML = modalDialog.wrapIntoMainDiv(modalDialog.wrapTitleAndContent(transport.responseText));
			ajax_parseJs(targetObj)
		}.bind(this) //binding the variable divId
	});
}
function ajax_parseJs(obj) {
	var scriptTags = obj.getElementsByTagName('script');
	var jsCode = '';
	for(var no=0;no<scriptTags.length;no++){	
		if(scriptTags[no].src){
	        var head = document.getElementsByTagName("head")[0];
	        var scriptObj = Builder.node("script",{type:"text/javascript",src:scriptTags[no].src});
		}else{
			if(navigator.userAgent.toLowerCase().indexOf('opera')>=0){
				jsCode = jsCode + scriptTags[no].text + '\n';
			} else {
				jsCode = jsCode + scriptTags[no].innerHTML;
			}	
		}
	}
	if(jsCode)ajax_installScript(jsCode);
}
function ajax_installScript(script) {		
    if (!script) return;
    if (window.execScript) {
    	window.execScript(script)
    }else {
        window.setTimeout(script,0);
    }
}
function ajax_linkCssFile(url) {
	if (!url) return;
	var i, a;
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
		if(a.getAttribute("rel").indexOf("stylesheet") != -1 && a.getAttribute("href").indexOf(url) != -1 && a.getAttribute("type").indexOf("text/css") != -1)
			return; //already installed
	}
	var head  = document.getElementsByTagName('head')[0];
	var link  = document.createElement("link");
	link.rel  = 'stylesheet'; link.type = 'text/css'; link.href = url;
	head.appendChild(link);
}
function ajax_installCss(css) {		
	if (!css) return;
	var head = document.getElementsByTagName('head')[0];
	var style = document.createElement("style");
	style.type = 'text/css';
	style.textContent = css;
	head.appendChild(style);
}
function evaluateCss(obj) {
	var cssTags = obj.getElementsByTagName('style');
	for(var no=0;no<cssTags.length;no++) {
		ajax_installCss(cssTags[no]);
	}	
}
function ajax_showLoading(div_id, waitingContent){
	var innerHTML;
	var div = document.getElementById(div_id);
	innerHTML=
		'<div align="center" valign="middle" style="width: 100%; height: 100%;">'+
			waitingContent+
		'</div>';
	div.innerHTML = innerHTML;
}
function addRandomToUrl(url){
	//add random id, workaround for IE cache
	if(url.indexOf("?")==-1) union = '?';
	else union = '&';
	url+=union+"dialog_rnd_id="+Math.random();
	return url;
}

function ajax_json(data){
	var str = data.replace(/\r/g,"").replace(/\n/g,"").replace(/<!.*?->/g,"");
	var obj;
	try{
		eval('obj='+str);
	}
	catch(e){
		obj = {};
	}
	return obj;
}
