/**
 * XHConn2.js的实现函数库：
 * setInnerHTML(el, htmlCode) - 把HTML语句以innerHTML的方式插入到指定页面元素中
 * fillText(url, paneName) - 用于读取外部连接，以innerText的方式插入到指定页面元素中
 * fillHTML(url, paneName) - 用于读取外部连接，以innerHTML的方式插入到指定页面元素中
 * fillRSS(xmlUrl, xslUrl, paneName) - 用于读取外部XML和XSL，转化为HTML后插入到指定页面元素中
 *
 * 工具：
 * isSameDomain(addr1, addr2, protocol) - 判断两个地址是否在同一个域下
 */

var MSG_XMLHTTP_LOADING = "Loading, please wait for a moment...";
var MSG_XMLHTTP_404 = "Can't get with the resources they need, please confirm links is correct";
var MSG_NO_XML_XSL_URL = "Not designated news resource links, please confirm links is correct";

function setInnerHTML(el, htmlCode) {
  var ua = navigator.userAgent.toLowerCase();
  if (ua.indexOf('msie') >= 0 && ua.indexOf('opera') < 0) {
    htmlCode = '<div style="display:none">for IE</div>' + htmlCode;
    htmlCode = htmlCode.replace(/<script([^>]*)>/gi,
                                '<script$1 defer>');
    el.innerHTML = htmlCode;
    el.removeChild(el.firstChild);
  } else {
    var el_next = el.nextSibling;
    var el_parent = el.parentNode;
    el_parent.removeChild(el);
    el.innerHTML = htmlCode;
    if (el_next) {
      el_parent.insertBefore(el, el_next)
    } else {
      el_parent.appendChild(el);
    }
  }
}


function fillText(url, paneName, fnHandleContent){
	var pane = findObj(paneName);
	var myConn = getXHConn2();
	myConn.addJob(function(oXML){
									if(!oXML)
										setInnerHTML(pane, MSG_XMLHTTP_404);
									else if(oXML.status == 200 && oXML.responseText)
                    if(fnHandleContent){
                      pane.innerText = fnHandleContent(oXML.responseText);
                    } else {
                      pane.innerText = oXML.responseText;
                    }
									else
										setInnerHTML(pane, MSG_XMLHTTP_404);
								}, url);
	myConn.start();
}


function fillHTML(url, paneName, fnHandleContent, successCallback){
	var pane = findObj(paneName);
	var myConn = getXHConn2();
	myConn.addJob(function(oXML){
									if(!oXML)
										setInnerHTML(pane, MSG_XMLHTTP_404);
									else if(oXML.status == 200 && oXML.responseText)
                    if(fnHandleContent){
                      setInnerHTML(pane, fnHandleContent(oXML.responseText));
					  // 回调函数
					  if(successCallback){successCallback()};
					  
                    } else {
                      setInnerHTML(pane, oXML.responseText);
					  // 回调函数
					  if(successCallback){successCallback()};
                    }
									else
										setInnerHTML(pane, MSG_XMLHTTP_404);
								}, url);
	myConn.start();
}

function fillRSS(xmlUrl, xslUrl, paneName, fnHandleContent){
	var pane = findObj(paneName);
	var myConn = getXHConn2();
	
	pane.xmlContent = null;
	pane.xslContent = null;
	
	myConn.addJob(function(oXML){
									if(!oXML)
										setInnerHTML(pane, MSG_XMLHTTP_404);
									else if(oXML.status == 200 && oXML.responseText)
										pane.xmlContent = oXML.responseText;
									else
										setInnerHTML(pane, MSG_XMLHTTP_404);
								}, xmlUrl);
	myConn.addJob(function(oXML){
									if(!oXML){
										setInnerHTML(pane, MSG_XMLHTTP_404);
									}else if(oXML.status == 200 && oXML.responseText){
                    pane.xslContent = oXML.responseText;
                    try{
                      var htmlContent = assembleXML(pane.xmlContent, pane.xslContent);
                      if(fnHandleContent){
                        htmlContent = fnHandleContent(oXML.responseText);
                      }
                      setInnerHTML(pane, htmlContent);
                    } catch(e){
                      setInnerHTML(pane, MSG_XMLHTTP_404);
                    }
									} else {
										setInnerHTML(pane, MSG_XMLHTTP_404);
									}
								}, xslUrl);
	myConn.start();
}



//工具：判断两个地址是否在同一个域下
function isSameDomain(addr1, addr2, protocol){
  //判断是不是同一个域
  if(!protocol){
    protocol = "http://";
  } else if(protocol.indexOf("://") < 0){
    protocol = protocol + "://";
  }
  var str_sp = "/";
  var addr1 = addr1.toLowerCase();
  var addr2 = addr2.toLowerCase();
  if(addr1.indexOf(protocol) == 0 && addr2.indexOf(protocol) == 0){
    addr1 =  addr1.substring(protocol.length);
    addr2 = addr2.substring(protocol.length);
    if(addr1.indexOf(str_sp) >= 0){
      addr1 = addr1.substring(0, addr1.indexOf(str_sp));
    }
    if(addr2.indexOf(str_sp) >= 0){
      addr2 = addr2.substring(0, addr2.indexOf(str_sp));
    }
    
    return (addr1 == addr2);
  }
  
}
