var js_name = "_js";
var ua_name = "_ua";
var cookie_name = "_cookie";

function each_element(f, elems)
{
  if (elems == null) {
    each_element(f, document.documentElement);
  } else if (elems.nodeName) {
    f(elems);
    if (elems.hasChildNodes()) {
      each_element(f, elems.childNodes);
    }
  } else if (elems.item) {
    for (var i = 0; i < elems.length; i++) {
      each_element(f, elems[i]);
    }
  }
}


function make_node(param, content) {
  if (!param) return content;
  
  var element = param;
  var atts_str = "";

  if (param.match(/\|/)) {
    var atts = param.split('|');
    element = atts[0];
    for (var i = 1; i < atts.length; i += 2) 
      atts_str += " " + atts[i] + '="' + atts[i+1] + '"';
  }
  return (!content) ?
    '<' + element+atts_str + ' />\n' :
    '<' + element+atts_str + '>' + content + '<\/' + element + '>\n';
};

// JavaScript class
function JavaScript() {
  this.initialize();
}

JavaScript.prototype = {
  initialize : function(){},
  
  DOM0 : (document.getElementsByTagName),
  
  DOM1 : (document.createElement)
};

// Cookie class
function Cookie() {
  this.initialize();
}

Cookie.prototype = {
  initialize : function(){},

  cookie_str : (document.cookie) ? document.cookie.split(';') : [],

  get_value : function(name) {
    var cookie = this.cookie_str;
    for (var i = 0; i < cookie.length; i++) {
      if (cookie[i].split('=')[0].replace(/^\s+|\s+$/g, '') == name)
        return unescape(cookie[i].split('=')[1].replace(/^\s+|\s+$/g, ''));
    }
    return '';
  },

  set_value : function(name, data, limit, path) {
    if (!path) path = '/';
    if (!limit) limit = 0;

    var today = new Date();
    today.setTime(today.getTime()+1000*60*60*24*limit);
    var date = ';expires=' + today.toGMTString();

    document.cookie = name + '=' + escape(data) + ';path=' + path + date;
  }
};

// UserAgent class
function UserAgent() {
  this.initialize();
}

UserAgent.prototype = {
  initialize : function() {
    var ua_str = navigator.userAgent;

    this.IE6  = (ua_str.match(/ MSIE 6/));
    this.IE55 = (ua_str.match(/ MSIE 5.5/));
    this.IE5  = (ua_str.match(/ MSIE 5/) && !this.IE55);
    this.Konq = (ua_str.match(/ Konqueror/));
    this.NS60 = (ua_str.match(/Netscape6\/6\.0/));
    this.NS6  = (ua_str.match(/Netscape6\/6\./));
    this.Moz  = (ua_str.match(/Gecko/));
    this.NN4  = (document.layers);
    
    this.geckoVer = (this.Moz || this.NS6 || this.NS60) ?
      parseFloat(ua_str.match(/Gecko\/\d{8}/).toString().substring(6, 14)) :
      -1 ;
    
    this.MacIE5  = (ua_str.match(/ Mac/) && this.IE5);
    this.overIE5 = (this.IE6 || this.IE55 || this.IE5);
    this.IE4     = (!this.overIE5 && !this.Konq && document.all);

  }

};

eval("var " + js_name + " = new JavaScript;");
eval("var " + ua_name + " = new UserAgent;");
eval("var " + cookie_name + " = new Cookie;");
