function buildPalette()
{
  var colors = new Object();

  colors['a'] = '#FC3300';
  colors['b'] = '#FF3366';
  colors['c'] = '#990066';
  colors['d'] = '#330066';
  colors['e'] = '#333399';
  colors['f'] = '#3399FF';
  colors['i'] = '#FF9933';
  colors['j'] = '#FFCC33';
  colors['k'] = '#FFFF33';
  colors['l'] = '#99CC33';
  colors['m'] = '#339933';
  colors['n'] = '#339999';
  colors['o'] = '#000000';
  colors['p'] = '#FFFFFF';

  var palette = new Element('div');

  palette.setAttribute('id', 'palette');

  for(name in colors)
  {
    var container = new Element('a');

    container.setAttribute('href', '#');
    container.setAttribute('title', colors[name]);
    
    var div = new Element('div');

    div.style.background = colors[name];
    div.setAttribute('class', 'color');
    div.innerHTML = '&nbsp;&nbsp;';

    container.appendChild(div);

    palette.appendChild(container);
  }

  document.body.appendChild(palette);
}

function getLeftPosition(caller)
{
	var result = caller.offsetLeft;
  
	while((caller = caller.offsetParent))
  {
    result += caller.offsetLeft;
  }
  
  return result;
}

function getTopPosition(caller)
{
	var result = caller.offsetTop;
  
	while((caller = caller.offsetParent))
  {
    result += caller.offsetTop;
  }
  
  return result;
}

function colorChooserFor(id, caller_id)
{
  $('palette').style.left = getLeftPosition($(caller_id)) + 'px';
  
  $('palette').style.top = getTopPosition($(caller_id)) + 10 + 'px';
  
  $('palette').style.visibility = 'visible';

  $('palette').stopObserving('click', null);

  document.observe('click', function(event)
  {
    Event.stop(event);

    var div = Event.element(event);    
    var container = div.parentNode;
    
    if(container.title && container.title.charAt(0) == '#')
    {
      $(id).value = container.title;
      
      modelPreview();
    }
    
    document.stopObserving('click', null);
    
    $('palette').style.visibility = 'hidden';
  });
}

function dump(v)
{
  var res = '';
  
  for(u in v)
  {
    res += v + ':' + v[u];
  }
  
  return res;
}