jQuery.isJSON = function(str) {
  if (jQuery.trim(str) == '') return false;
  str = str.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
  return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
}
multiplexed = function() {
  this.ev = 0;

  this.message = function() { /*
  $.post("http://"+HTTP_HOST+"/multiplexed/?identifier="+IDENT,{event:multiplexed.ev},
    function(data){

      if(data != "false" && data.length > 0 && $.isJSON(data)) {
        response = $.evalJSON(data);
        if(response.constructor == Array) {
          var idnr = 0;
          if(response[idnr].ev != this.ev) {
            for(idnr = 0; idnr < response.length; idnr++) {
              eval("multiplexed."+response[idnr].event+"('"+$.toJSON(response[idnr])+"')");
            }
          }
        } else {

          if(response.ev != this.ev) {
            eval("multiplexed."+response.event+"('"+$.toJSON(response)+"')");
          }
        }
        multiplexed.ev++;
      }
      setTimeout('multiplexed.message();',100);
      finalCheckPuzzle();
    }) */
  }

  this.move = function(params) {
    params = $.evalJSON(params);

    $("#element_"+params.y+"_"+params.x)
      .css("left", params.pos_x+"px")
      .css("top", params.pos_y+"px")
      .attr("angle", params.angle);
    $("#pic_"+params.y+"_"+params.x)
      .animate({'top': params.pos_y, 'left':params.pos_x},"fast")
      .css('backgroundImage', 'url("/images/upload/'+Math.floor(params.imageid/1000) +'/' + params.imageid + '/' + params.y + '_' + params.x + '_' + params.angle + '.png")');
    if(params.link > 0) {
      $("#element_"+params.y+"_"+params.x)
        .attr("link", params.link);
    }

    if(DragHandler._oElem != null) {
      document.onmousemove = null;
      document.onmouseup = null;
      DragHandler._oElem = null;
      dragged = null;
    }
    
  }

  this.event = function(params) {
    $.post("/ajax/event/", {ev:multiplexed.ev, params: $.toJSON(params)});
  }

  if(typeof(IDENT) != "undefined") {
    this.message();
  }
}
