/* AJAX Text Fields */
var field = new Object();

field.field = '';

field.process = function(query, field, url)
{
  this.field = field;
  this.loader = new net.getContent(url + '?query=' + query, '', this.processResponse);
}

field.processResponse = function()
{
  var response = this.req.responseXML.documentElement;

  var Entries = response.getElementsByTagName('fieldVal');

  var theDiv = document.getElementById(field.field);

  if (Entries.length > 0)
  {
    /* Clear current entries */
    while (theDiv.firstChild)
      theDiv.removeChild(theDiv.firstChild);

    for (var i = 0; i < Entries.length; i++)
    {
      var newEntry = document.createElement("div");
      newEntry.onclick = field.savedata;
      newEntry.className = 'roll';
      newEntry.innerHTML = field.getContent(Entries[i]);
      theDiv.appendChild(newEntry);
    }
    showDiv(field.field);
  }
  else
  {
    hideDiv(field.field);
  }



  delete (this.loader);
}

field.getContent = function(element)
{
  return (element.text != undefined) ? element.text : element.textContent;
}

field.savedata = function()
{
  var formField = document.getElementById(field.field.substr(5));
  formField.value = this.innerHTML;
  hideDiv(field.field);

  if (formField.onchange)
    formField.onchange();
}

field.submitField = function(element, url)
{
  var loader = new net.getContent(url + '?field=' + element.name + '&query=' + element.value, this.quickResponse);
}

field.quickResponse = function()
{
  var response = this.req.responseXML.documentElement;

  var Entries = response.getElementsByTagName('script');

  for (var i = 0; i < Entries.length; i++)
  {
    eval(field.getContent(Entries[i]));
  }
}

/* Editable Regions */
var editable = new Object();
editable.editing = false;


editable.highlight = function(element)
{
  element.parentNode.style.border = "2px solid #FF0000";
  element.parentNode.padding = "2px";
}

editable.nohighlight = function(element)
{
  element.parentNode.style.border = "0";
  element.parentNode.padding = "0";
}

editable.edit = function(element)
{
  if (document.getElementById("field_" + element.id) == null) // To stop double editing
  {
    /*Get the size of the current region
    height = element.offsetHeight;*/
    var height = 100;
    var width = element.parentNode.offsetWidth - 20; /* Parent width - not that of the element (incase it doesn't fill the parent) */
    var textVal;
    
    if (element.innerText != undefined)
    {
      /* Chrome */
      textVal = element.innerText;
    }
    else if ( element.textContent != undefined )
    {
      /* Firefox */
      textVal = element.textContent;
    }
    else
    {
      /* IE */
      textVal = element.innerHTML;
    }

    textVal = editable.urldecode(textVal);
    /* trim leading and trailing spaces */
    textVal = textVal.replace(/^[ ]+/g,'');
    textVal = textVal.replace(/[ ]+$/g,'');
    /* Remove bbcode div container if it exists.*/
    textVal = textVal.replace(/<div class=("*?)bbcode("*?)>(.*?)<\/div>/gi,'$3');

    textVal = textVal.replace(/<br\/>/gim, '\r\n');
    textVal = textVal.replace(/<br>/gim, '\r\n');
    /* fix mailto links until bbdecoder is working on email */
    textVal = textVal.replace(/<a (style="(.*?)" ){0,1}href=["]{0,1}mailto:(.*?)["]{0,1}>(.*?)<\/a>/gim,'$3');

    element.innerHTML = "<textarea id=\"field_" + element.id + "\" style=\"width: " + width + "px; height: " + height + "px;\" onfocus=\"editable.highlight(this);\" onblur=\"editable.nohighlight(this); editable.save(this);\">" + textVal + "</textarea>";
    element.firstChild.focus();
    editable.editing = true;
  }
}

editable.urlencode = function(data)
{
  data = data.replace("+","%2B");
  data = data.replace("/","%2F");
  return escape(data);
}

editable.urldecode = function(data)
{
  data = unescape(data);
  data = data.replace("%2B","+");
  data = data.replace("%2F","/");
  return data;
}


editable.save = function(element)
{
  editable.element = element.parentNode;
  this.loader = new net.getContent(processorURL + '?element=' + element.parentNode.id + '&value=' + editable.urlencode(element.value.replace(/\n/gi,'\r\n')), '' ,this.processResponse);
  editable.editing = false;
}

editable.processResponse = function()
{
  var response = this.req.responseXML.documentElement;
  var Entries = response.getElementsByTagName('dataVal');

  if (Entries.length > 0)
  {
    editable.element.innerHTML = field.getContent(Entries[0]);
  }
}


editable.setup = function()
{
  /* Find all the divs */
  var divs = document.getElementsByTagName("div");

  /* Loop through the divs */
  for (var i = 0; i < divs.length; i++)
  {
    var div = divs[i];

    if (div.getAttribute('class') == 'editable' || div.getAttribute('className') == 'editable')
    {
      div.onclick = function () {
        editable.edit(this);
      }
      div.style.cursor = "pointer";
      div.title = "Click to Edit this text.";
    }
  }
}

event.observe(window, 'load', editable.setup);

/* function to turn bbdecoded string from Utils::BBcode into bbencoded string. */
function bbencode(textVal)
{
  /* code/text block
  textVal = textVal.replace(/<div class="{0,1}code"{0,1}>(.*?)<\/div>/gi, '[text]$1[/text]');
  /* colour block */
  textVal = textVal.replace(/<font color=["]{0,1}(.*?)"{0,1}>(.*?)<\/font>/gi,'[color=$1]$2[/color]');
  /* quote block */
  textVal = textVal.replace(/<span class=["]{0,1}quote"{0,1}>(.*?)<\/span>/gi,'[quote]$1[/quote]');
  /* source block */
  textVal = textVal.replace(/<b>Source:<\/b> <a href="(.*?)" target=["]{0,1}_blank["]{0,1}>(.*?)<\/a>/gi,'[source=$1]$2[/source]');
  /* size block */
  textVal = textVal.replace(/<font size=["]{0,1}(.*?)["]{0,1}>(.*?)<\/font>/gi,'[size=$1]$2[/size]');
  /* alignment block */
  textVal = textVal.replace(/<div style=["]{0,1}text-align: (.*?)[;]{0,1}["]{0,1}>(.*?)<\/div>/gi,'[align=$1]$2[/align]');
  /* bold */
  textVal = textVal.replace(/<b>(.*?)<\/b>/gi,'[b]$1[/b]');
  /* underline */
  textVal = textVal.replace(/<u>(.*?)<\/u>/gi,'[u]$1[/u]');
  /* italic */
  textVal = textVal.replace(/<i>(.*?)<\/i>/gi,'[i]$1[/i]');
  /* strikethrough */
  textVal = textVal.replace(/<s>(.*?)<\/s>/gi,'[s]$1[/s]');
  /* image tag */
  textVal = textVal.replace(/<img src=["]{0,1}(.*?)["]{0,1}>/gi,'[img]$1[/img]');
  /* url tag */
  textVal = textVal.replace(/<a (style="(.*?)" ){0,1}href=["]{0,1}(((http|https|ftp){1}:\/\/){1}.*?)["]{0,1}( target=["]{0,1}_blank["]{0,1}){0,1}>(.*?)<\/a>/gi,'[url=$3]$7[/url]');
  /* email tag */
  textVal = textVal.replace(/<a (style="(.*?)" ){0,1}href=["]{0,1}mailto:(.*?)["]{0,1}>(.*?)<\/a>/gi,'[email]$3[/email]');
  return textVal
}