/**
* Annuleert het nieuw aanmaken van een content part.
*/
var CancelNewBehaviour = $.klass({
  onclick: function () {
    if (this.element.siblings("textarea").length > 0) {
      tinyMCE.execCommand('mceRemoveControl', false, this.element.siblings("textarea").get(0).id);
    }
    
    jQuery("#new_part").html("").hide();
    return false;
  }
});

/**
* Annuleert het bewerken van een content part.
*/
var CancelEditBehaviour = $.klass({
  onclick: function () {
    var id = this.element.parents("form").get(0).id.match(/[\d\.]+/g).join("");
    tinyMCE.execCommand('mceRemoveControl', false, "textarea_" + id);
    
    //-- edit gedeelte verbergen
    jQuery('#edit_for_part_' + id).hide();
    
    //-- show gedeelte tonen inclusief de bewerk knop
    jQuery("#content_for_part_" + id).show();
    jQuery("#menu_" + id).show();
    jQuery("#link_for_part_" + id).show();
    
    return false;
  }
});

/**
* Annuleert het bewerken van een titel van een tekst part.
*/
var CancelEditTitleBehaviour = $.klass({
  onclick: function () {
    var id = this.element.parents("form").get(0).id.match(/[\d\.]+/g).join("");
    
    jQuery("#edit_for_title_" + id).hide().html("");
    
    jQuery("#title_" + id).show();
    jQuery("#title_menu_" + id).show();
    
    return false;
  }
});

/**
* Verwijderen van een plaatje.
*/
var DeleteImageBehaviour = $.klass({
  onclick: function () {
    delete_part("deze afbeelding", this.element);
    return false;
  }
});

/**
* Verwijderen van een film.
*/
var DeleteMovieBehaviour = $.klass({
  onclick: function () {
    delete_part("deze film", this.element);
    return false;
  }
});

/**
* Verwijderen van een tekst part.
*/
var DeleteTextBehaviour = $.klass({
  onclick: function () {
    delete_part("dit textobjext", this.element);
    return false;
  }
});

/**
* Het bewerken van een content part (met Ajax).
*/
var EditBehaviour = $.klass({
  onclick: function () {
    cancel_edit();
    
    var id = this.element.get(0).id.match(/[\d\.]+/g).join("");
    jQuery.ajax({
      type: "GET",
      url: this.element.get(0).href,
      success: function (html_content) {
        jQuery("#content_for_part_" + id).hide();
        jQuery("#menu_" + id).hide();
        jQuery("#link_for_part_" + id).hide();
        
        jQuery('#edit_for_part_' + id).html(html_content).show();
        
        jQuery('textarea#textarea_' + id).ready(function() {
          jQuery('textarea#textarea_' + id).attach(TinyMCEBehaviour).focus();
        });

        //-- submit behaviour
        jQuery('.submit').attach(SubmitUpdateBehaviour);
        
        //-- cancel behaviour
        jQuery('a.cancel').attach(CancelEditBehaviour);
      }
    });
    
    return false;
  }
});

/**
* Het bewerken van een titel van een tekst part (met Ajax).
*/
var EditTitleBehaviour = $.klass({
  onclick: function () {
    cancel_edit();
    
    var id = this.element.get(0).id.match(/[\d\.]+/g).join("");
    jQuery.ajax({
      type: "GET",
      url: this.element.get(0).href,
      success: function (html_content) {
        jQuery("#edit_for_title_" + id).html(html_content).show();
        
        jQuery("#title_" + id).hide();
        jQuery("#title_menu_" + id).hide();
        
        //-- submit behaviour
        jQuery('a.cancel').attach(CancelEditTitleBehaviour);
        //-- cancel behaviour
        jQuery('a.submit').attach(SubmitUpdateTitleBehaviour);
      }
    });
    
    return false;
  }
});

/**
* Het creeen van een content part.
* Deze wordt gebruikt voor het uploaden van plaatje.
* Dit kan namelijk niet worden gedaan met Ajax.
*/
var FormNewBehaviour = $.klass({
  onclick: function () {
    this.element.parents("form").get(0).submit();
  }
});

var MakeFontsLargeBehaviour = $.klass({
  onclick: function () {
    unload_css_file("/stylesheets/medium_font_size.css");
    load_css_file("/stylesheets/large_font_size.css");
  }
});

var MakeFontsMediumBehaviour = $.klass({
  onclick: function () {
    unload_css_file("/stylesheets/large_font_size.css");
    load_css_file("/stylesheets/medium_font_size.css");
  }
});

var MakeFontsNormalBehaviour = $.klass({
  onclick: function () {
    unload_css_file("/stylesheets/large_font_size.css");
    unload_css_file("/stylesheets/medium_font_size.css");
  }
});

/**
8 Het aanmaken van een nieuw content part (met Ajax)
*/
var NewBehaviour = $.klass({
  onclick: function () {
    cancel_edit();
    
    jQuery.ajax({
      type    : "GET",
      url     : this.element.get(0).href,
      success : function (html_content) {
        jQuery('#new_part').html(html_content).show();
        
        jQuery('textarea#textarea').ready(function() {
          jQuery('textarea#textarea').attach(TinyMCEBehaviour).focus();
        });
        
        //-- submit behaviour
        jQuery('a.submit').attach(SubmitNewBehaviour);
        //-- formsubmit
        jQuery('a.formsubmit').attach(FormNewBehaviour);
        //-- cancel behaviour
        jQuery('a.cancel').attach(CancelNewBehaviour);
      }
    });
    
    return false;
  }
});

/**
* Het sorteren van de parts.
* De parts kunnen worden gesorteerd door deze te slepen.
* Als de parts van positie worden veranderd wordt dit direct mbv ajax opgeslagen.
*/
var SortableBehaviour = $.klass({
  initialize: function () {
    this.element.sortable({
      axis:'y'
    , handle:'.top'
    , items:'> div'
    , delay:100
    }); 
    
    var element = this.element;
    
    this.element.bind("sortupdate", function(event, ui) {
      jQuery.ajax({
        data:jQuery(this).sortable('serialize',{key:'parts'}) + '&authenticity_token=' + encodeURIComponent('Ne5rpMr6eT+ArNiQWit6/RGSay7zMwXdaQa3vglIQPc=')
      , dataType:'script'
      , type:'POST'
      , url:'/parts/sort'
      , complete: function () {          
        }
      });
    });
    
    this.element.bind("sortstop", function (event, ui) {
      element.sortable({
        axis:'y'
      , handle:'.top'
      , items:'> div'
      , delay:100
      });
      
    });
  }
});

var SubmitBehaviour = $.klass({
  onclick: function () {
    this.element.parents("form").submit();
  }
});

/**
* Het creeen van een content part (met Ajax). 
* Wordt alleen gebruikt voor het aanmaken van films en tekst parts.
*/
var SubmitNewBehaviour = $.klass({
  onclick: function () {
    tinyMCE.triggerSave();
    
    var form = this.element.parents("form").get(0);
    jQuery.ajax({
      type    : "POST",
      url     : form.action,
      data    : this.element.parents("form").serialize(),
      success : function (html_content) {
        tinyMCE.execCommand('mceRemoveControl', false, "textarea");
        jQuery("#new_part").html("").hide();
        
        //jQuery("#parts").append(html_content);
        jQuery("#parts").prepend(html_content);
        
        //-- edit behaviour
        jQuery('a.edit').unbind().attach(EditBehaviour);
        jQuery('a.edit_title').unbind().attach(EditTitleBehaviour);
        //-- delete behaviour
        jQuery('a.deletetext').unbind().attach(DeleteImageBehaviour);
        jQuery('a.deleteimage').unbind().attach(DeleteMovieBehaviour);
        jQuery('a.deletemovie').unbind().attach(DeleteTextBehaviour);
      }
    });
    
    return false;
  }
});

/**
* Opslaan van de gemaakte wijzigingen aan een content part.
*/
var SubmitUpdateBehaviour = $.klass({
  onclick: function () {
    var form = this.element.parents("form").get(0);
    var id = form.id.match(/[\d\.]+/g).join("");
    
    tinyMCE.triggerSave();
    
    jQuery.ajax({
      type    : "PUT",
      url     : form.action,
      data    : this.element.parents("form").serialize(),
      success : function (html_content) {
        tinyMCE.execCommand('mceRemoveControl', false, "textarea_" + id);
        
        jQuery('#part_' + id).outerHTML(html_content);
        
        jQuery('#part_' + id + ' a.edit').ready(function() {
          jQuery('#part_' + id + ' a.edit').attach(EditBehaviour);
        });
      }
    });
  }
});

/**
* Opslaan van de gemaakte wijzigingen aan de titel van een tekst part.
*/
var SubmitUpdateTitleBehaviour = $.klass({
  onclick: function () {
    var form = this.element.parents("form").get(0);
    var id = form.id.match(/[\d\.]+/g).join("");
    jQuery.ajax({
      type    : "PUT",
      url     : form.action,
      data    : this.element.parents("form").serialize(),
      success : function (html_content) {
        jQuery("#edit_for_title_" + id).hide().html("");
        
        var title = html_content == "" ? "Geen titel ingevoerd" : html_content;
        jQuery("#title_content_" + id).html(title + "&nbsp;");
        jQuery("#title_menu_" + id).show();
        jQuery("#title_" + id).show();
      }
    });
  }
})

/**
* Aan een textarea de tekseditor mogelijkheden geven van tinyMCE.
*/
var TinyMCEBehaviour = $.klass({
  initialize: function () {
    tinyMCE.execCommand('mceAddControl', false, this.element.get(0).id);
  }
});

/**
* Toon en verberg de absoluut gepositioneerde 
* divs met uitleg op de homepage.
*/
var ToggleExplanationBehaviour = $.klass({
  onclick: function () {
    jQuery('.uitleg').toggle();
    
    this.element.siblings("li").show();
    this.element.hide();
    
    return false;
  }
});