// not require prototype.js
function print_r(obj){
    var count_obj =0;
    function _output(str) {
      document.writeln(str + "<br/>");
    }
    function _print_r(obj,name,level){
      var s = "";
      if(obj == undefined || level > 4) return;
      for(var i=0;i< level; i++){ s +=" | ";}
      s +="-" + name + ":" + typeof(obj) + "=" +obj;
      _output(s);
      if(name == "document" || typeof(obj) != "object") return ;
      for (key in obj){
        if(count_obj++ > 150) return;
        _print_r(obj[key],key,level +1);
      }
    }
    _print_r(obj,"*",0);
    return true;
}

function toJSON(data){
  if (data === undefined) return;
  if (data === null) return "null";
  var type = typeof data;
  if (type == 'number' || type == 'boolean') {
    return data.toString();
  } else if (type == 'function' || type == 'unknown') {
    return;
  } else if (type == 'string' || data.constructor == String) {
    return '"' + data.replace(/\"|\n|\\/g, function(c){ return c == "\n" ? "\\n" : '\\' + c }) + '"';
  } else if (data.constructor == Date) {
    return 'new Date("' + data.toString() + '")';
  } else if (data.constructor == Array) {
    var items = [];
    for (var i = 0; i < data.length; i++) {
      var val = toJSON(data[i]);
      if (val != undefined)
          items.push(val);
    }
    return "[" + items.join(",") + "]";
  } else if (data.constructor == Object) {
    var props = [];
    for (var k in data) {
      var val = toJSON(data[k]);
      if (val != undefined)
          props.push(toJSON(k) + ":" + val);
    }
    return "{" + props.join(",") + "}";
  }
}
function createNamedElement(tag,name){
  var isIE =/*@cc_on!@*/false;
  var element;
    if (name) {
        element = (isIE)? document.createElement('<' + tag + ' name="' + name + '">'): document.createElement(tag);
        element.name = name;
    } else {
        element = document.createElement(tag);
    }
    
    return element;
}

function eventAttach(elm, eventType,handler){
  if (elm.addEventListener) {
    elm.addEventListener(eventType, handler, false);
  }else {
    elm.attachEvent('on' + eventType, handler);
  }
  return true;
}

function eventDetach(elm,eventType,handler){
  if (elm.removeEventListener) {
    elm.removeEventListener(eventType, handler, false);
  }else {
    elm.detachEvent('on' + eventType, handler);
  }
  return true;
}
function getXmlHttpRequest(){
  var xmlhttp;
  if(window.XMLHttpRequest){
    xmlhttp = new XMLHttpRequest();
    return xmlhttp;
  }else{
    try{
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      return xmlhttp;
    }
    catch(e){
      try{
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        return xmlhttp;
      }
      catch(e){
        xmlhttp = false;
        return false;
      }
    }
  }
}

