//****************************************************************
//*
//*  # PROGRAM TITLE : XML & XSL Tramsform Class(Cross Browsing)
//*
//*  # PROGRAMER : ÀÓ È£ ºó
//*
//*  # FILE CREATE DAY : 2006-2-23
//*
//*  # PROGRAM CONT. : SXC(Standard XML Class)
//*
//*  # FILE NAME : XML_Class.js
//*
//*  # MODIFICATIONS :
//*
//****************************************************************

// Class Start
function SXC() {
	//Start Public Member Method Dimension
	this.getData = getData;
	this.getXML = getXML;
	this.sendData = sendData;
	this.getElement = getElement;
//    this.resultXML = resultXML;
	//End Of Public Member Method Dimension

	//Start Private Member Variable
//	var resultXML = "";
	var XMLHttp = false;
	var XSLHttp = false;
	var m_AgentType;
	//End Private Member Variable

	//Start Member Variable Setting
	//End Of Member Variable Setting

	function sendData(XMLDataURL, XMLReqData, DebugMode) {
		XMLHttp = getXmlHttpRequestObject();
		XMLHttp.open("POST", XMLDataURL, false);
		XMLHttp.send(XMLReqData);
		var returnData = XMLHttp.responseText;
		return returnData;
	}	// End Of sendData()

    function getData(XMLDataURL, XMLReqData, XSLPath, ReturnObject, DebugMode) {
		try {
			if(getElement(ReturnObject)) getElement(ReturnObject).innerHTML = "";
		} catch(ex) {}

		XMLHttp = getXmlHttpRequestObject();
		var resultXML = RequestXML(XMLHttp, XMLDataURL, XMLReqData, XSLPath, ReturnObject, DebugMode);
	}

	function getXML(XMLDataURL, XMLReqData) {
		XMLHttp = getXmlHttpRequestObject();
		XMLHttp.open("GET", XMLDataURL, false);
		XMLHttp.send(XMLReqData);
		var returnXML = XMLHttp.responseText;
		return returnXML;
	}

	function returnHTML(returnXML, XSLPath, ReturnObject, DebugMode) {
		try {
			if(m_AgentType == "IE") {
				var xml = new ActiveXObject("Microsoft.XMLDOM");
				xml.async = false;
				xml.loadXML(returnXML);

				var strErrMsg  = "Problem Parsing Xml Error:\n"
								+ " Error #: "            + xml.parseError.errorCode + "\n"
								+ " Description: "        + xml.parseError.reason + "\n"
								+ " In file: "            + xml.parseError.url + "\n"
								+ " Line #: "             + xml.parseError.line + "\n"
								+ " Character # in line:" + xml.parseError.linepos + "\n"
								+ " Character # in file:" + xml.parseError.filepos + "\n"
								+ " Source line: "        + xml.parseError.srcText;
				if(DebugMode) alert(strErrMsg);

				var xsl = new ActiveXObject("Microsoft.XMLDOM");
				xsl.async = false;
				xsl.load(XSLPath);

				var strErrMsg  = "Problem Parsing Style Sheet Error:\n"
								+ " Error #: "            + xsl.parseError.errorCode + "\n"
								+ " Description: "        + xsl.parseError.reason + "\n"
								+ " In file: "            + xsl.parseError.url + "\n"
								+ " Line #: "             + xsl.parseError.line + "\n"
								+ " Character # in line:" + xsl.parseError.linepos + "\n"
								+ " Character # in file:" + xsl.parseError.filepos + "\n"
								+ " Source line: "        + xsl.parseError.srcText;
				if(DebugMode) alert(strErrMsg);

				var resultHTML = xml.transformNode(xsl).replace(/&amp;#/g,"&#");
//				test(resultHTML);
				if (resultHTML.indexOf("stylesheet") == -1){
					if(ReturnObject != "XSLChecker") {
						getElement(ReturnObject).innerHTML = resultHTML;
					}
				} else {
					if(ReturnObject == "XSLChecker") {
						goHelp('help_4_10.htm', '4_10')
					} else {
						getElement(ReturnObject).innerHTML = "";
					}
				}
				if(DebugMode) alert(resultHTML);
			} else if(m_AgentType == "ETC") {
				var xslStylesheet; 
				var xsltProcessor = new XSLTProcessor(); 

				// load the xslt file
				var m_XMLHTTPRequest = new XMLHttpRequest(); 
				m_XMLHTTPRequest.open("GET", XSLPath, false); 
				m_XMLHTTPRequest.send(null); 

				// get the XML document and import it 
				xslStylesheet = m_XMLHTTPRequest.responseXML;
				xsltProcessor.importStylesheet(xslStylesheet);

				var parser = new DOMParser();
				xmlTransform = parser.parseFromString(returnXML, "text/xml");

				var fragment = xsltProcessor.transformToFragment(xmlTransform, document);
				getElement(ReturnObject).innerHTML = "";
				getElement(ReturnObject).appendChild(fragment);
			}
		} catch(ex) { alert("Error : " + ex.message + "\n" + returnXML); }
	}

    function RequestXML(XMLHttp, XMLDataURL, XMLReqData, XSLPath, ReturnObject, DebugMode) {
		if(XMLDataURL == "") {
			var returnXML = "<?xml version=\"1.0\" encoding=\"EUC-KR\" ?><ROOT><DETAILINFO></DETAILINFO></ROOT>";
			returnHTML(returnXML, XSLPath, ReturnObject, DebugMode);
			return;
		} else if(XMLDataURL.search("XML/") < 0) {
			var returnXML = XMLDataURL;
			returnHTML(returnXML, XSLPath, ReturnObject, DebugMode);
			return;
		}

		try{
			if(DebugMode) {
				XMLHttp.open("GET", XMLDataURL, false);	//Debug Mode ÀÏ¶§´Â µ¿±â È£ÃâÀ» »ç¿ëÇÑ´Ù.
				XMLHttp.send(XMLReqData);
				if(window.XMLHttpRequest) {
					var returnXML = XMLHttp.responseXML;
					alert("Debug : \n" + returnXML);
					getElement("msg").innerHTML = returnXML;
				} else {
					var returnXML = XMLHttp.responseText;

					var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
					xmlDoc.async = false;
					xmlDoc.loadXML(returnXML);

					var strErrMsg  = "Problem Parsing Xml:\n"
									+ " Error #: "            + xmlDoc.parseError.errorCode + "\n"
									+ " Description: "        + xmlDoc.parseError.reason + "\n"
									+ " In file: "            + xmlDoc.parseError.url + "\n"
									+ " Line #: "             + xmlDoc.parseError.line + "\n"
									+ " Character # in line:" + xmlDoc.parseError.linepos + "\n"
									+ " Character # in file:" + xmlDoc.parseError.filepos + "\n"
									+ " Source line: "        + xmlDoc.parseError.srcText;
					alert(strErrMsg);
					alert(returnXML);
					getElement("msg").innerHTML = returnXML;

					var xml = new ActiveXObject("Microsoft.XMLDOM");
					xml.async = false;
					xml.loadXML(returnXML);

					var xsl = new ActiveXObject("Microsoft.XMLDOM");
					xsl.async = false;
					xsl.load(XSLPath);

					var debugHTML = xml.transformNode(xsl);
					getElement(ReturnObject).innerHTML = debugHTML;
					alert(debugHTML);
				}
				return;
			} else {
				XMLHttp.open("POST", XMLDataURL, true);
				XMLHttp.send(XMLReqData);
			}

			XMLHttp.onreadystatechange = function() {		//µ¥ÀÌÅÍ¸¦ XML·Î ¹Þ¾Æ¿À´Â°Í ±îÁö¸¸ ºñµ¿±â·Î Ã³¸®ÇÑ´Ù.
				switch (XMLHttp.readyState) {
					case 1:			//Not For Response
						break;
					case 4:			//Response Event Arrival
						if (XMLHttp.status == 200) {
							var returnXML = XMLHttp.responseText;
							returnHTML(returnXML, XSLPath, ReturnObject);
						}
						break;
				}
			} //End Of Waiting For Response - Async Call
		} catch(ex) {
			alert(ex.message);
		}
    } //End Of XMLHTTP Request Method

	function getXmlHttpRequestObject() {
		var agt = navigator.userAgent.toLowerCase();

		var xmlhttp = false;

		if(window.XMLHttpRequest) {
			if(agt.indexOf("msie 7.")!=-1) {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				m_AgentType = "IE";
			} else {
				xmlhttp = new XMLHttpRequest();
				m_AgentType = "ETC";
			}
		} else {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			m_AgentType = "IE";
		}
		return xmlhttp;
	} //End Of getXmlHttpRequestObject

    function XMLLoad() {
        
    } //End Of Local XML Load

    function XSLLoad() {
    } //End Of Local XSL Load

    function XMLTransform() {
        
    } //End Of XSL Transform

	function Exception(XMLObject) {
	} //End Of Exception

	function getElement(aID){
		return (document.getElementById) ? document.getElementById(aID) : document.all[aID];
   } //End Of getElement
} //End Of SXC Class



/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++Sample Usage+++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++

var myXMLClass = new SXC();
		var s_XMLData = '<?xml version="1.0" ?>';
		s_XMLData = s_XMLData + "<REQPARAM>";
		s_XMLData = s_XMLData + "<USERNO><%=UserSN %></USERNO>";
		s_XMLData = s_XMLData + "<USERID><%= UserID %></USERID>";
		s_XMLData = s_XMLData + "<ENCRYPTIONKEY><%= Key %></ENCRYPTIONKEY>";
		s_XMLData = s_XMLData + "</REQPARAM>";

myXMLClass.getData("XML/Left_Title_xml.asp", s_XMLData, "XSL/Left_Title.xsl", "LEFT_TITLE", false);	
var rtnXML = myXMLClass.getXML("XML/CDBurning_xml.asp", s_XMLData, false);
var rtn = myXMLClass.sendData("DML/SongList_Update.asp", s_XMLData, false);
*/