/*
  Copyright (c) 2006-2007, ePages GmbH
  All Rights Reserved.

  epages.cartridges.de_epages.mediagallery.widget.Toolmediagallery $Revision: 1.51 $

*/
dojo.provide("epages.cartridges.de_epages.mediagallery.widget.Toolmediagallery");
dojo.require('epages.widget.LocalizedWidget');
dojo.require("epages.browser");
dojo.require("epages.html.element");

dojo.declare(
  "epages.cartridges.de_epages.mediagallery.widget.Toolmediagallery",
  [epages.widget.LocalizedWidget],
  {
    /**
     * public properties
     */
    attributeName   : '',                    // String - Attribute name (still in use???)
    storeRoot       : epages.vars.StoreRoot, // String - epages StoreRoot e.g. /WebRoot/Store
    siteId          : epages.vars.SiteID,    // String - Site id
    url             : '?',                   // String - request url
    isTinyMCE       : "false",               // Boolean - flag: use mediagalllery to insert into tinymce
    multiSelect     : "true",                // Boolean - media gallery option: enable multiselect
    onApply         : "",                    // Function - media gallery option: apply function
    applyButtonLabel: "",                    // String - media gallery option: label text for apply button
    validFileTypes  : "",                    // String - media gallery option: filter file extension list - show only these
    opener          : '',         // String - flag to define where it is opend from , passed to mediagallery

    /**
     * constants
     */
    MEDIAGALLERY_OFFSET_X: 130,              // [const] Integer - X Offset (still in use???)
    MEDIAGALLERY_OFFSET_Y: 130,              // [const] Integer - Y Offset (still in use???)

    /**
     * private properties
     */
    templateType       : "standard",         // String - seleced template
    defaultTemplateType: "standard",         // [readonly] String - default template
    templatePath       : dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/Toolmediagallery.html'),  // String - template path + filename
    translationName    : dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/translation'),            // String - translation path + filename (without file extension)
    _templateMapping : {
      'standard'  : {templatePath: dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/Toolmediagallery.html')},
      'icon'      : {templatePath: dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/ToolmediagalleryIcon.html')},
      'button'    : {templatePath: dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/ToolmediagalleryButton.html')},
      'invisible' : {templatePath: dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget', 'templates/ToolmediagalleryInvisible.html')}
    },                                       // [protected] Object - hash which associates templateType key with template filename
    _tinyMceSelection   : undefined,         // [protected] TinyMceSelection - current selection in tiny mce editor
    /**
     * widget properties
     */
    imagePath       : dojo.moduleUrl('dijit', 'themes/epages/images'),  // String - image path

    postMixInProperties: function(){
    // summary: initialize values
      this._templateDirectory = dojo.moduleUrl('epages.cartridges.de_epages.mediagallery.widget' , 'templates');

      // toolmediagallery as tiny mce button
      this.isTinyMCE = (this.isTinyMCE == 'true' || this.isTinyMCE == '1');
      this.inherited("postMixInProperties", arguments);
    },

    postCreate  : function() {
    // summary: initialize values / adjust nodes
      this.inherited("postCreate", arguments);
      // tinymce button display settings
      if(this.isTinyMCE && this.imageNode){
        this.imageNode.style.margin="2px";
      }

      this._appendEvents();
    },

    /**
     * private methods
     */

    _appendEvents: function() {
      // summary: open gallery
      // tags: callback

      var self = this;
      jQuery.ready({
        plugin:"de_epages.mediagallery.ui.filemanagerdialog",
        DOM: true
      }, function($){
        var backImageLink = (self.inputNode !== undefined) ? de_epages($(self.domNode).find("span.Button")) : de_epages(self.domNode),

            changeImage = function(selectedFile){
            	self.onApply("MediaGallery" + selectedFile.get("path"));
            };

        backImageLink.mediagalleryUiFilemanagerdialog({
          dialog: {
            buttons: {
              Ok: {click: function(){
                  var item = backImageLink.mediagalleryUiFilemanagerdialog("getSelectedElements")[0];

                  if(item){
                    if(item.get("metadata").type !== "MediaGallery"){
                      ep.ajax({
                        dataType: "json",
                        type : "POST",
                        data : {
                          ChangeAction : "JSONCopyImageFromImageDb",
                          StyleID: epConfig.objectId,
                          ObjectID : epConfig.siteId,
                          SourceFile : item.get("fullpath"),
                          TargetDirectory : "",
                          ViewAction : 'JSONViewResponse'
                        }
                      })
                      .done(function( jsonData, statusText, jqXHR ){
                        item.set({path: jsonData.Files[0].path});
                        changeImage(item);
                      });
                    }
                    else{
                      changeImage(item);
                    }
                  }

                  ep(this).uiDialog("close");
                }
              },
              Cancel:{
                click: function(){
                  ep(this).uiDialog("close");
                }
              }
            },
            close: function(){
              backImageLink.mediagalleryUiFilemanagerdialog("resetFilemanager");
            }
          },
          filemanager: {
            currentFolder: "BackgroundImages",
            selectable: "image/jpe,image/jpg,image/jpeg,image/gif,image/png"
          }
        });
      });
    },

    setFileTypes: function(/* String */ fileTypes) {
      // summary: updates the list of allowed file extensions

      if(typeof(fileTypes) === "string" && (this.validFileTypes != fileTypes)) {
        this.validFileTypes = fileTypes;
        var MediaGallery = $$('MediaGallery');
        if(MediaGallery !== undefined) {
          MediaGallery.setFileTypes(this.validFileTypes);
        }
      }
    },

    openDialog: function(/*Event*/evt) {
      // summary: Show MediaGallery
      // description: Calls show() of the mediagallery widget (widgetId=MediaGallery)

      if(!this.isMediaSelected && !this.isImageSelected) {
        var MediaGallery = $$('MediaGallery');
        // set onApply function
        var onApply = '';
        if(this.onApply != "") {
          onApply=this.onApply;
        } else if (this.isTinyMCE) {
          var me = this;
          onApply= function(selected) {
            var generatedHtml="";
            $A(selected).each(function (el) {
              generatedHtml+=me.mceGenerateContent(el)+'<br />';
            });
            me.mceInsertContent(generatedHtml);
          };
        }
        if(MediaGallery === undefined) {
          epages.require('ep_shop_tree','dijit.Tree');
          epages.require('ep_shop_upload','epages.uploader');
          epages.require('ep_mediagallery', 'epages.cartridges.de_epages.mediagallery.widget.Mediagallery');
          MediaGallery = new epages.cartridges.de_epages.mediagallery.widget.Mediagallery({
            id:               'MediaGallery',
            siteId:           this.siteId,
            url:              this.url,
            applyButtonLabel: this.applyButtonLabel,
            multiSelect:      this.multiSelect,
            validFileTypes:   this.validFileTypes,
            onApply:          onApply,
            opener:           this.opener
          });

          document.getElementsByTagName("body")[0].appendChild(MediaGallery.domNode);
        } else {
          MediaGallery.setOnApply(onApply);
        }
        MediaGallery.changeOpener(this.opener);
        MediaGallery.show();
      }
    },

    mceGenerateContent: function(el) {
    // summary:
    //      generates the tiny mce code (mimetype dependent)
    // el: epages.cartridges.de_epages.mediagallery.widget.Filelistitem
    //      selected file list item
    // tags:
    //      protected
      epages.require('ep_mediagallery', 'epages.cartridges.de_epages.mediagallery.Mimetypehtml');
      var html= getHtmlByMimeType(el.mimetype, {src: el.fullpath, name: el.fileName}, true);
      return html;
    },

    mceInsertContent: function (/* String */ html) {
    // summary:
    //      insert code into tiny mce
    // html:
    //      this html code will be inserted into tiny mce
    // tags:
    //      protected
      if(tinyMCE && tinyMCE.activeEditor){
        tinyMCE.activeEditor.selection.moveToBookmark(tinymce.WindowManager.bookmark);
        tinyMCE.activeEditor.execCommand('mceInsertContent', false, html);
      }
    }

  }
);