// ---------------
// Darren's XML processing functions
// 
// GetXMLObject()       - returns a single object with property name/values pages converted from nodes/node value
// GetXMLObjectArray()  - returns an array of objects of similiar structure to GetXMLObject
// ---------------------


// ---------------------
// returns an array of objects with properties based on XML attributes
// ---------------------
function GetXMLObjectArray(XML, nodename){
        
    var markers     = XML.documentElement.getElementsByTagName(nodename);
    
    var thisEval    = '';
    var aNode      = new Array();   // array of nodes to be returned
    var node;                       // object containing all properties
    var curStr      = '';
    for (var m = 0; m < markers.length; m++) {
        node = new Object;
        // load xml vars
        for (j=0;j<markers[m].childNodes.length;j++){

            if (markers[m].childNodes[j].nodeType != 1) continue;
            // check if value exists for nodename			    
            if( markers[m].childNodes[j].firstChild){
                curStr = markers[m].childNodes[j].firstChild.nodeValue
                curStr = curStr.replace(/\r\n|\r|\n/g, '') // all line breaks
                curStr = curStr.replace(/\"/g, '\\"') // escape quotes
                thisEval = 'node.' + markers[m].childNodes[j].nodeName + ' = "' + curStr + '";';
            }
            else{
                thisEval = 'node.' + markers[m].childNodes[j].nodeName + ' = "";';                
            }

            eval(thisEval);
         } // load vars for loop
        
        // add objects to an array
        aNode[m] = node;
    }          
    
    
    
    return aNode;
}

// ---------------------
// returns an object with properties based on XML attributes
// ---------------------
function GetXMLObject(XML, nodename){

    
    var markers     = XML.documentElement.getElementsByTagName(nodename);   
    var thisEval    = '';

    for (var m = 0; m < markers.length; m++) {
        // load xml vars
        for (j=0;j<markers[m].childNodes.length;j++){

            if (markers[m].childNodes[j].nodeType != 1) continue;
            // check if value exists for nodename			    
            if( markers[m].childNodes[j].firstChild){
                thisEval = 'this.' + markers[m].childNodes[j].nodeName + ' = "' + markers[m].childNodes[j].firstChild.nodeValue + '";';
            }
            else{
                thisEval = 'this.' + markers[m].childNodes[j].nodeName + ' = "";';
            }
            eval(thisEval);

        } // load vars for loop
    }          

}


// ---------------------
// string truncate
// ---------------------
var punctuation = '.,;!? ';
function trunc(s,size)
{
      if(!size)size=30;
      if(s.length<=size)return s;

      p=-1;

      for(var i=0;i<size;i++)
        if(punctuation.indexOf(s.charAt(i))!=-1)p=i;

      if(p==-1)p=size-1;

      return ''+s.substr(0,p)+'...';
}
