if (typeof document.defaultView == 'undefined')
  document.defaultView = {};

if (typeof document.defaultView.getComputedStyle == 'undefined')
{
  document.defaultView.getComputedStyle = function(element, pseudoElement)
  {
    return element.currentStyle;
  }
}

String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,"");
}




var PERSONAGE_ELEMENT_ID = 'quinturaPersonage';
var PERSONAGE_MSG_ELEMENT_ID = 'quinturaPersonageMsg';
var PERSONAGE_MSG_TEXT_ELEMENT_ID = 'quinturaPersonageMsgText';

//var QUINTURA_PERSONAGE_SMOOTH_MOVE_INTERVAL = 0.01;

/**
 * QuinturaPersonage
 */

QuinturaPersonage = Class.create(); 
QuinturaPersonage.prototype = {
  divId : null,
  div : null,
  name : null,
  statusImages : [],
  statusMessages : [],
  defaultImage : null,
  img : null,
  msgElement : null,
  msgTextElement : null,
  
  cX : null,
  cY : null,
  moveExecuter : null,
  moveX : null,
  moveY : null,
  step : null,
    
  initialize: function(divId, name, src, cssStyle)
  {
    this.divId = divId;
    this.div = $(this.divId);
    this.name = name;
    this.defaultImage = src;
    
    var c = {};
    c['display'] = 'none';
    cssStyle = cssStyle.split(';');
    
    for (var key=0; key<cssStyle.length; key++)
    {
      var b = cssStyle[key].split(':');
      if (b.length == 2)
        c[b[0].trim()] = b[1].trim();
    }
    this.div.setStyle(c);
    
    this.msgElement = $(PERSONAGE_MSG_ELEMENT_ID);
    this.msgTextElement = $(PERSONAGE_MSG_TEXT_ELEMENT_ID);
    
    
    /*this.msgElement = document.createElement('p');
    this.msgElement.style.display = 'none';
    this.msgElement.style.backgroundColor = '#cccccc';
    this.msgElement.style.position = 'absolute';
    this.msgElement.style.bottom = '116px';
    this.msgElement.style.left = '0px';
    this.msgElement.style.width = '200px';
    this.msgElement.style.border = '1px black solid';
    this.msgElement.style.margin = '0';
    this.msgElement.style.padding = '0';
    this.div.appendChild(this.msgElement);*/
    
    if (this.div.firstChild && this.div.firstChild.tagName && this.div.firstChild.tagName.toLowerCase() == 'img')
      this.img = this.div.firstChild;
    else
    {
      this.img = document.createElement('img');
      this.img.alt = this.name;
      this.img.style.border = 'none';
      this.div.appendChild(this.img);
    }
    
    this.resetStatus();
  },
  
  hide: function ()
  {
    this.div.style.display = 'none';
  },
  
  show: function ()
  {
    this.div.style.display = 'block';
  },
  
  setStatusData: function(status, src, message)
  {
    this.statusImages[status] = src;
    this.statusMessages[status] = message;
  },
  
  resetStatus: function()
  {
    this.img.src = this.defaultImage;
    this.hideMessage();
  },
  
  setStatus: function(status, customMessageHtml)
  {
    this.img.src = this.statusImages[status];
    if ((typeof(customMessageHtml) == 'string') && (customMessageHtml.length > 0))
      this.showMessage(customMessageHtml);
    else
      this.showMessage(this.statusMessages[status]);
  },
  
  showMessage: function (message)
  {
    while (this.msgTextElement.firstChild)
      this.msgTextElement.removeChild(this.msgTextElement.firstChild);
    this.msgTextElement.innerHTML = message;
    this.msgElement.style.display = 'block';
  },
  
  hideMessage: function ()
  {
    this.msgElement.style.display = 'none';
  }
}