﻿var ajaxEngine;
var ajaxJobCallbacks;
var ajaxJobNames;
var ajaxJobUrls;
var ajaxJobMethods;
var ajaxJobQueries;
var ajaxJobCount=0;
var ajaxCurrentJob=0;

if (!ajaxEngine) ajaxEngine=AjaxInitEngine();

function AjaxCallback() {
	if (ajaxEngine.readyState == 4) {
		// only if "OK"
		if (ajaxEngine.status == 200) {
			if (ajaxJobNames[ajaxCurrentJob]=='download')
				ajaxJobCallbacks[ajaxCurrentJob](ajaxEngine.responseText);
			else
				ajaxJobCallbacks[ajaxCurrentJob](ajaxEngine.responseXML||ajaxEngine.responseText);
		} else {
			ajaxJobCallbacks[ajaxCurrentJob](null);
			// alert('無法擷取 '+ajaxJobNames[ajaxCurrentJob] + ' 資料:\n'+ajaxEngine.status+'('+ajaxEngine.statusText+')');
		}
			
		if (ajaxJobCount>ajaxCurrentJob) {
			// alert('ajaxJobCount='+ajaxJobCount+', ajaxCurrentJob='+ajaxCurrentJob);
			ajaxCurrentJob++;
			AjaxRunJob();
		} else {
			ajaxCurrentJob=0;
			window.status='';
		}
	}
}

function AjaxInitEngine() {
	/*var engine;
	
	if (window.XMLHttpRequest)
		engine = new XMLHttpRequest();
	else
		engine = new ActiveXObject("Microsoft.XMLHTTP");
	
	engine.onreadystatechange=AjaxCallback;*/
	ajaxJobCallbacks=new Array();
	ajaxJobNames=new Array();
	ajaxJobUrls=new Array();
	ajaxJobMethods=new Array();
	ajaxJobQueries=new Array();
	return null; //engine;
}

function AjaxAddJob(name,url,method,query,callback) {
	ajaxJobCount++;
	ajaxJobCallbacks[ajaxJobCount]=callback;
	ajaxJobNames[ajaxJobCount]=name;
	ajaxJobUrls[ajaxJobCount]=url;
	ajaxJobMethods[ajaxJobCount]=method;
	ajaxJobQueries[ajaxJobCount]=query;
	
	if (ajaxCurrentJob==0) {
		ajaxCurrentJob=ajaxJobCount;
		AjaxRunJob();
	}
}

function AjaxRunJob() {
		//var engine;
		
		if (window.XMLHttpRequest)
			ajaxEngine = new XMLHttpRequest();
		else
			ajaxEngine = new ActiveXObject("Microsoft.XMLHTTP");
		ajaxEngine.onreadystatechange=AjaxCallback;			
		
		window.status='正在擷取 '+ajaxJobNames[ajaxCurrentJob]+' 資料...';
		//alert(ajaxJobUrls[ajaxCurrentJob]);
		ajaxEngine.open(ajaxJobMethods[ajaxCurrentJob],ajaxJobUrls[ajaxCurrentJob],true);
		if (ajaxJobMethods[ajaxCurrentJob]=='POST') ajaxEngine.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		ajaxEngine.send(ajaxJobQueries[ajaxCurrentJob]);
}

function getElementTextNS(local, parentElem, index) {
    var 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 "n/a";
    }
}

function AjaxUtilGetElement(n,d) {
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=AjaxUtilGetElement(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

// Create a cookie with the specified name and value.
function AjaxUtilSetCookie(sName, sValue)
{
  //date = new Date();
  document.cookie = sName + "=" + escape(sValue);// + "; expires=" + date.toGMTString();
}

// Create a cookie with the specified name and value.
function AjaxUtilSetPersistentCookie(sName, sValue)
{
  //date = new Date();
  document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 2010 23:59:59 GMT";
}

// Retrieve the value of the cookie with the specified name.
function AjaxUtilGetCookie(sName)
{
  // cookies are separated by semicolons
  var aCookie = document.cookie.split("; ");
  for (var i=0; i < aCookie.length; i++)
  {
    // a name/value pair (a crumb) is separated by an equal sign
    var aCrumb = aCookie[i].split("=");
    if (sName == aCrumb[0]) 
      return unescape(aCrumb[1]);
  }

  // a cookie with the requested name does not exist
  return null;
}

// Delete the cookie with the specified name.
function AjaxUtilDelCookie(sName)
{
  document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
