/*
 * @author Erik Anders aka --=GT-O=--Hellfire
 */

var Raid = Class.extend({
  init: function() {
    this.url = 'content.php?load=ajax-raid'
    this.url2 = 'http://www.lg-net.de/content.php?load=ajax-raid';
    
    /*we are using an ajax-call to this domain to retrieve our data
    $.ajaxSetup({
     url: this.url,
     type: 'GET',
     dataType: 'json'      
    });
    //*/
    
    //*we are using a jsonp-call to another domain to retrieve our data
    $.ajaxSetup({
     url: this.url2,
     type: 'GET',
     dataType: 'jsonp',
     jsonp: 'jsonp_callback'
    });
    //*/
    
    this.globalCt = $('#raid-content');
    this.wowClasses = new WoWClass().c;
    this.emptyClass = {key: 'empty', name: 'Frei', color: '#CACACA'};
    
    //number of columns and entries per column on the raid-details-page
    this.rdCols = 3;
    this.rdEntries = 15;
    
    this.globalCt.append('<div id="listCt"></div>');
    this.listCt = $('#listCt');
    var self = this;
    
    this.loadEvents();
    this.loadChars();

    $('#raid-detail-dialog').dialog({
      modal: true,
      resizable: false,
      autoOpen: false,
      width: 700,
      minHeight: 200
    });
    
    $('#manage-chars-dialog').removeClass('x-hidden');
    $('#add-char-button').click(function() {
      $('#add-char-dialog').dialog('open');
    });
    
    $.each(this.wowClasses, function() {
      var _wowClass = this;
      $('#class-selector').append('<img id="class-img-'+this.clsId+'" src="images/guild/cls_'+this.clsId+'.gif" />');
      $('#class-img-'+this.clsId).click(function() {
        $('#char_class').val(_wowClass.clsId);
        $('#class-selector img').css('border', '2px solid #FFFFFF');
        $(this).css('border', '2px solid #00AA00');
      });
    });
    
    $('#class-selector img').hover(
      function() {
        $(this).addClass('hover');
      },
      function() {
        $(this).removeClass('hover')
      }
    );
    
    $('#manage-chars-dialog').dialog({
      modal: true,
      resizable: false,
      autoOpen: false,
      buttons: {
        'OK': function() {
          $(this).dialog('close');
        }
      },
      close: function() {
        self.loadEvents();
        self.loadChars();
      }
    });
    
    $('#add-char-dialog').removeClass('x-hidden');
    $('#add-char-dialog').dialog({
      modal: true,
      resizable: false,
      autoOpen: false,
      buttons: {
        'Absenden': function() {
          var html = '<strong class="raid-good">Char hinzuge&uuml;gt</strong>';
          html += '<br /><img src="images/guild/cls_'+$('#char_class').val()+'.gif" />&nbsp;'+$('#char_name').val();
          $.jGrowl(html, {glue: 'before'});
          $.ajax({
            data: {mode: 'addChar', name: $('#char_name').val(), char_class: $('#char_class').val()}
          });
          $('#manage-chars-dialog').dialog('close');
          $(this).dialog('close');
        },
        'Abbrechen': function() {
          $(this).dialog('close');
        }
      }
    });
    
    $('#quick-signup').click(function() {
      var html = '<strong class="raid-good">F&uuml;r alle neuen Raids angemeldet:</strong>';
      html += '<br />'+$('#quick-signup').html().substr($('#quick-signup').html().indexOf('(')+1);
      $.jGrowl(html, {glue: 'before'});
      
      $.ajax({
        data: {mode: 'quickSignup'},
        success: function() {
          self.loadEvents();
        }
      });
    });
    
    this.createRaidDialog();
    
    $('#error-dialog').dialog({
      modal: true,
      resizable: false,
      autoOpen: false,
      buttons: {
        'OK': function() {
          $(this).dialog('close');
          self.loadEvents();
        }
      }
    });
    $('#error-dialog').removeClass('x-hidden');
    
    $('#delete-raid-dialog').dialog({
      modal: true,
      resizable: false,
      autoOpen: false,
      buttons: {
        'Ja': function() {
          var html = '<strong class="raid-bad">Raid gel&ouml;scht</strong>';
          $.jGrowl(html, {glue: 'before'});
          $(this).dialog('close');
          $.ajax({
            data: {mode: 'deleteRaid', raid_id: $('#delete-raid-id').val()},
            success: function() {
              self.loadEvents();
            }
          });
        },
        'Nein': function() {
          $(this).dialog('close');
        }
      }
    });
    $('#delete-raid-dialog').removeClass('x-hidden');
  },
  
  createRaidDialog: function() {
    var self = this;
    
    $('#total-slots-slider').slider({
      range: 'min',
      min: 1,
      max: 40,
      slide: function(event, ui) {
				$("#total-slots").val(ui.value);
			}
    });
    $('#total-slots-slider').slider("value", 25);
    $("#total-slots").val($('#total-slots-slider').slider("value"));

    $("#raid_begin_show").datepicker({
      dateFormat: 'DD, d. MM yy',
      altField: $('#raid_begin'),
      altFormat: '@',
      showAnim: 'fadeIn'
    });
    
    $('#raid_begin_time_hour').slider({
      range: 'min',
      min: 0,
      max: 23,
      slide: function(event, ui) {
        var h = (new String(ui.value).length < 2) ? '0' : '';
        var m = (new String($('#raid_begin_time_minute').slider("value")).length < 2) ? '0' : '';
	$("#raid_begin_time").val(h+ui.value+':'+m+$('#raid_begin_time_minute').slider("value")+' Uhr');
      }
    });
    $('#raid_begin_time_hour').slider("value", 19);
    
    $('#raid_begin_time_minute').slider({
      range: 'min',
      min: 0,
      max: 45,
      step: 15,
      slide: function(event, ui) {
        var h = (new String($('#raid_begin_time_hour').slider("value")).length < 2) ? '0' : '';
        var m = (new String(ui.value).length < 2) ? '0' : '';
	$("#raid_begin_time").val(h+$('#raid_begin_time_hour').slider("value")+':'+m+ui.value+' Uhr');
      }
    });
    $('#raid_begin_time_minute').slider("value", '00');
    
    $("#raid_begin_time").val($('#raid_begin_time_hour').slider("value")+':'+$('#raid_begin_time_minute').slider("value")+' Uhr');
  

    $('#create-raid-dialog').dialog({
      autoOpen: false,
      modal: true,
      buttons: {
	'Absenden': function() {
	  var bValid = true;
	  var allFields = $('#create-raid-dialog input:not(#raid_begin_show)');
	  var tips = $("#validateTips");
    
	  allFields.removeClass('ui-state-error');
	  
	  bValid = bValid && self.checkLength($('#location'),"'Dungeon'",3,50, self);
	  bValid = bValid && self.checkLength($('#raid_begin'),"raid_begin",10,20, self);
	  
	  if (bValid) {
	    $.ajax({
	      data: allFields.serialize()+'&mode=createRaid',
	      success: function() {
		self.loadEvents();
	      }
	    });
	    
	    var html = '<strong '+(!($(this).find('#raid_id').val() > 0) ? 'class="raid-good">Raid erstellt:' : 'class="raid-neutral">Raid bearbeitet:')+'</strong>';
	    html += '<br />'+$(this).find('#location').val()+' ('+$(this).find('#raid_begin_show').val()+')';
	    $.jGrowl(html, {glue: 'before'});
	    $(this).dialog('close');
	  }
	},
	'Abbrechen': function() {
	  $(this).dialog('close');
	}
      },
      open: function() {
        $(this).datepicker('setDate', new Date());
        $('#raid_begin').val(new Date().getTime());
        $("#raid_begin_time").val($('#raid_begin_time_hour').slider("value")+':'+$('#raid_begin_time_minute').slider("value")+' Uhr');
        $("#total-slots").val($('#total-slots-slider').slider("value"));
      },
      close: function() {
        var allFields = $('#create-raid-dialog input:not(#raid_begin_show)');
        allFields.val('').removeClass('ui-state-error');
      }
    });
    $('#create-raid-dialog').removeClass('x-hidden');
    $('#ui-datepicker-div').css('z-index', 10000);
    
    $('#create-raid').click(function() {
      $('#create-raid-dialog').dialog('open');
    }).hover(
      function(){ 
        $(this).addClass("ui-state-hover"); 
      },
      function(){ 
        $(this).removeClass("ui-state-hover"); 
      }
    ).mousedown(function() {
      $(this).addClass("ui-state-active");
    }).mouseup(function() {
      $(this).removeClass("ui-state-active");
    });
    
    $('#manage-chars-button').click(function() {
      $('#manage-chars-dialog').dialog('open');
    }).hover(
      function(){ 
        $(this).addClass("ui-state-hover"); 
      },
      function(){ 
        $(this).removeClass("ui-state-hover"); 
      }
    ).mousedown(function() {
      $(this).addClass("ui-state-active");
    }).mouseup(function() {
      $(this).removeClass("ui-state-active");
    });
    
  },
  
  editRaidDialog: function(columns, data) {
    var idCol = $.inArray('id', columns);
    var sudCol = $.inArray('signup_data', columns);
    var usudCol = $.inArray('user_signup_data', columns);
    var rbCol = $.inArray('raid_begin', columns);
    var locCol = $.inArray('location', columns);
    var slotsCol = $.inArray('total_slots', columns);
    
    $('#location').val(data[locCol]);
    
    $('#total-slots-slider').slider("value", data[slotsCol]);
    $("#total-slots").val($('#total-slots-slider').slider("value"));
    
    var rb = new Date((data[rbCol]*1000-new Date(data[rbCol]*1000).getHours()*3600-new Date(data[rbCol]*1000).getMinutes()*60 ));
    
    $('#raid_begin_show').datepicker('setDate', rb);
    $('#raid_begin').val(rb.getTime());
    
    $('#raid_begin_time_hour').slider("value", new Date(data[rbCol]*1000).getHours());
    $('#raid_begin_time_minute').slider("value", new Date(data[rbCol]*1000).getMinutes());
    
    $("#raid_begin_time").val($('#raid_begin_time_hour').slider("value")+':'+$('#raid_begin_time_minute').slider("value")+' Uhr');
    
    $('#raid_id').val(data[idCol]);
  },
  
  updateTips: function(t) {
    $("#validateTips").text(t).effect("highlight",{},1500);
  },

  checkLength: function(o,n,min,max,parent) {
    if ( o.val().length > max || o.val().length < min ) {
      if (n == 'raid_begin') {
	$('#raid_begin_show').addClass('ui-state-error');
	parent.updateTips("'Beginn' darf nicht leer sein.");
      } else {
	o.addClass('ui-state-error');
	parent.updateTips(n + " muss zwischen "+min+" und "+max+" Zeichen lang sein.");
      }
      return false;
    } else {
      return true;
    }
  },

  checkRegexp: function(o,regexp,n,parent) {
    if ( !( regexp.test( o.val() ) ) ) {
      o.addClass('ui-state-error');
      parent.updateTips(n);
      return false;
    } else {
      return true;
    }
  },

  loadEvents: function() {
    var self = this;
    var html = '<strong>Lade Raids...</strong>';
    $.jGrowl(html, {glue: 'before'});
	    
    $.ajax({
      data: {mode: 'loadEvents'},
      success: function (json) {
        if (typeof(json) == 'string')
          json = window["eval"]("(" + json + ")");
	
        if (json.success == false && typeof(json.reason) == 'string') {
          switch (json.reason) {
            case 'ERR_NO_CHAR':
              $('#add-char-dialog').dialog('open');
              return;
              break; 
            case 'ERR_NO_PREF_CHAR':
              $('#manage-chars-dialog').dialog('open');
              return;
              break;
            default:
              $('#error-dialog p').html(json.reason);
              $('#error-dialog').dialog('open');
          }
          return;
        }
        
        $('#raid-list tbody:not(:first)').remove();
        $('#raid-list-template').templateDisplay({data: json.data, columns: json.columns, target: $('#raid-list'), remove: false});
	
        $.each($('#raid-list .raid_begin'), function() {
          var dt = new Date($(this).html()*1000);

          $(this).html(formatDate(dt, 'E dd.MM.yy, HH:mm'));
          var pd = prettyDate(dt.getTime()/1000);
          if (pd.length > 0)
            $(this).append('<br /><strong>'+pd+'</strong>');
          
          var pd = prettyDatePast(dt.getTime()/1000);
          if (pd.length > 0) {
            $(this).append('<br /><strong>'+pd+'</strong>');
          }
            
        });
	
        var idCol = $.inArray('id', json.columns);
        var sudCol = $.inArray('signup_data', json.columns);
        var usudCol = $.inArray('user_signup_data', json.columns);
        var rbCol = $.inArray('raid_begin', json.columns);
        var locCol = $.inArray('location', json.columns);
        var permCol = $.inArray('permissions', json.columns);
        var prefCol = $.inArray('user_preferred_char', json.columns);
	
        $.each(json.data, function() {
          var _jsonData = this;
          if (_jsonData[rbCol]*1000-(new Date().getTime()) < 0)
            $('#row-'+this[idCol]).addClass('ui-state-error');
	    
          var p = Processing("cv-"+this[idCol]);
          p.setup = function(){
            this.size(250,15);
            this.noLoop();
          };
          
          var total = this[$.inArray('total_slots', json.columns)];
          
          var signedUp = $.grep(this[sudCol], function(n,i) {
            return n.signup_type == 3;
          });
          var suTotal = 0;
          $.each(signedUp, function() { suTotal += parseInt(this.count) });
          
          total = Math.max(total, suTotal);
	  
          var rest = total - suTotal;
          p.draw = function() {
            _p = this;
            _p.noStroke();

            var spacer = 0;
            var rh = _p.height;
            _p.fill(self.emptyClass.color);
            _p.rect(0,0,_p.width-spacer,rh);
            
            var oldPos = 0;
            $.each(signedUp, function(i, n) {
              var classColor = $.grep(self.wowClasses, function(m,j) {
                return m.key == n.className;
              })[0].color;
              
              _p.fill(classColor);
              
              var newPos = oldPos + ((_p.width-spacer)*(n.count/total));
              _p.rect(Math.floor(oldPos),0,Math.ceil(newPos-oldPos),rh);
              
              oldPos = newPos;
            });
          }
          p.init();
          
          var reject = $.grep(this[sudCol], function(n,i) {
            return n.signup_type == 2;
          });
          var rjTotal = 0;
          $.each(reject, function() { rjTotal += parseInt(this.count) });
          $("#cv-"+this[idCol]).parent('td').next('td').append('<span class="raid-good">'+(total-rest)+'</span>/<span class="raid-bad">'+rjTotal+'</span>');
	 
        //all hover and click logic for buttons
        $.each($('#cv-'+this[idCol]).parent('td').siblings('.raid_options').find('button:not(.ui-state-disabled)'), function () {
	      $(this).hover(
          function(){
              $(this).addClass("ui-state-hover");
          },
          function(){
              $(this).removeClass("ui-state-hover");
          }
        )
	      .mousedown(function(){
        })
	      .mouseup(function(){
          if ($(this).is('.ui-state-active'))
            return;
            
          $(this).parents('.fg-buttonset-single:first').find(".fg-button.ui-state-active").removeClass("ui-state-active").removeClass("font-green").removeClass("font-red");
          _button = $(this);
          if ( $(this).is('.ui-corner-left') ) {
            $(this).addClass('font-green');
            var suType = 3;
          } else {
            $(this).addClass('font-red');
            var suType = 2;
          }
		  
          $.ajax({
            data: {mode: 'signup', signup_type: suType, raid: _jsonData[idCol]},
            beforeSend: function() {
              return !(_button.is('.ui-corner-left') && (_jsonData[usudCol].signup_type == 3))
            || (_button.is('.ui-corner-right') && (_jsonData[usudCol].signup_type == 2));
            },
            success: function(){
              var cls = $.grep(self.wowClasses, function(n) {
                return n.key == _jsonData[prefCol]['class'];
              })[0];
              var html = '<strong '+((suType == 3) ? 'class="raid-good">Angemeldet f&uuml;r:' : 'class="raid-bad">Abgemeldet f&uuml;r:')+'</strong>';
              html += '<br />'+_jsonData[locCol]+' ('+formatDate(new Date(_jsonData[rbCol]*1000), 'dd.MM.yy, HH:mm')+')';
              if (suType != 2) {
                html += '<br /><span style="float:left">Char:&nbsp; </span><img src="images/guild/cls_'+cls.clsId+'.gif" style="float:left;" alt=""/>';
                html += '<span style="float:left">&nbsp;'+_jsonData[prefCol].name+'</span>';
              }
              $.jGrowl(html, {glue: 'before'});
              self.loadEvents();
            }
          });
		  
          if( $(this).is('.ui-state-active.fg-button-toggleable, .fg-buttonset-multi .ui-state-active') ){
              $(this).removeClass("ui-state-active");
          }
          else {
              $(this).addClass("ui-state-active");
          }
          if(! $(this).is('.fg-button-toggleable, .fg-buttonset-single .fg-button,  .fg-buttonset-multi .fg-button') ){
              $(this).removeClass("ui-state-active");
          }
          
        })
        .mouseout(function() {
          if(! $(this).is('.fg-button-toggleable, .fg-buttonset-single .fg-button,  .fg-buttonset-multi .fg-button') ){
              $(this).removeClass("ui-state-active");
          }
	      });
	  });
	  
      if (this[usudCol]) {
	      $('#signup-type-'+this[usudCol].signup_type+'-'+this[idCol]).addClass('ui-state-active');
	      if ( $('#signup-type-'+this[usudCol].signup_type+'-'+this[idCol]).is('.ui-corner-left') ) {
          $('#signup-type-'+this[usudCol].signup_type+'-'+this[idCol]).addClass('font-green');
	      } else {
          $('#signup-type-'+this[usudCol].signup_type+'-'+this[idCol]).addClass('font-red');
	      }
        if (this[usudCol].signup_type == 3) {
          var cls = $.grep(self.wowClasses, function(n) {
            return n.key == _jsonData[usudCol]['class'];
          });
        
          $('#row-'+this[idCol]).children('.raid_comments').html(
            '<span class="img-correct">Du: </span>'+
            '<img src="images/guild/cls_'+cls[0].clsId+'.gif" alt=""/>'+
            '<span class="img-correct">'+this[usudCol].name+'</span>'
          );
        }
      }
      
      var row =  $('#row-'+_jsonData[idCol]);
      //make raid-details-link clickable
      $(row.find('a.raid-details-link')[0]).click(function(ev) {
	var html = '<strong>Lade Raid:</strong>';
	html += '<br />'+_jsonData[locCol]+' ('+formatDate(new Date(_jsonData[rbCol]*1000), 'dd.MM.yy, HH:mm')+')';
        $.jGrowl(html, {glue: 'before'});
	$.ajax({
	  data: {mode: 'loadRaid', raid_id: _jsonData[idCol]},
	  success: function(json) {
	    if (typeof(json) == 'string')
	      json = window["eval"]("(" + json + ")");
	      
	      var signedUp = $.grep(json.signup_info, function(n) {
		return n.signup_type == 3;
	      });
	      var numSignedUp = signedUp.length;
	      var rejected = $.grep(json.signup_info, function(n) {
		return n.signup_type == 2;
	      });
	      var numRejected = rejected.length;
	      
	      //raid details loaded - fill dialog fields
	      $('.raid-info-location').html(json.location);
	      $('.raid-info-begin').html(formatDate(new Date(json.raid_begin*1000), 'E dd.MM.yy, HH:mm'));
	      $('.raid-info-slots').html(json.total_slots);
	      
	      self.raidDetailsMember(signedUp, 'signup');
	      self.raidDetailsMember(rejected, 'reject');
	      
	      $('#raid-detail-dialog').removeClass('x-hidden');
	      $('#raid-detail-dialog').dialog('open');
	      $('.nx-class').addClass('raid-tooltip');
	  }
	});
	ev.preventDefault();
      });
      
      //activate raid-leader buttons
      if (this[permCol].a_create_raid == 1) {
        row.find('a.edit-raid-link').click(function(ev) {
          $('#create-raid-dialog').dialog('open');
          self.editRaidDialog(json.columns, _jsonData);
          ev.preventDefault();
        }).removeClass('x-hidden');

        row.find('a.delete-raid-link').click(function(ev) {
          $('#delete-raid-dialog').dialog('open');
          $('#delete-raid-id').val(_jsonData[idCol]);
          ev.preventDefault();
        }).removeClass('x-hidden');
        
        $('#create-raid').removeClass('x-hidden');
      }
      
      //activate raid-member buttons
      if (this[permCol].u_create_raidchar == 1 || this[permCol].a_create_raid == 1) {
        row.find('.fg-buttonset').removeClass('x-hidden');
        $('#manage-chars-button').removeClass('x-hidden');
        
        var cls = $.grep(self.wowClasses, function(n) {
          return n.key == _jsonData[prefCol]['class'];
        });
        $('#quick-signup').html('<span>Quick-Signup (</span><span style="background-image:url(images/guild/cls_'+cls[0].clsId+'.gif); padding-left: 20px;padding-bottom:5px; background-repeat:no-repeat;">'+this[prefCol].name+')</span>');
        $('#quick-signup').removeClass('x-hidden');
      }
    });
      $('#raid-list td.raid_signups2').textAlign('/').find('span:first').addClass('raid-good');
      $('#raid-list td.raid_signups2').find('span:last').addClass('raid-bad');
    }
  });
  },
  
  raidDetailsMember: function(data, type, cols, entries) {
    var self = this;
    $('#raid-'+type+'-header-num').html(data.length);
    $('.raid-'+type+' div:not(:first)').remove();

    for (var i=0; i<self.rdEntries; i++) {
      for (var j=0; j<=self.rdCols; j++) {
        var idx = i+(self.rdEntries*j);
        if (data[idx]) {
	  var show_com = (data[idx].su_comment != '' && data[idx].su_comment != '#CHARCOMMENT#');
          var cls = $.grep(self.wowClasses, function(n) {
            return n.key == data[idx]['class'];
          })[0];
          $('.raid-'+type).append('<div id="su-id-'+data[idx].sid+'" class="raid-detail-member '+((j == 0) ? 'raid-detail-first-col' : '')+'" style="color:'+((cls.altColor) ? cls.altColor : cls.color)+';background-image:url(images/guild/cls_'+cls.clsId+'.gif);'+(show_com ? 'cursor:pointer;' : '')+'">'+data[idx].name+'</div>');
          if (show_com) {
            $('.raid-'+type).append('<div class="nx-class" id="tip-'+data[idx].sid+'">'+data[idx].su_comment+'</div>');
            $('.raid-'+type).append('<div class="raid-comment-icon ui-icon ui-icon-comment"></div>');
            //$('#tip-'+data[idx].sid).remove();
            //$('body').append('<div id="tip-'+data[idx].sid+'">'+data[idx].su_comment+'</div>');
            var tt = $('#su-id-'+data[idx].sid).tooltip({
              position: ['center', 'right'],
              effect: 'fade',
              api: true,
              //tip: '#tip-'+data[idx].sid,
              dummy: false
            });
            tt.hide();
              
            $('#su-id-'+data[idx].sid).hover(
              function() {
                $(this).addClass('raid-member-hover');
                $($(this).nextAll('.raid-comment-icon')[0]).addClass('raid-member-hover');
              },
              function() {
                $(this).removeClass('raid-member-hover');
                $($(this).nextAll('.raid-comment-icon')[0]).removeClass('raid-member-hover');
              }
            );
          } else {
            $('.raid-'+type).append('<div class="raid-spacer"></div>');
          }
        }
      }
    }
  },
  
  loadChars: function() {
    var self = this;
    var html = '<strong>Lade Chars...</strong>';
    $.jGrowl(html, {glue: 'before'});
	    
    $.ajax({
      data: {mode: 'loadChars'},
      success: function (json) {
        if (typeof(json) == 'string')
          json = window["eval"]("(" + json + ")");
	
        if (json.success == false && typeof(json.reason) == 'string') {
          $('#error-dialog p').html(json.reason);
          $('#error-dialog').dialog('open');
          return;
        }
        
        $('#manage-chars tbody').remove();
        $('#manage-chars-template').templateDisplay({data: json.data, columns: json.columns, target: $('#manage-chars'), remove: true});
        $('#manage-chars-dialog .char_fav :radio').checkbox();
        
        var idCol = $.inArray('id', json.columns);
        var nameCol = $.inArray('name', json.columns);
        var classCol = $.inArray('class', json.columns);
        var favCol = $.inArray('preferred', json.columns);
        
        $.each(json.data, function() {
          var _jsonData = this;
          var row = $('#char-'+_jsonData[idCol]);
          var cls = $.grep(self.wowClasses, function(n) {
            return n.key == _jsonData[classCol];
          });
          
          row.find('.char_class img')[0].src = 'images/guild/cls_'+cls[0].clsId+'.gif';
          row.find('.char_fav input').checkbox((_jsonData[favCol] == 1) ? 'check' : 'uncheck');
          row.find('.char_fav input').click(function() {
            //console.log('<br /><img src="images/guild/cls_'+_jsonData[idCol]+'.gif" />&nbsp;');
            var html = '<strong class="raid-neutral">Mainchar ge&auml;ndert:</strong>';
            html += '<br /><img src="images/guild/cls_'+_jsonData[classCol]+'.gif" />&nbsp;'+_jsonData[nameCol];
            $.jGrowl(html, {glue: 'before'});
            $.ajax({
              data: {mode: 'setPrefChar', char_id: _jsonData[idCol]},
              success: function (json) {
                if (typeof(json) == 'string')
                  json = window["eval"]("(" + json + ")");
          
                if (json.success == false && typeof(json.reason) == 'string') {
                  $('#error-dialog p').html(json.reason);
                  $('#error-dialog').dialog('open');
                  return;
                }
              }
            });
          });
          
          row.find('.char_del button').click(function() {
            var html = '<strong class="raid-bad">Char gel&ouml;scht</strong>';
            html += '<br /><img src="images/guild/cls_'+_jsonData[idCol]+'.gif" />&nbsp;'+_jsonData[nameCol];
            $.jGrowl(html, {glue: 'before'});
            $.ajax({
              data: {mode: 'deleteChar', char_id: _jsonData[idCol]},
              success: function (json) {
                if (typeof(json) == 'string')
                  json = window["eval"]("(" + json + ")");
          
                if (json.success == false && typeof(json.reason) == 'string') {
                  $('#error-dialog p').html(json.reason);
                  $('#error-dialog').dialog('open');
                  return;
                }
              }
            });
          });
          
        });
      }
    });
  },
  
  _arraySum: function(a) {
    var total = 0;
    $.each(a, function() { total += this });
    return total;
  },
  
  _getColIdx: function(cList,name) {
    return $.grep(cList, function(n,i) {
      return (n == name);
    })[0];
  }
});

var WoWClass = Class.extend({
  init: function() {
    this.c = new Array();
    this.c.push({key: 'deathknight', name: 'Todesritter', color: '#C41F3B', clsId: 6});
    this.c.push({key: 'druid', name: 'Druide', color: '#FF7D0A', clsId: 11});
    this.c.push({key: 'hunter', name: 'J&auml;ger', color: '#ABD473', clsId: 3});
    this.c.push({key: 'mage', name: 'Magier', color: '#69CCF0', clsId: 8});
    this.c.push({key: 'paladin', name: 'Paladin', color: '#F58CBA', clsId: 2});
    this.c.push({key: 'priest', name: 'Priester', color: '#FFFFFF', clsId: 5, altColor: '#000000'});
    this.c.push({key: 'rogue', name: 'Schurke', color: '#FFF569', clsId: 4, altColor: '#EEE458'});
    this.c.push({key: 'shaman', name: 'Schamane', color: '#2459FF', clsId: 7});
    this.c.push({key: 'warlock', name: 'Warlock', color: '#9482C9', clsId: 9});
    this.c.push({key: 'warrior', name: 'Krieger', color: '#C79C6E', clsId: 1});
    
    this.c = $(this.c).sort('name', 'asc');
    
  }
});
