/**
 * @fileoverview js/module_club
 * @description methods and properties for clubblog
 * @author bKarolyi
 */


/**
 * @description edit labels
 * @namespace
 */
var blog_label =
{
  addLabel: function( id )
  {
    this.initEditUnit( id );
    var unit = this.getEditUnitById( id );
    if ( nw.isEmptyField( unit.add_label_input, true ) )
    {
      unit.add_label_input.focus();
      return false;
    }
    
    unit.addLabel();
    return true;
  },
  
  addLabelProto: function()
  {
    //this = editor object
    //validate length
    if ( this.add_label_input.value.length > 100 )
    {
      nw.alert( __( "A címkék nem lehetnek hosszabbak %%num%% karakternél", { "%%num%%": 100 } ) );
      return false;
    }
    
    this.ajax_addlabel = this.ajax_addlabel || new n_ajax_class( null, this.fieldwrap, this.addLabelCallback );
    this.ajax_addlabel.sendForm( this, this.add_label_input.form );
    
    return true;
  },
  
  addLabelCallbackProto: function( o )
  {
    //this = editor object
    this.originaltextfield.innerHTML = this.ajax_addlabel.json_response.message;
    this.add_label_input.value = "";
    
    return true;
  },
  
  //edit all
  edit_units: [],
  
  initEditUnit: function( id, options )
  {
    if ( !this.getEditUnitById( id ) )
    {
      var act_obj = this;
      
      var act_edit_obj = function(){};
      act_edit_obj.prototype = new n_editfield_simple_class( "labelseditor_" + id );
      act_edit_obj.prototype.saveCallback = this.saveCallback;
      act_edit_obj.prototype.edit = this.editProto;
      act_edit_obj.prototype.addLabel = this.addLabelProto;
      act_edit_obj.prototype.add_label_input = Dom.get( "n_addlabelinput_" + id );
      act_edit_obj.prototype.ajax_addlabel = null;
      act_edit_obj.prototype.addLabelCallback = this.addLabelCallbackProto;
      
      options = options || {};
      act_edit_obj.prototype.options = options;
      
      var act_edit_obj_instance = new act_edit_obj;
      this.edit_units.push( act_edit_obj_instance );
    }
    
    return true;
  },
  
  editProto: function( editfield_id )
  {
    if ( this.originaltextfield )
    {
      var labels = $( "A", this.originaltextfield );
      var a_labels = [];
      for ( i_label = 0; i_label < labels.length; i_label++ )
      {
        var act_label = labels[ i_label ];
        if ( !act_label.childNodes[0] )
        {
          continue;
        }
        
        a_labels.push( act_label.childNodes[0].nodeValue ); 
      }
      
      var s_labels = a_labels.join( "," );
      this.textinput.value = s_labels;
    }
    else
    {
      this.textinput.value = "";
    }
    
    nw.hide( this.fieldwrap );
    nw.show( this.editfieldwrap );
    this.textinput.focus();
    
    return true;
  },
  
  saveCallback: function( o )
  {
    //this = editor object
    this.originaltextfield.innerHTML = this.ajax_save.json_response.message || "";
    this.hide();
    
    return true;
  },
  
  getEditUnitById: function( id )
  {
    for ( i_unit = 0; i_unit < this.edit_units.length; i_unit++ )
    {
      var act_unit = this.edit_units[ i_unit ];
      if ( "labelseditor_" + id == act_unit.editfield_id )
      {
        return act_unit;
      }
    }
    
    return false;
  },
  
  editAll: function( id, options )
  {
    this.initEditUnit( id, options );
    
    var unit = this.getEditUnitById( id );
    
    unit.edit();
    return true;
  },
  
  hideAll: function( id )
  {
    var unit = this.getEditUnitById( id );
    
    unit.hide();
    return true;
  },
  
  saveAll: function( id )
  {
    var unit = this.getEditUnitById( id );
    
    unit.save( { min: -1, max: 100 });
    return true;
  }
}

/**
 * @description main functions and properties for blog
 * @namespace
 */
var blog = 
{
  /**
   * @description adds tip box to tinyMCE editor
   */
  addTipToEditor: function()
  {
    Dom.addClass( Dom.get( "blogedit_bp_body_parent" ), "n_tip" );
    tip.showTip( Dom.get( "blogedit_bp_body_parent" ) );
  },


  //delete
  ajax_delete: null,
  
  blogpost_id: "",
  
  /**
   * @description deletes blog post
   * @param {Object} button_el delete button
   */
  delBlogPost: function( button_el )
  {
    var blog_row = Dom.getAncestorByTagName( button_el, "tr" );
    this.blogpost_id = button_el.id.replace( /blogdeletelink_/g, "" );
    this.ajax_delete = new n_ajax_class( button_el.href, blog_row, this.delBlogPostCallback );
    var act_obj = this;
    nw.confirm( __("Biztosan törölni szeretnéd ezt a bejegyzést?"),  function(){ act_obj.delBlogPostHadleYes.call( act_obj ); } );
    
    return true;
  },
  delBlogPostCallback: function( o )
  {
    blog_admin.submit();
    return true;
  },
  /**
   * @description callback function for deleting blogpost
   */
  delBlogPostHadleYes: function()
  {
    var del_form = Dom.get( "blogdeleteform_" + this.blogpost_id );
    this.ajax_delete.sendForm( this, del_form );
    return true;
  },

  
  /**
   * @description shows all months
   * @param {Object} button
   */
  showHistoryList: function( button )
  {
    var hidden_month = Dom.getElementsByClassName( "n_hidden_month", "li" );
    Dom.addClass( button, "n_invisible" );
    Dom.removeClass( hidden_month, "n_invisible" );
    return true;
  },
  /**
   * @description validation for editing post
   */
  submit: function()
  {
    errorHandlers.hideAllErrorMsg( "jsForm_blogedit" );
    var valid = true;
    var errors = [];
    
    if ( YAHOO.lang.trim( Dom.get( "blogedit_bp_title" ).value ) == "" )
    {
      valid = false;
      errors.push( ["blogedit_bp_title", __( "Kitöltése kötelező" )] );
    }
    
    var tiny_obj = tinyMCE.getInstanceById( "blogedit_bp_body" );
    var content = tiny_obj.getContent();
    if ( YAHOO.lang.trim( content ) == "" )
    {
      valid = false;
      errors.push( ["blogedit_bp_body", __( "Kitöltése kötelező" )] );
    }
    
    if ( Dom.get( "blogedit_timed" ).checked )
    {
      var year = Dom.get( "blogedit_published_at_year" ).value;
      var month = Dom.get( "blogedit_published_at_month" ).value - 1;
      var day = Dom.get( "blogedit_published_at_day" ).value;
      var hour = Dom.get( "blogedit_published_at_hour" ).value;
      var minute = Dom.get( "blogedit_published_at_minute" ).value;
      
      var selected_date = new Date();
      selected_date.setFullYear( year, month, day );
      selected_date.setHours( hour );
      selected_date.setMinutes( minute );
      
      var today = new Date();
      if ( selected_date.toString().toLowerCase() == "invalid date" )
      {
        valid = false;
        errors.push( ["blogedit_published_at", __( "A megadott időpont nem megfelelő, válassz másikat" )] );
      }
      else if ( selected_date <= today )
      {
        valid = false;
        errors.push( ["blogedit_published_at", __( "A megadott időpont már elmúlt, válassz másikat" )] );
      }
    }
    
    if ( !valid )
    {
      for ( i_errors = 0; i_errors < errors.length; i_errors++ )
      {
        var act_error = errors[i_errors];
        errorHandlers.showErrorMsg( act_error[0], act_error[1] );
      }
      
      var n_highlight = new errorHandlers.highlightManager( errors[0][0] );
      n_highlight.init();
      
      return false;
    }
    
    return true;
  }
}

/**
 * @description editing blog
 * @namespace
 */
var blog_edit =
{
  /**
   * @description goes back when editing blogpost
   */
  back: function()
  {
    var tiny_obj = tinyMCE.getInstanceById( "blogedit_bp_body" );
    var content = tiny_obj.getContent();
    if ( YAHOO.lang.trim( content ) == "" )
    {
      history.go( -1 );
      return false;
    }
    
    if ( YAHOO.lang.trim( Dom.get( "blogedit_bp_title" ).value ) == "" )
    {
      Dom.get( "blogedit_bp_title" ).value = "blogpost";
      Dom.get( "blogedit_draft" ).checked = true;
      Dom.get( "blogedit_timed" ).checked = false;
      Dom.get( "jsForm_blogedit" ).action += "/back/admin";
      Dom.get( "jsForm_blogedit" ).submit();
      return true;
    }
    
    if ( Dom.get("n_innermaincolumn") )
    {
      Dom.get("n_innermaincolumn").style.overflow = "visible";
    }
    nw.openLight( "back_confirm_dialog" );
  },
  /**
   * @description when user clicked no
   */
  handleBackNo: function()
  {
    history.go( -1 );
  },
  /**
   * @description when user clicked yes
   */
  handleBackYes: function()
  {
    if ( blog.submit() )
    {
      Dom.get( "blogedit_draft" ).checked = true;
      Dom.get( "blogedit_timed" ).checked = false;
      Dom.get( "jsForm_blogedit" ).action += "/back/admin";
      Dom.get( "jsForm_blogedit" ).submit();
    }
  },
  /**
   * @description handles checks on draft checkboxes
   * @param {Object} cb_el draft checkbox
   */
  toggleDraft: function( cb_el )
  {
    if ( cb_el.checked )
    {
      Dom.get( "blogedit_timed" ).checked = false;
      Dom.get( "blogedit_timed" ).disabled = true;
    }
    else
    {
      Dom.get( "blogedit_draft" ).disabled = false;
      Dom.get( "blogedit_timed" ).disabled = false;
    }
    return true;
  },
  /**
   * @description handles checks on timed checkboxes
   * @param {Object} cb_el timed checkbox
   */
  toggleTimed: function( cb_el )
  {
    if ( cb_el.checked )
    {
      Dom.get( "blogedit_draft" ).checked = false;
      Dom.get( "blogedit_draft" ).disabled = true;
      nw.show( "n_armblogpostdatewrap" );
    }
    else
    {
      Dom.get( "blogedit_draft" ).disabled = false;
      Dom.get( "blogedit_timed" ).disabled = false;
      nw.hide( "n_armblogpostdatewrap" );
      nw.hide( "blogedit_published_at_errormsg" );
    }
    return true;
  }
}

/**
 * @description blog administration
 * @namespace
 */
var blog_admin = 
{
  //pager
  jumpToPage: function()
  {
    var page_input = Dom.get( "jump_to_page" );
    var last_page = parseInt( Dom.get( "pager_lastpage" ).value );
    var text = page_input.value;

    if ( nw.isEmptyField( page_input, true ) ||
         !parseInt( text ) )
    {
      page_input.value = "";
      page_input.focus();
      return false;
    }

    if ( parseInt( text ) < 1 ||
         parseInt( text ) > last_page  )
    {
      page_input.value = "";
      page_input.focus();
      return false;
    }

    page_input.form.submit();

    return true;
  },
  /**
   * @description clears search bar
   */
  clearSearchbar: function()
  {
    Dom.get("blogadmin_search_search_text").value = "";
    nw.hide( "n_clearsearchbar_icon" );
    this.submit();
    return true;
  },
  /**
   * @description gets blog list without ordering
   * @namespace
   */
  getCallback:
  {
    /**
     * @description successful ajax call
     * @param {Object} o the ajax object
     */
    success: function( o )
    {
      nw.hideWaiting();
      blog_admin.orderColumn( 2, 2 );
      if ( !nw.isEmptyField( "blogadmin_search_search_text" ) )
      {
        nw.show( "n_clearsearchbar_icon" );
      }
      if ( ie6 )
      {
        var class_name = Dom.get( "n_blogposttablebody" ).className;
        var id = Dom.get( "n_blogposttablebody" ).id;
        var table_el = Dom.get( "n_blogposttablebody" ).parentNode;
        var table_class_name = table_el.className;
        var table_parent = table_el.parentNode;
        table_el.removeChild( Dom.get( "n_blogposttablebody" ) );
        var table_content = table_el.innerHTML;
        table_content = table_content +
                        "<tbody id='" + id + "' class='" + class_name + "'>" +
                        o.responseText +
                        "</tbody>";
        table_parent.removeChild( table_el );    
        table_parent_content = "<table class='" +
                               table_class_name +
                               "' >" +
                               table_content +
                               "</table>";
        table_parent.innerHTML = table_parent_content;    
      }
      else
      {
       Dom.get( "n_blogposttablebody" ).innerHTML = o.responseText;
      }
    },
    /**
     * @description ajax call failure
     */
    failure: function()
    {
      nw.hideWaiting();
    }
  },
  /**
   * @description gets blog list wit ordering
   * @namespace 
   */
  getOrderCallback:
  {
    /**
     * @description successful ajax call
     * @param {Object} o the ajax object
     */
    success: function( o )
    {
      nw.hideWaiting();
      //ie6 tbody hack
      if ( ie6 )
      {
        var class_name = Dom.get( "n_blogposttablebody" ).className;
        var id = Dom.get( "n_blogposttablebody" ).id;
        var table_el = Dom.get( "n_blogposttablebody" ).parentNode;
        var table_class_name = table_el.className;
        var table_parent = table_el.parentNode;
        table_el.removeChild( Dom.get( "n_blogposttablebody" ) );
        var table_content = table_el.innerHTML;
        table_content = table_content +
                        "<tbody id='" + id + "' class='" + class_name + "'>" +
                        o.responseText +
                        "</tbody>";
        table_parent.removeChild( table_el );    
        table_parent_content = "<table class='" +
                               table_class_name +
                               "' >" +
                               table_content +
                               "</table>";
        table_parent.innerHTML = table_parent_content;    
      }
      else
      {
       Dom.get( "n_blogposttablebody" ).innerHTML = o.responseText;
      }
    },
    /**
     * @description ajax call failure
     */
    failure: function()
    {
      nw.hideWaiting();
    }
  },
  /**
   * @description handles column order
   * @param {Number} column column name<br />
   * 1-name
   * 2-date
   * @param {Number} type order type <br />
   * 1-ascending
   * 2-descending
   * @param {Boolean} if true sends an ajax request, if not definied only sets orders 
   */
  orderColumn: function( column, type, ajax )
  {

    Dom.get( "sort_column" ).value = column;
    Dom.get( "sort_type" ).value = type;
    
    var act_asc_button;
    var act_desc_button;
    
    switch ( column )
    {
      case 1:
       act_asc_button = Dom.get( "name_order_asc" );
       act_desc_button = Dom.get( "name_order_desc" );
       break;
      case 2:
       act_asc_button = Dom.get( "date_order_asc" );
       act_desc_button = Dom.get( "date_order_desc" );
       break;
      default:
       return false;
    }
    
    var asc_buttons = [];
    asc_buttons[0] = Dom.get( "name_order_asc" );
    asc_buttons[1] = Dom.get( "date_order_asc" );
    
    for ( i_asc = 0; i_asc < asc_buttons.length; i_asc++ )
    {
      Dom.removeClass( asc_buttons[i_asc], "n_setblogpostordericon_active_up");
      if ( asc_buttons[i_asc] == act_asc_button )
      {
        if ( type == "1" )
        {
          Dom.addClass( asc_buttons[i_asc], "n_setblogpostordericon_active_up");
        }
      }
    }
    
    var desc_buttons = [];
    desc_buttons[0] =  Dom.get( "name_order_desc" );
    desc_buttons[1] =  Dom.get( "date_order_desc" );
    
    for ( i_desc = 0; i_desc < desc_buttons.length; i_desc++ )
    {
      Dom.removeClass( desc_buttons[i_desc], "n_setblogpostordericon_active_down");
      if ( desc_buttons[i_desc] == act_desc_button )
      {
        if ( type == "2" )
        {
          Dom.addClass( desc_buttons[i_desc], "n_setblogpostordericon_active_down");
        }
      }
    }
    
    if ( ajax )
    {
      nw.openWaiting();
      nw.ajaxForm( "blog_searchform", this.getOrderCallback );
    }

    return true;
  },
  /**
   * @description starts search runs after clicked on search button
   */
  submit: function()
  {
    Dom.get( "sort_column" ).value = "2";
    Dom.get( "sort_type" ).value = "2";
    
    nw.openWaiting();
    nw.ajaxForm( "blog_searchform", this.getCallback );
    return true;
  }
}

var jumptopage = function()
{
  blog_admin.jumpToPage();

  return true;
}

Event.onDOMReady( function()
{
  if ( typeof tiny != "undefined" )
  {
    tiny.extraOnclick = blog.addTipToEditor;
  }
} );