/* Une page n'est qu'un terminal */
//GLOBALS
IE4 = false;
IE = window.ActiveXObject ? true : false;
MOZ = window.sidebar ? true : false;
OPERA = navigator.appName == "Opera" ? true : false;
MIDAS = MOZ || OPERA ? true : false;

//EDITOR
var EDITOR_ID = "editorArea";
var currentElement=null;
var currentElementBorder=null;

var player_playlist;
var player_info;
var player_box;
var player;

function send_debug(status, text) {
  alert("scripts.js: send_debug: " + status + ", " + text);
};


/***[JSON]***/
function json_parse(text) {
  //FIXME: subst '/*' and '*/' around text to avoid <script src="target"/>
  try { return eval('(' + text + ')');
  } catch (e) { throw("parse error"); }
  //alert("json_parse: " + text + "\n========\n" + e); return false; }
}

function to_json(value) {
  switch(typeof value) {
  case "object":
    if(value.constructor == Array) return "[" + str_concat(",", map(value, to_json)) + "]";
    else return "{"+str_concat(",", obj_map(value, function(n,v){return n+":"+to_json(v);}))+"}";
  case "string": return "\"" + value + "\"";//FIXME: quote !
  default: return value;
  }
}

/***[MISC]***/
function dump(d, depth, t) {//t is type filter
  try {
    if(depth == null || depth == undefined)
      depth = 1;
    
    switch(typeof(d)) {
    case 'null':
      return "null";
    case 'object':
      if(depth <= 0)
	return "...too deep...";
      if(d == null)
	return '...object null...';
      if(d.length > 20)
	return "...object too big...";
      var o = '{';
      for(n in d) {
	if(t == null || t == undefined || typeof(d[n]) == t ||
	   (typeof(d[n]) == 'object' && depth > 0))
	  o += n + ':' + dump(d[n], depth - 1, t) + ',\n';
      }
      return o + '}\n';
    case 'string':
      return '"' + d.replace(/([\\'"])/g, "\\$1") + '"';
    return '"' + d.replace(/([\\"'])/g, "\\$1") + '"';//pour la coloration syntaxique...
    case 'function':
      return '';
    default:
      return d;
    }
  } catch (e) {
    return '[EXCEPTION]';
  }
}

 /***[COMPATIBILITY]***/
function attach_event(el, event, cbk) {
  if(IE) {
    switch(event) {
    case "click": event = "onclick"; break;
    default: alert("Script.js: attachEvent: unknown event: " + event); break;
    }
  }
  if(IE) el.attachEvent(event, cbk);
  else   el.addEventListener(event, cbk, true);
}

function event_coord(el, event) {
  var e = {};
  e.target = event.target || event.srcElement;
  e.x = event.clientX + window.pageXOffset - el.parentNode.offsetLeft;
  e.y = event.clientY + window.pageYOffset - el.parentNode.offsetTop;
  return e;
}

/***[DOM]***/
function getChildByName(element, name, depth) {
  depth = depth || 0;
  var child = element.firstChild;
  while(child) {
    var out = '';
    //for(var prop in child)
    //out += prop + ':' + child[prop] + '\n';
    alert(child + ':' + out);
    if(child.name == name) return name;
    else if(depth > 0) return getChildByName(child, name, depth-1);
    child=child.nextSibling;
  }
  return null;
}

function textarea_maxlength(textarea, maxlength, counter_id) {
  var counter = counter_id ? document.getElementById(counter_id) : null;
  counter.innerHTML = maxlength - textarea.value.length;
  if(textarea.value.length > maxlength) {
    if(counter) counter.style.color = 'red';
  } else {
    if(counter) counter.style.color = null;
  }
}

/***[GENERIC]***/
function call_onload_cbk(event) {
  for(var i=0; i<onload_cbk.length; i++) {
    //alert(onload_cbk[i]);
    onload_cbk[i]();
  }
}

