/******************************************************************************
  SupeSite/X-Sapce - Ajax for SS/XS
  Copyright 2001-2006 Comsenz Inc. (http://www.comsenz.com)
*******************************************************************************/

var xml_http_building_link = '請等待，正在建立連接...';
var xml_http_sending = '請等待，正在發送數據...';
var xml_http_loading = '請等待，正在接受數據...';
var xml_http_load_failed = '通信失敗，請刷新重新嘗試';
var xml_http_data_in_processed = '通信成功，數據正在處理中...';

function Ajax(statusId, recvType) {
	var aj = new Object();
	var clientHeight = scrollTop = 0;
	if(navigator.userAgent.toLowerCase().indexOf('opera') > -1) {
		clientHeight = document.body.clientHeight;
		scrollTop = document.body.scrollTop;
	} else {
		clientHeight = document.documentElement.clientHeight;
		scrollTop = document.documentElement.scrollTop;
	}
	if(document.getElementById(statusId)) {
		aj.statusId = document.getElementById(statusId);
		document.getElementById(statusId).style.top = (clientHeight +scrollTop - 40)+"px";
	} else {
		var divElement = document.createElement("DIV");
		divElement.className = "xspace-ajaxdiv";
		divElement.style.cssText = "width:200px; height:40px; line-height: 40px; text-align: center;";
		divElement.style.left = 0;
		divElement.style.top = (clientHeight +scrollTop - 40)+"px";
		divElement.id = statusId;
		document.body.appendChild(divElement);
		aj.statusId = divElement;
	}
	
	aj.targetUrl = '';
	aj.sendString = '';
	aj.recvType = recvType ? recvType : 'HTML';//HTML XML
	aj.resultHandle = null;

	aj.createXMLHttpRequest = function() {
		var request = false;
		if(window.XMLHttpRequest) {
			request = new XMLHttpRequest();
			if(request.overrideMimeType) {
				request.overrideMimeType('text/xml');
			}
		} else if(window.ActiveXObject) {
			var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
			for(var i=0; i<versions.length; i++) {
				try {
					request = new ActiveXObject(versions[i]);
					if(request) {
						return request;
					}
				} catch(e) {
					//alert(e.message);
				}
			}
		}
		return request;
	}

	aj.XMLHttpRequest = aj.createXMLHttpRequest();

	aj.processHandle = function() {
		aj.statusId.style.display = '';
		if(aj.XMLHttpRequest.readyState == 1) {
			aj.statusId.innerHTML = xml_http_building_link;
		} else if(aj.XMLHttpRequest.readyState == 2) {
			aj.statusId.innerHTML = xml_http_sending;
		} else if(aj.XMLHttpRequest.readyState == 3) {
			aj.statusId.innerHTML = xml_http_loading;
		} else if(aj.XMLHttpRequest.readyState == 4) {
			if(aj.XMLHttpRequest.status == 200) {
				aj.statusId.innerHTML = xml_http_data_in_processed;
				if(aj.recvType == 'HTML') {
					aj.resultHandle(aj.XMLHttpRequest.responseText);
				} else if(aj.recvType == 'XML') {
					aj.resultHandle(aj.XMLHttpRequest.responseXML);
				}
				aj.statusId.style.display = 'none';
			} else {
				aj.statusId.innerHTML = xml_http_load_failed;
			}
		}
	}

	aj.get = function(targetUrl, resultHandle) {
		aj.targetUrl = targetUrl;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		if(window.XMLHttpRequest) {
			aj.XMLHttpRequest.open('GET', aj.targetUrl);
			aj.XMLHttpRequest.send(null);
		} else {
	        aj.XMLHttpRequest.open("GET", targetUrl, true);
	        aj.XMLHttpRequest.send();
		}
	}

	aj.post = function(targetUrl, sendString, resultHandle) {
		aj.targetUrl = targetUrl;
		aj.sendString = sendString;
		aj.XMLHttpRequest.onreadystatechange = aj.processHandle;
		aj.resultHandle = resultHandle;
		aj.XMLHttpRequest.open('POST', targetUrl);
		aj.XMLHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		aj.XMLHttpRequest.send(aj.sendString);
	}
	return aj;
}

function ajax_prep_request() {
  var req=false;
  // branch for native XMLHttpRequest object
  if(window.XMLHttpRequest) {
    try {
      req = new XMLHttpRequest();
    } catch(e) {
      req = false;
    }
    // branch for IE/Windows ActiveX version
  } else if(window.ActiveXObject) {
    try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
      try {
	req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(e) {
	req = false;
      }
    }
  }
  return req;
}

function ajax_set_element_content(tree) {
    
    if (tree && tree.hasChildNodes()) {
      var elements=tree.getElementsByTagName('xmlresponse');
      if (elements && elements.length>0) {
	elements=elements[0].childNodes;
	var nodes=elements.length;
	var id;
	var element;
	for (var i=0;i<nodes;++i) {
	  if (elements[i].tagName=='html') {
	    id=elements[i].getAttribute('id');
	    element=document.getElementById(id);
	    if (element && elements[i].firstChild) {
                if (!element.outerHTML) {
                    element.innerHTML=elements[i].firstChild.nodeValue;
                }
                else element.outerHTML=elements[i].firstChild.nodeValue;

	    }
	  } else if (elements[i].tagName=='urlupdate') {
	    id=elements[i].getAttribute('id');
	    element=document.getElementById(id);
	  }
	  
	}
      }
    }
}

function ajax_load_element(base,param,element,bSetStatus,finish) {
  var req;
  req=ajax_prep_request();
  if(req) {
    var url,pos;
    if (!base)
        url=window.location.href;
    else url=base;

    //remove has if its in the url
    pos=url.indexOf('#');
    if (pos!=-1) {
      url=url.substr(0,pos);
    }
    pos=url.indexOf('?');
    if (pos==-1)
        url+='?';
    else url+='&';

    url+='ajax='+param;
    url+='&element='+element;

    req.onreadystatechange = function () {
        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
                if (req.responseXML) {
                    if (req.responseXML.normalize) {
                        req.responseXML.normalize();
                    }
                    ajax_set_element_content(req.responseXML);
                    if (finish) {
                        eval(finish);
                    }
                } else {
                    alert('An Error occured while processing your request.'+url);
                }
            } else {
                alert("There was a problem retrieving the XML data:" +
                      req.statusText);
            }
        }
    }
    req.open("GET", url, true);
    req.send("");
    if (bSetStatus) {
	var obj;
	obj=document.getElementById(element);
	if (obj) {
	  obj.innerHTML='Fetching...';
        }
    }
  }
}

function ajax_serialize_form(formname) {
    var form=document.forms[formname];
    var i;
    var retVal='';

    if (form) {
        for (i=0;i<form.elements.length;++i) {
            var nodeName=form.elements[i].nodeName;
            nodeName=nodeName.toLowerCase();
            if (nodeName=='input' || nodeName=='select' || nodeName=='textarea') {
                if (form.elements[i].name) {
                    if (retVal.length>0)
                        retVal+='&';
                    if (window.encodeURIComponent) {
                        retVal+=encodeURIComponent(form.elements[i].name)+'=';
                        retVal+=encodeURIComponent(form.elements[i].value);
                    } else {
                        retVal+=escape(form.elements[i].name)+'=';
                        retVal+=escape(form.elements[i].value);
                    }
                }
            } else {
            }
        }
    }
    return retVal;
}

function ajax_json_handler(url,func,synchronous) {
   var req;
  req=ajax_prep_request();
  if(req) {
    pos=url.indexOf('#');
    if (pos!=-1) {
      url=url.substr(0,pos);
    }
    //pos=url.indexOf('?');
    //if (pos==-1)
    //url+='?';
    //else url+='&';
      var handled=false;

    req.onreadystatechange = function () {

        if (req.readyState == 4) {
            // only if "OK"
            if (req.status == 200) {
                handled=true;
                var obj=eval('('+req.responseText+')');
                if (func) {
                    func(obj);
                }
            } else {
                //alert("There was a problem retrieving the XML data:" +
                //      req.statusText+url);
            }
        }
    }
    req.open("GET", url, !synchronous);
    req.send("");
      if (synchronous && !handled) {
          if (req.status == 200 && func) {
              var obj=eval('('+req.responseText+')');              
              func(obj);
          }
      }

  }
   
}