﻿/*
*************************************************
	FileName	:	Ajax.js
	Ver			:	4.2.2
	Auther		:	Rick Li
	Create Date	:	2007-5-31
*************************************************
================  For Example  ======================

Olny Post:
	Text:
		var ajax = new Ajax("/Ajax.aspx",'Post');
		ajax.AddItem("key","value");
		ajax.over(getResult);
		ajax.Send();
		function getResult()
		{
			FDMFrame.Info('提示信息',ajax.getResult());
			FDMFrame.Info('提示信息',ajax.getStatus());
		}
	Xml:
		var ajax = new Ajax("Ajax.aspx",'Post');
		ajax.AddItem("key","value");
		ajax.over(getResult);
		ajax.Xml();
		function getResult()
		{
			var xml = ajax.getResult();
		}

Post & Get
	Text:
		var ajax = new Ajax("Ajax.aspx",'Post');
		ajax.AddItem("get1","get1value");
		ajax.AddItem("get2","get2value");
		ajax.over(getResult);
		var postdata = "this is post data"
		ajax.send(postdata);
		function getResult()
		{
			var result = ajax.getResult();
		}
		
	Xml:	
		var ajax = new Ajax("Ajax.aspx",'Post');
		ajax.AddItem("get1","get1value");
		ajax.AddItem("get2","get2value");
		ajax.over(getResult);
		var postdata = "this is post data"
		ajax.xml(postdata);
		function getResult()
		{
			var xml = ajax.getResult();
		}
	
DataSet,DataTable:
	var ajax = new Ajax("/Ajax.aspx",'Post');
	ajax.AddItem("key","value");
	ajax.over(getResult);
	ajax.Xml();
	function getResult()
	{
		var Data = ajax.getData();
		if(ajax.DataType=="DataSet")
			FDMFrame.Info('提示信息',"DataSet");
		else if(ajax.DataType=="DataTable")
			FDMFrame.Info('提示信息',"DataTable");
		else
			FDMFrame.Info('提示信息',"Null");
	}
QueryString:
	var ajax = new Ajax("Ajax.aspx",'Post');
	var Param1 = ajax.QueryString("Param1");
	var Param2 = ajax.QueryString("Param2");
	
Clear All Item:
	var ajax = new Ajax("Ajax.aspx",'Post');
	var Param1 = ajax.QueryString("Param1");
	var Param2 = ajax.QueryString("Param2");
	ajax.clear();	
=================================================
*/

var IE = navigator.appName == "Microsoft Internet Explorer";
var NS = navigator.appName == "Netscape";
var Opera = navigator.appName == "Opera";
var ie = IE;
var ns = NS;
var ff = ns;
var FF = ns;
var IsIE = ie;
var IsNs = ns;
var isSa = false;
if(NS&&navigator.appVersion.toLowerCase().indexOf("safari")>0)isSa=true;
var ie7 = IE && navigator.appVersion.toLowerCase().indexOf("ie 7")>0;
var ie6 = IE && navigator.appVersion.toLowerCase().indexOf("ie 6")>0;
var Sa = isSa;
var sa = Sa;
function Ajax(URL, PostMethod) {
    var method = PostMethod.toLowerCase();
    var ajaxMethod = null;
    var _result = null;
    var _data = null;
    var _txt = null;
    var _xml = null;
    var status = null;
    var xmlObjectData = false;
    var dataTableData = false;
    var dataSetData = false;

    this.getText = function getText() {
        return _txt;
    }
    this.getData = function getData() {
        try
        {
            _data = Xml2DataSet(_result);
            if (_data) return _data;
        }
        catch (e) { }
        try
        {
            if (_data == null) _data = Xml2DataTable(_result);
            if (_data) return _data;
        }
        catch (e) { }
        return null;
    }
    this.getResult = function() {
        return _result;
    }
    this.getStatus = function() {
        return status;
    }
    this.getXml = function() {
        _xml = Xml2Object(_result);
        return _xml;
    }
    var ajaxHTTPRequest = null;
    if (window.XMLHttpRequest)
    {
        ajaxHTTPRequest = new XMLHttpRequest();
        if (ajaxHTTPRequest.overrideMimeType)
        {
            ajaxHTTPRequest.overrideMimeType("text/xml");
        }
    }
    else if (window.ActiveXObject)
    {
        try
        {
            ajaxHTTPRequest = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                ajaxHTTPRequest = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) { }
        }
        if (!ajaxHTTPRequest)
        {
            return false;
        }
    }
    this.clear = function() { this.Item = {} }
    this.Clear = function() { this.Item = {} }
    var item = new Array();
    var value = new Array();
    this.Item = {};
    this.AddItem = function(item, value) {
        this.Item[item] = value;
    }
    this.removeItem = function(item) {
        if (this.Item[item]) this.Item[item] = null;
    }
    this.Add = this.AddItem;
    this.addItem = this.AddItem;
    this.additem = this.AddItem;
    this.add = this.AddItem;
    var url = URL;
    this.send = function Send(_postdata) {
        _result = null;
        _data = null;
        _txt = null;
        status = null;
        var post = null;
        for (var i in this.Item)
        {
            if (!this.Item[i.toString()] == null) continue;
            if (!post)
            {
                post = i.toString() + "=" + escape(this.Item[i.toString()]);
            }
            else
            {
                post += "&" + i.toString() + "=" + escape(this.Item[i.toString()]);
            }
        }
        try
        {
            if (method == "post")
            {
                if (_postdata)
                {
                    if (post.length > 0) url = url.charAt(url.length - 1) == "?" ? url : url.indexOf("?") > 0 ? url + "&" : url + "?";
                    //FDMFrame.Info('提示信息',url);
                    ajaxHTTPRequest.open("POST", url + post, true);
                }
                else
                {
                    ajaxHTTPRequest.open("POST", url, true);
                    ajaxHTTPRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                }
            }
            else
            {
                ajaxHTTPRequest.open("get", url, true);
                ajaxHTTPRequest.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT");
                //ajaxHTTPRequest.setRequestHeader("Cache-Control", "no-cache"); 
            }
            ajaxHTTPRequest.onreadystatechange = function() {
                if (ajaxHTTPRequest.readyState == 4)
                {
                    if (ajaxHTTPRequest.status)
                    {
                        status = ajaxHTTPRequest.status;
                        if (ajaxHTTPRequest.status == 200)
                        {
                            _result = ajaxHTTPRequest.responseText;
                        }
                        _txt = ajaxHTTPRequest.responseText;
                        if (ajaxMethod) ajaxMethod();
                    }
                }
            }
            if (_postdata)
                ajaxHTTPRequest.send(_postdata);
            else
                ajaxHTTPRequest.send(post);
        }
        catch (e)
        {
            //FDMFrame.Info('提示信息',e);
            //FDMFrame.Info('提示信息',e.description);
            //return null;
        }
    }
    this.Send = this.send;
    this.xml = function xml(_postdata) {
        _result = null;
        _data = null;
        _txt = null;
        status = null;
        var post = null;
        for (var i in this.Item)
        {
            if (!this.Item[i.toString()] == null) continue;
            if (!post)
            {
                post = i.toString() + "=" + escape(this.Item[i.toString()]);
            }
            else
            {
                post += "&" + i.toString() + "=" + escape(this.Item[i.toString()]);
            }
        }
        try
        {
            if (method == "post")
            {
                if (_postdata)
                {
                    if (post.length > 0) url = url.charAt(url.length - 1) == "?" ? url : url.indexOf("?") > 0 ? url + "&" : url + "?";
                    ajaxHTTPRequest.open("POST", url + post, true);
                }
                else
                {
                    ajaxHTTPRequest.open("POST", url, true);
                    ajaxHTTPRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                }
            }
            else
            {
                ajaxHTTPRequest.open("get", url, true);
                ajaxHTTPRequest.setRequestHeader("If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT");
                //ajaxHTTPRequest.setRequestHeader("Cache-Control", "no-cache");
            }
            ajaxHTTPRequest.onreadystatechange = function() {
                if (ajaxHTTPRequest.readyState == 4)
                {
                    if (ajaxHTTPRequest.status)
                    {
                        status = ajaxHTTPRequest.status;
                        if (ajaxHTTPRequest.status == 200)
                        {
                            _result = ajaxHTTPRequest.responseXML;
                            if (_result.childNodes.length == 0)
                            {
                                _txt = ajaxHTTPRequest.responseText;
                                _result = _txt.toXml();
                            }
                        }
                        else
                        {
                            _txt = ajaxHTTPRequest.responseText;
                        }
                        if (ajaxMethod) ajaxMethod();
                    }
                }
            }
            if (_postdata)
            {
                ajaxHTTPRequest.send(_postdata);
            }
            else
                ajaxHTTPRequest.send(post);
        }
        catch (e)
        {
            return null;
        }
    }
    this.XML = this.xml;
    this.Xml = this.xml;
    this.over = function Over(EvtMethod) {
        ajaxMethod = EvtMethod;
    }
    this.SetOverLoad = this.over;
    this.FinishTo = this.over;
    this.Finish = this.over;
    this.finish = this.over;
    this.OverTo = this.over;
    this.Over = this.over;
    this.QueryString = function(key) {
        var url = window.location.search;
        if (url.trim().length > 0 && url.indexOf("?") == 0) url = url.substring(1, url.length);
        var _opt = url.split("&");
        var _para = new Array();
        var _value = new Array();
        for (var i = 0; i < _opt.length; i++)
        {
            if (i > 0 && _opt[i].indexOf("amp;") == 0) _opt[i] = _opt[i].subString(4, _opt[i].length - 4);
            _para[i] = _opt[i].substring(0, _opt[i].indexOf("="));
            _value[i] = _opt[i].substring(_opt[i].indexOf("=") + 1, _opt[i].length);
        }
        var Opt = new Array(_para, _value);
        for (var i = 0; i < Opt[0].length; i++)
        {
            if (Opt[0][i].toLowerCase() == key.toLowerCase()) return Opt[1][i];
        }
        return null;
    }
    this.getParamValue = function getParamValue(url, ParamName) {
        url = url.substring(url.indexOf("?") + 1, url.length);
        var _opt = url.split("&");
        var _para = new Array();
        var _value = new Array();
        for (var i = 0; i < _opt.length; i++)
        {
            if (i > 0 && _opt[i].indexOf("amp;") == 0) _opt[i] = _opt[i].subString(4, _opt[i].length - 4);
            _para[i] = _opt[i].substring(0, _opt[i].indexOf("="));
            _value[i] = _opt[i].substring(_opt[i].indexOf("=") + 1, _opt[i].length);
        }
        var Opt = new Array(_para, _value);
        for (var i = 0; i < Opt[0].length; i++)
        {
            if (Opt[0][i].toLowerCase() == ParamName.toLowerCase()) return Opt[1][i];
        }
        return null;
    }
    this.getParam = function getParam(url) {
        url = url.substring(url.indexOf("?") + 1, url.length);
        var _opt = url.split("&");
        var _para = new Array();
        var _value = new Array();
        for (var i = 0; i < _opt.length; i++)
        {
            if (i > 0 && _opt[i].indexOf("amp;") == 0) _opt[i] = _opt[i].subString(4, _opt[i].length - 4);
            _para[i] = _opt[i].substring(0, _opt[i].indexOf("="));
            _value[i] = _opt[i].substring(_opt[i].indexOf("=") + 1, _opt[i].length);
        }
        var __result = new Array(_para, _value);
        return __result;
    }
}
function DataSet() {
    var tables_ = new Array();
    this.Tables = tables_;
    this.AddTable = function DS_AddTable(Dt) {
        tables_[tables_.length] = Dt;
    }
}
function DataTable() {
    this.RecordCount = 0;
    this.PageSize = 20;
    this.Page = 1;
    var rows_ = new Array();
    this.Rows = rows_;
    this.AddRow = function Ds_AddRow(DataRow_) {
        rows_[rows_.length] = DataRow_;
    }
    var cols_ = new Array();
    this.Cols = cols_;
    this.AddCol = function Ds_AddCol(ColName) {
        cols_[cols_.length] = ColName;
    }
    this.AddData = function Ds_AddData(DataTable_) {
        for (var i = 0; i < DataTable_.Rows.length; i++)
        {
            AddRow(DataTable_.Rows[i]);
        }
    }
}
function DataRow(colsNameList) {
    var value_ = new Array();
    this.Values = value_;
    var cols_ = new Array();
    this.setValue = function Ds_setValue(ColName, Values) {
        try
        {
            for (var i = 0; i < colsNameList.length; i++)
            {
                if (ColName == colsNameList[i])
                {
                    this[ColName] = Values;
                    value_[i] = Values;
                }
            }
        }
        catch (e)
        {
            return null;
        }
    }
    this.getValue = function Ds_getValue(ColName) {
        try
        {
            for (var i = 0; i < colsNameList.length; i++)
            {
                if (ColName == colsNameList[i]) return value_[i];
            }
        }
        catch (e)
        {
            return null;
        }
    }
    this.value = this.getValue;
}
function Xml2Object(XmlDoc) {
    var result = {};
    var getChild = function(node, obj) {
        if (!node) return;
        var ratt = node.attributes;
        if (ratt)
        {
            for (var i = 0; i < ratt.length; i++)
            {
                obj[ratt[i].name] = ratt[i].value;
            }
        }
        if (node.childNodes.length > 0)
        {
            if (node.childNodes.length == 1 && node.childNodes[0].nodeType == 3)
            {
                if (obj.length == undefined)
                    obj["innerText"] = node.text ? node.text : node.textContent ? node.textContent : "";
                else
                {
                    obj[obj.length] = {};
                    obj[obj.length - 1]["innerText"] = node.text ? node.text : node.textContent ? node.textContent : "";
                }
            }
            else
            {
                for (var i = 0; i < node.childNodes.length; i++)
                {
                    if (node.childNodes[i].nodeType != 1) continue;
                    if (!obj[node.childNodes[i].nodeName])
                    {
                        if (GetNode(node, node.childNodes[i].nodeName).length > 1)
                        {
                            obj[node.childNodes[i].nodeName] = new Array();
                        }
                        else
                        {
                            obj[node.childNodes[i].nodeName] = {};
                            obj[node.childNodes[i].nodeName][0] = obj[node.childNodes[i].nodeName];

                        }
                        if (obj[node.childNodes[i].nodeName].length != undefined)
                        {
                            obj[node.childNodes[i].nodeName][0] = {};
                            getChild(node.childNodes[i], obj[node.childNodes[i].nodeName][0]);
                        }
                        else
                            getChild(node.childNodes[i], obj[node.childNodes[i].nodeName]);

                    }
                    else if (obj[node.childNodes[i].nodeName].length != undefined)
                    {
                        obj[node.childNodes[i].nodeName][obj[node.childNodes[i].nodeName].length] = {};
                        getChild(node.childNodes[i], obj[node.childNodes[i].nodeName][obj[node.childNodes[i].nodeName].length - 1]);
                    }

                }
            }
        }
    }
    getChild(XmlDoc, result);
    return result;
}
function Xml2DataTable(XmlDoc) {
    var Xml = XmlDoc;
    var Tables = GetNode(Xml, "Table");
    if (Tables == null) return null;
    var dt = new DataTable();
    if (Tables[0].getAttribute("PageSize"))
        dt.PageSize = Tables[0].getAttribute("PageSize").parseInt();
    if (Tables[0].getAttribute("Page"))
        dt.Page = Tables[0].getAttribute("Page").parseInt();
    if (Tables[0].getAttribute("RecordCount"))
        dt.RecordCount = Tables[0].getAttribute("RecordCount").parseInt();
    for (var i = 0; i < Tables[0].attributes.length; i++)
    {
        var attr = Tables[0].attributes[0].name.toLower();
        if (attr.Trim() != "pagesize" && attr.Trim() != "page" && attr.Trim() != "recordcount")
        {
            try
            {
                dt[Tables[0].attributes[i].name] = Tables[0].getAttribute(Tables[0].attributes[i].name).parseInt();
            }
            catch (e)
            {
                dt[Tables[0].attributes[i].name] = Tables[0].getAttribute(Tables[0].attributes[i].name)
            }
        }
    }
    var head = GetNode(Tables[0], "ColName");
    if (head == null) return;
    var ColName = GetNode(head[0], "Value");
    if (ColName == null) return null;
    for (var j = 0; j < ColName.length; j++)
    {
        if (IE)
            dt.AddCol(ColName[j].text);
        else
            dt.AddCol(ColName[j].textContent);

    }
    var Row = GetNode(Tables[0], "Row");
    if (Row == null) return dt;
    for (var j = 0; j < Row.length; j++)
    {
        var dr = new DataRow(dt.Cols);
        var Values = GetNode(Row[j], "Value");
        for (var k = 0; k < Values.length; k++)
        {
            if (IE)
            {
                dr[k] = Values[k].text;
                dr[dt.Cols[k]] = Values[k].text;
                dr.Values[k] = Values[k].text;
            }
            else
            {
                dr[k] = Values[k].textContent;
                dr[dt.Cols[k]] = Values[k].textContent;
                dr.Values[k] = Values[k].textContent;
            }
        }
        dt.AddRow(dr);
    }
    return dt;
}
function Xml2DataSet(XmlDoc) {
    if (!XmlDoc) return null;
    var Xml = XmlDoc;
    var Ds = GetNode(Xml, "DataSet");
    if (Ds == null) return null;
    var Tables = GetNode(Ds[0], "Table");
    if (Tables == null) return null;
    var ds = new DataSet();
    for (var i = 0; i < Tables.length; i++)
    {
        var dt = new DataTable();
        var head = GetNode(Tables[i], "ColName");
        var ColName = GetNode(head[0], "Value");
        if (ColName != null)
        {
            for (var j = 0; j < ColName.length; j++)
            {
                if (IE)
                    dt.AddCol(ColName[j].text);
                else
                    dt.AddCol(ColName[j].textContent);
            }
        }
        var Row = GetNode(Tables[i], "Row");
        if (Row != null)
        {
            for (var j = 0; j < Row.length; j++)
            {
                var dr = new DataRow(dt.Cols);
                var Values = GetNode(Row[j], "Value");
                if (Values)
                    for (var k = 0; k < Values.length; k++)
                {
                    if (IE)
                    {
                        dr.Values[k] = Values[k].text;
                        dr[ColName[k].text] = Values[k].text;

                    }
                    else
                    {
                        dr.Values[k] = Values[k].textContent;
                        dr[ColName[k].textContent] = Values[k].textContent;
                    }
                }
                dt.AddRow(dr);
            }
        }
        ds.AddTable(dt);
    }
    return ds;
}
function GetNode(XML, TagName) {
    var ChildNodeX = new Array();
    try
    {
        for (var G_i = 0; G_i < XML.childNodes.length; G_i++)
        {
            if (XML.childNodes[G_i].nodeType == 1)
            {
                if (XML.childNodes[G_i].nodeName == TagName)
                {
                    ChildNodeX[ChildNodeX.length] = XML.childNodes[G_i];
                }
            }
        }
    }
    catch (e) { }
    if (ChildNodeX.length == 0)
        return null;
    else
        return ChildNodeX;
}
function getXml(URL) {
    try
    {
        if (window.ActiveXObject)
            var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
        else if (document.implementation && document.implementation.createDocument)
            var xmldoc = document.implementation.createDocument("", "", null);
        xmldoc.async = false;
        xmldoc.preserveWhiteSpace = true;
        xmldoc.load(URL);
        return xmldoc;
    }
    catch (e) { return null; }
}
