/*
 * Smallbox CMS http://www.smallboxsoftware.net
 *
 * Copyright (C) 2000-2008 Kenneth Spencer
 *
 * This file is intended only for use withing Smallbox CMS.
 * Unauthorized use is strictly prohibited.
 *
 */

function sb_node(Node, Tag) {
 var doc; 

 if(!Node) {
  alert("Error appending: "+Tag);
  console.trace();
 }
 if(Node.documentElement) {
  doc = Node;
 }
 else {
  doc = Node.ownerDocument;
 }

 var newNode = doc.createElement(Tag);
 switch(Tag) {
  case "table":
   newNode.cellpadding = 0;
   newNode.cellspacing = 0;
  break;
 }

 if(Text = sb_node.arguments[2]) {
  Text = document.createTextNode(Text);
  newNode.appendChild(Text);
 }
 if (Node != doc) {
  Node.appendChild(newNode);
 }
 return newNode;
}


function sb_text_node(node, text) {
 doc = node.ownerDocument;
 textNode = doc.createTextNode(text);
 return node.appendChild(textNode);
}


function sb_node_after(node, tag, text) {
 doc = node.ownerDocument;
 if (typeof(tag) == 'object') {
  newNode = tag;
 }
 else {
  newNode = sb_node(doc, tag, text);
 }
 if (node.nextSibling) {
  return node.parentNode.insertBefore(newNode, node.nextSibling);
 }
 else {
  return node.parentNode.appendChild(newNode);
 }
}

function sb_node_before(node, tag, text) {
 doc = node.ownerDocument;
 if (typeof(tag) == 'object') {
  newNode = tag;
 } 
 else {
  newNode = sb_node(doc, tag, text);
 }
 return node.parentNode.insertBefore(newNode, node);
}



function sb_getParam(node, name) {
 if(node) {
  for(var i = 0; i < node.childNodes.length; i++) {
   var param = node.childNodes[i];   
   if(param.nodeName == "param" && param.getAttribute("name") == name) {
    return param.getAttribute("value");
   }
  }
 }
 return "";
}

function sb_setParam(node, name, value) {
 if(node) {
  for(var i = 0; i < node.childNodes.length; i++) {
   var param = node.childNodes[i];   
   if(param.nodeName == "param" && param.getAttribute("name") == name) {
    param.setAttribute("value", value);
    return true;
   }
  }
  var param = sb_node(node, "param");
  param.setAttribute("name", name);
  param.setAttribute("value", value);
  return true;
 }
}

/**  Recursive  **/
function sb_getElementByAttribute(node, tag, attribute, value) {
 var tags = node.getElementsByTagName(tag);
 if(tags.length) {
  for(var i = 0; i < tags.length; i++) {
   tag = tags.item(i);
   if(tag.getAttribute(attribute) == value) {
    return tag;
   }
  }
 }
}

/*** Immediate Children **/
 function sb_getElement(node, name, attribute, value) {
  if(node) {
   for(var i = 0; i < node.childNodes.length; i++) {
    if(node.childNodes[i].nodeName != '#text' && (name == "*" || node.childNodes[i].nodeName == name)) {
     if(attribute) {
      if(node.childNodes[i].getAttribute(attribute) == value) {
       return node.childNodes[i];
      }
     }
     else {
      return node.childNodes[i];
     }
    }
   }
  }
 }
 function sb_node_clear(node) {
  if(node) {
   count = node.childNodes.length;
   for(var i = 0; i < count; i++) {
    node.removeChild(node.childNodes.item(0));
   }
  }
  return node;
 }

function sb_node_delete(node) {
 if (node && node.parentNode) {
  return node.parentNode.removeChild(node);
 }
}

function sb_node_next(node) {
 for(p = node.nextSibling; p; p = p.nextSibling) {
  if(p.nodeName != "#text") {
   return p;
  }
 }
}

function sb_import_html(node, node2) {
 /* this funciton exists due to lack of support for importNode in IE */
 if(!node || !node2) {
  return false;
 }
 for(var i = 0; i < node2.childNodes.length; i++) {
  current = node2.childNodes[i];
  if(current.nodeName != "#text") {
   newNode = sb_node(node, current.nodeName);
   for(var j = 0; j <  current.attributes.length; j++) {
    /*** IE does't properly support this (style) **/
    attribute = current.attributes.item(j);
    if(attribute.nodeName == "class") {
     newNode.className = attribute.nodeValue;
    }
    else {
     newNode.setAttribute(attribute.nodeName, attribute.nodeValue);
    }
   }
   sb_import_html(newNode, current);
  }
  else {
   var text = document.createTextNode(current.nodeValue);
   node.appendChild(text);
  }
 }
}

function sb_display_xml(doc) {
 var str = "";
 try {
  var s = new XMLSerializer();
  return s.serializeToString(doc);
 }
 catch(e) {

  if (doc.xml) {
   return doc.xml;
  }
  else if (doc.nodeName == '#document' && doc.documentElement) {
   return doc.documentElement.outerHTML;
  }
  else {
//   return doc.outerHTML;
  }
 }
 return '';
}


function sb_loadXML(txt) {
 try {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async="false";
  xmlDoc.loadXML(txt);
  return(xmlDoc); 
 }
 catch(e) {
  try {
   parser=new DOMParser();
   xmlDoc=parser.parseFromString(txt,"text/xml");
   return(xmlDoc);
  }
  catch(e) {
   alert(e.message)
  }
 }
 return(null);
}


function urlEncode(s) {
 s = encodeURIComponent(s);
 return s.replace(/~/g,'%7E').replace(/%20/g,'+');
}
