/**
 * (C) 2008 Syronex / J.M. Rosengard
 * http://www.syronex.com/software/jquery-color-picker
 * This is based on: 
 * jQuery colorSelect plugin 0.9
 * http://plugins.jquery.com/project/colorPickerAgain
 * Copyright (c) 2008 Otaku RzO (Renzo Galo Castro Jurado).
 * Edit J->Yousix.com
 */

(function($) {
  $.fn.colorPicker = function($$options) {
    // Defaults
    var $defaults = {
      color:new Array(
	'#FFFFFF', '#FFFFCC', '#FFFF99', '#FFFF66', '#FFFF33', '#FFCCFF', '#FFCCCC', '#FFCC99', '#FFCC66', '#FFCC33', '#FF99FF', '#FF99CC', '#FF9999',
   '#FF9966', '#FF9933', '#FF66FF', '#FF66CC', '#FF6699', '#FF6666', '#FF6633', '#FF33FF', '#FF33CC', '#FF3399', '#FF3366', '#FF3333', '#CCFFFF', '#CCFFCC',
    '#CCFF99', '#CCFF66', '#CCFF33', '#CCCCFF', '#CCCCCC', '#CCCC99', '#CCCC66', '#CCCC33', '#CC99FF', '#CC99CC', '#CC9999', '#CC9966', '#CC9933', '#CC66FF',
     '#CC66CC', '#CC6699', '#CC6666', '#CC6633', '#CC33FF', '#CC33CC', '#CC3399', '#CC3366', '#CC3333', '#99FFFF', '#99FFCC', '#99FF99', '#99FF66', '#99FF33',
      '#99CCFF', '#99CCCC', '#99CC99', '#99CC66', '#99CC33', '#9999FF', '#9999CC', '#999999', '#999966', '#999933', '#9966FF', '#9966CC', '#996699', '#996666',
       '#996633', '#9933FF', '#9933CC', '#993399', '#993366', '#993333', '#66FFFF', '#66FFCC', '#66FF99', '#66FF66', '#66FF33', '#66CCFF', '#66CCCC', '#66CC99',
        '#66CC66', '#66CC33', '#6699FF', '#6699CC', '#669999', '#669966', '#669933', '#6666FF', '#6666CC', '#666699', '#666666', '#666633', '#6633FF', '#6633CC',
         '#663399', '#663366', '#663333', '#33FFFF', '#33FFCC', '#33FF99', '#33FF66', '#33FF33', '#33CCFF', '#33CCCC', '#33CC99', '#33CC66', '#33CC33', '#3399FF',
          '#3399CC', '#339999', '#339966', '#339933', '#3366FF', '#3366CC', '#336699', '#336666', '#336633', '#3333FF', '#3333CC', '#333399', '#333366', '#333333',
           "#3300CC","#330099","#330066","#330033","#330000","#0000FF","#0000CC","#000099","#000066","#000033",'#000000'
	),
      defaultColor: 0,
      columns: 0,
      ids: 1,
      click: function($color){}
    };
		
    var $settings = $.extend({}, $defaults, $$options);
		
    // Iterate and reformat each matched element
    return this.each(function() {
      var $this = $(this);
      // build element specific options
      var o = $.meta ? $.extend({}, $settings, $this.data()) : $settings;
      var $$oldIndex = typeof(o.defaultColor)=='number' ? o.defaultColor : -1;
      
      var _html = "";
      _html ='<span onclick="$(\'#\'+this.parentNode.parentNode.id).hide();" style="float:right;"> X&nbsp;&nbsp;</span><br /><br />';
      for(i=0;i<o.color.length;i++){
	    _html += '<div style="background-color:'+o.color[i]+';"></div>';
	    if($$oldIndex==-1 && o.defaultColor==o.color[i]) $$oldIndex = i;
      }
      
      
      $this.html('<div class="jColorSelect" id="jColorSelect">'+_html+'</div>');
      var $color = $this.children('.jColorSelect').children('div');
      // Set container width
      var w = ($color.width()+2+2) * (o.columns>0 ? o.columns : o.color.length );
      $this.children('.jColorSelect').css('width',w);
      
      // Subscribe to click event of each color box
      $color.each(function(i){
	$(this).click(function(){
	  if( $$oldIndex == i ) return;	  
	  if( $$oldIndex > -1 ){
	    cell = $color.eq($$oldIndex);
	    if(cell.hasClass('check')) cell.removeClass(
	      'check').removeClass('checkwht').removeClass('checkblk');
	  }
	  // Keep index
	  $$oldIndex = i;
	  $(this).addClass('check').addClass(isdark(o.color[i]) ? 'checkwht' : 'checkblk');
	  // Trigger user event
	  o.click(o.color[i]);
	});
      });
      
      // Simulate click for defaultColor
      _tmp = $$oldIndex;
      $$oldIndex = -1;
      $color.eq(_tmp).trigger('click');
    });    
    return this;
  };
  
  
})(jQuery);

/**
 * Return true if color is dark, false otherwise.
 * (C) 2008 Syronex / J.M. Rosengard
 **/
function isdark(color){
  var colr = parseInt(color.substr(1), 16);
  return (colr >>> 16) // R
    + ((colr >>> 8) & 0x00ff) // G 
    + (colr & 0x0000ff) // B
    < 500;
}