﻿/**
*
*  uno.xml.reader.js v 0.0.4.0  (Part of [uno-js].)
*
*  Released by Hideki Yamamoto - LGPL equiv.
*
**/

if (!uno.xml) {Namespace.register("uno.xml");uno.xml = {};}
////////////////////////////CROSSWBROWSER XML DATA ACCESS//////////////////////////
uno.xml.getattribute=function(node,attributename){for (var ai = 0 ; ai < node.attributes.length ; ai++){if (node.attributes[ai].name==attributename){return uno.xml.attributevalue(node.attributes[ai]);}}return false;};
uno.xml.attributevalue = function(attribute){if(attribute.value){return attribute.value;}if(attribute.nodeValue){return attribute.nodeValue;}return false};
uno.xml.nodetext = function(node){if(node.text){return node.text;}if(node.textContent){return node.textContent;}};
uno.xml.nodexml = function(node,removecdata) {
    if (removecdata){return uno.xml.tostringformat(node, '', '<', '>', '', '', true,false);}
    if (node.xml){return node.xml;}
    else if (XMLSerializer) {var test = (new XMLSerializer()).serializeToString(node);return test;}
    else {return uno.xml.tostringformat(node, '', '<', '>', '', '', true, false);}};
uno.xml.nodeinnerxml = function(node,removecdata){
    if(!node){return null;}var test = '';
    for (var i=0;i<node.childNodes.length;i++){
        test += uno.xml.nodexml(node.childNodes[i],removecdata);
    } return test;};
uno.xml.childinnerxml = function (node, tag, removecdata) {return uno.xml.nodeinnerxml(node.getElementsByTagName(tag)[0], removecdata);};    
uno.xml.nodexmltohtml = function (node){var test = '';test = uno.xml.tostringformat(node,'','&lt;','&gt;','<br />','&nbsp;&nbsp;',true,true);return test;};
uno.xml.nodeinnerxmltohtml = function(node){var test = '';for (var i=0;i<node.childNodes.length;i++){test += uno.xml.tostringformat(node.childNodes[i],'','&lt;','&gt;','<br />','&nbsp;&nbsp;',true,true);}return test;};
//////////////////////////////////////////////////////////////////////////////////////////
uno.xml.tostringformat = function(node, tabulation, opentag, closetag, newline, tabincrement, removecdata, killemptytext) {
    var test = ''; var beforecdata = '<![CDATA['; var aftercdata = ']]>';
    if (removecdata) { beforecdata = ''; aftercdata = ''; }
    if (!tabincrement) { tabincrement = ''; }
    if (node.nodeName == '#cdata-section') { return beforecdata + uno.xml.nodetext(node); +aftercdata + newline; }
    if (node.nodeName == '#comment') { return '<!--' + uno.xml.nodetext(node) + '-->' + newline; }
    if (node.nodeName == '#text') { return uno.xml.nodetext(node) + newline; }
    else {
        if (node.nodeName != '#document') {
            test = tabulation + opentag + node.nodeName;
            if(node.attributes){ for (var ai = 0; ai < node.attributes.length; ai++) { test += ' ' + node.attributes[ai].name + '="' + uno.xml.attributevalue(node.attributes[ai]) + '"'; }}}
        if (node.hasChildNodes) {
            if (node.nodeName != '#document') {test+=closetag+newline; }
            for (var i = 0; i < node.childNodes.length; i++) {
                if (node.childNodes[i].nodeName == '#text') {
                    var data = uno.xml.nodetext(node.childNodes[i]);
                    if(killemptytext){
                        for (var axe = 0; axe < 1000; axe++) {
                        if (data.indexOf(' ') == 0) { data = data.replace(' ', ''); }
                        else if (data.indexOf('\n') == 0) { data = data.replace('\n', ''); }
                        else { axe = 2000;}}}
                    if (data != '') { test += tabulation + tabincrement + uno.xml.nodetext(node.childNodes[i]) + newline;}
                } else if (node.childNodes[i].nodeName == '#cdata-section') {
                    test += tabulation + tabincrement + beforecdata + uno.xml.nodetext(node.childNodes[i]); +aftercdata + newline;
                } else if (node.childNodes[i].nodeType == 1) {
                    test += uno.xml.tostringformat(node.childNodes[i], tabulation + tabincrement, opentag, closetag, newline, tabincrement, removecdata, killemptytext);
        }   }   }   else { if (node.nodeName != '#document') { return test += '/' + closetag + newline;}}
        if (node.nodeName != '#document') { return test + tabulation + opentag + '/' + node.nodeName + closetag + newline; }
        else {return test;
}   }   };
