// We define a custom event called "keyenter" which is based on the keyup event
Element.Events.keyenter = {
	base: 'keyup',
	condition: function(e){
		// We can basically put any logic here.
		// In this example we return true, when the pressed key is the
		// Enter-Button so the keyenter event gets fired.
		return e.key=='enter';
	}
};
  
var toggle = function(element) {
  display = element.getStyle('display');
  if (display == "none") {
    element.setStyle('display', 'block');
    //element.setProperty('style','display: block;');
  } else {
    element.setStyle('display', 'none');
    //element.setProperty('style','display: none;');
  }
}

var use_subdomain = function(url) {
  host = location.host;
  subdomain = host.substring(0,host.indexOf('.'));
  rest = host.substring(host.indexOf('.') + 1);
  if (subdomain && subdomain != "") {
    if (subdomain == "mijn" || subdomain == "collectie" || subdomain == "arttube") {
      newurl = url.replace('/' + subdomain,'');
      newurl = newurl.replace('/en','');
      newurl = newurl.replace('/nl','');
      newlocation = location.protocol + '//' + location.host + newurl;
      return newlocation;
    } else {
      return url;
    }
  } else {
      return url;
    }
}

var Application = new Class({
    Implements: [Events, Options],
    options: {
		playerOptions: null,
		pageToolsFoldout: null
    },
    
    initialize: function(options) {
        this.setOptions(options);
        window.addEvent('domready', function() {
           this.onDomReady();
        }.bind(this));
    },
    
    onDomReady: function() {
        this.setupDraggableToolbox();
        this.setupFavoriteButtons();
        this.setupAllNoneCheckboxes();
        this.setupMultiAddFolders();
        this.setupPublicPrivateToggleFolder();
        this.setupCreateNewFolder();
        this.setupDeleteObjects();
        this.setupDeleteFolders();
        this.setupDeleteSingleFolderIcon();
        this.setupObjectDetailsBox();
        this.setupSaveObject();
        this.setupDeleteSingleObjectIcon();
        this.setupEditNoteForm();
        this.autoTriggerPrint();
    },
    
    autoTriggerPrint: function() {
        if($(document.body).hasClass('print')) {
            print();
        }
    },
    
    setupDraggableToolbox: function(){
        //lekker hard coded en een beetje vies, want ik ga er vanuit dat de site-toolbox altijd bestaat
        if($('site-toolbox')) {
            if($('id_username')) {
                $('id_username').addEvent('click', function(e) {
                    this.focus();
                    e.stop(); 
                });
                $('id_password').addEvent('click', function(e) {
                    this.focus();
                    e.stop(); 
                });
            }
            
            
            var el = $('site-toolbox');
            //el.setStyle('display','block');
            var marginLeft = Cookie.read('toolboxMarginLeft');
            if (marginLeft){
                if (el) {
                  el.setStyle('marginLeft',marginLeft);
                }
            }
            var styleTop = Cookie.read('toolboxTop');
            if (styleTop){
                if (el) {
                  el.setStyle('top',styleTop);
                }
            }
            
            var close = $('close-mijn');
            var open = $('nav-login');

            //el.setStyle('display','block');
            if(close) {
                close.addEvent('click', function(e) {
                    $(el).setStyle('display', 'none');
                    var cookie = Cookie.write('mijnClosed', 'yes', {duration: 100, path: '/'});
                });
            }
        
            if(open) {
                open.addEvent('click', function(e) {
                    $(el).setStyle('display', 'block');
                    $(el).setStyle('top', 100);
                    $(el).setStyle('margin-left', -300);
                    var cookie = Cookie.write('mijnClosed', 'no', {duration: 100, path: '/'});
                });
            }


            var closed = Cookie.read('mijnClosed');
            if(closed != 'no') {
                $(el).setStyle('display', 'none');
            }

            var drag = new Drag('site-toolbox', {
                snap: 0,
                onSnap: function(el){
                    el.addClass('dragging');
                    el.setStyle('z-index', '300');
                },
                onComplete: function(el){
                    var duration = 100;
                    el.removeClass('dragging');
                    var cookie = Cookie.write('toolboxMarginLeft',el.getStyle('marginLeft'),{duration: duration, path: '/'});
                    var cookie = Cookie.write('toolboxTop',el.getStyle('top'),{duration: duration, path: '/'});
                },
                modifiers: {x: 'marginLeft', y: 'top'}
            });
        };
    },

    setupEditNoteForm: function(){
        var form = $('edit-folder-note-form');
        if (!form) {
          return;
        }
        //on setup let's hid the form
        //form.setProperty('style','display: none;');
        form.setStyle('display', 'none');
        if (!form) {
          return;
        }

        var editlink = $('edit-folder-note-link');
        editlink.addEvent('click', function() {
            toggle(form);
        });

        var submitb = form.getElement('input[type=submit]');
        var submitted = function() {
          form.send();
          form.set('html',"Saved successfully");
          //success refresh the page
          //window.location.reload();
          return false;
        }
        submitb.addEvent('click',submitted );

    },

 
    setupSaveObject: function(){
        var form = $('save-object-form');
        if (!form) {
          return;
        }
        var submitb = $('save-object-submit');
        var submitted = function() {
          form.send();

          //form.set('html',"Saved successfully");
          $('object-details-box').set('html', '');
          $('object-details-box').setAttribute('style', 'display:none');
          return false;
        }
        submitb.addEvent('click',submitted );
    },

    setupPublicPrivateToggleFolder: function(){
        var pub = $$('#folder-sharing-public');
        var priv = $$('#folder-sharing-private');
        var publicurl = $$('#public-url');
        var flag = -1;
        var folder_name = "";
        pub.addEvent('click', function(){
          flag = 1;
	      folder_name = pub.getProperty('value');
          var accessChange = new Request({url: use_subdomain('/mijn/access/'+ folder_name + '/') ,
                                        method: 'post',
                                        data: 'access=' + flag,
                                        onSuccess: function (txt,xml){
                                            var response = JSON.decode(txt);
                                            publicurl.setProperty('style','display: inline;');
                                        }
          }).send({method: 'post', data:'access=' + flag});
        });
        priv.addEvent('click', function(){
          flag = 0;
          folder_name = priv.getProperty('value');
          var accessChange = new Request({url: use_subdomain('/mijn/access/'+ folder_name + '/') ,
                                        method: 'post',
                                        data: 'access=' + flag,
                                        onSuccess: function (txt,xml){
                                            var response = JSON.decode(txt);
                                            publicurl.setProperty('style','display: none;');
                                        }
          }).send({method: 'post', data:'access=' + flag});
        });
    },

    createNewFolderLogic: function(){
        var form = $('create-folder-form');
        if (!form) {
          return;
        }
        var submitb = $('create-folder-submit');
        $('close-me-link').addEvent('click', function(){
          //$('create-new-folder-drop-down').setProperty('style','display: none;');
          $('create-new-folder-drop-down').setStyle('display','none');
          return false;
        });
        var submitted = function() {
          //form.send();
          //form.set('html',"Saved successfully");
          //$('object-details-box').set('html', '');
          //$('object-details-box').setAttribute('style', 'display:none');
          folder_name_input = $('id_folder_name');
          folder_name = folder_name_input.getProperty('value');
          if($('id_description')) {
            description_input = $('id_description');
            var description = description_input.getProperty('value');
          } else {
            var description = '';
          }

          var createRequest = new Request({url: use_subdomain('/popup/create_folder/') ,
                                        method: 'post',
                                        data: 'folder_name=' + folder_name + '&description=' + description,
                                        onSuccess: function (txt,xml){
                                            var response = JSON.decode(txt);
                                            //alert('sent got response ' + response);
                                            //publicurl.setProperty('style','display: none;');
                                            if (response[0] == 'OK') {
                                              //success refresh the page
                                              window.location.reload();
                                            } else {
                                              //form errors, lets display them
                                              window.location.reload();
                                            }
                                        }
          }).send({method: 'post', data:'folder_name=' + folder_name + '&description=' + description});
          return false;
        }
        //submitb.addEvent('keyenter',submitted );
        //submitb.addEvent('click',submitted );
        form.addEvent('submit',submitted );
    },

    setupCreateNewFolder: function(){
        var createNewFolderLogic = this.createNewFolderLogic; 
        var link = $('create-new-folder');
        //this file is used by pages in which the checboxes are not present, in that case disable this code
        if (!link) {
          return;
        }
        var dropdown = $('create-new-folder-drop-down');
	    var href = link.getProperty('href');
        //dropdown.addEvent('mouseleave', function(){
        //  this.setProperty('style','display: none;');
        //});
        link.addEvent('click', function(){
          toggle(dropdown);
          // fill the drop down
          var getForm = new Request.HTML({url: href,
                                          onSuccess: function (tree,elements,html,js){
                                            dropdown.set('html',html);
                                            dropdown.setStyle('display', 'block');
                                            dropdown.setStyle('position', 'static');
                                            //create hook to close the box
                                            createNewFolderLogic();
                                            return false;
                                          }
          }).get();
          return false;
        });
    },

    setupMultiAddFolders: function(){
        var link = $('multi-add-to-folders');
        //this file is used by pages in which the checboxes are not present, in that case disable this code
        if (!link) {
          return;
        }
        var dropdown = $('add-to-folders-drop-down');
        var list = $$('input[id^="checkbox-"]');
	    var href = link.getProperty('href');
        if($(document.body).hasClass('lang-en')) {
            var lang = 'en';
        } else {
            var lang = 'nl';
        }
        href = href + '?lang='+lang+'&files=';
        //dropdown.addEvent('mouseleave', function(){
        //    this.setProperty('style','display: none;');
        //});
        link.addEvent('click', function(){

        var checked = false;
        list.each(function(el, i) {
            if(el.checked) {
                checked = true;
            }
        });

        if(!checked) {
            return false;
        }
          toggle(dropdown);
          //TODO: if list of checked files is empty
          //      show a popup asking the user to check some files first. 
          list.each(function(el, i) {
            // get the id of the file to delete
			id = el.getProperty('id').substring(9);
			object_type = el.getProperty('alt');
            object_type = object_type.replace(' ','_');
            //if the file is checked then we delete it
            if (el.checked) {
              folder_name_input = $$('input[id="folder-name-'+ id +'"]');
              folder_name = folder_name_input.getProperty('value');
              href = href + object_type + ':' +id+',';
            }
          }, this);
          //we follow the link after we enriched the url
	      link.setProperty('href',href);
          // fill the drop down
          var getForm = new Request.HTML({url: href,
                                          onSuccess: function (tree,elements,html,js){
                                            dropdown.set('html',html);
                                            return false;
                                          }
          }).get();
          return false;
        });
    },

    setupObjectDetailsBox: function(){
        var setupSaveObject = this.setupSaveObject; 
        var st = this.getScrollTop;
        var link = $$('.object-details-url');
        var box = $('object-details-box');
        link.addEvent('click', function(){
	      href = this.getProperty('href');
          //box.setProperty('style','display: block;');
          // fill the light box
          //box.setProperty('style', 'display: block; top: '  + (st() + 65) + 'px')
          box.setStyle('display', 'block');
          box.setStyle('top', (st() + 65) + 'px');
          var getForm = new Request.HTML({url: href,
                                          onSuccess: function (tree,elements,html,js){
                                            box.set('html',html);
                                            //create hook to close the box
                                            $$('.close-me-link').addEvent('click', function(){
                                              //box.setProperty('style','display: none;');
                                              box.setStyle('display', 'none');
                                              return false;
                                            });
                                            setupSaveObject();
                                            return false;
                                          }
          }).get();
          return false;
        });
    },

    getScrollTop: function (){
        if(typeof pageYOffset!= 'undefined'){
            //most browsers
            return pageYOffset;
        }
        else{
            var B= document.body; //IE 'quirks'
            var D= document.documentElement; //IE with doctype
            D= (D.clientHeight)? D: B;
            return D.scrollTop;
        }
    },

    setupDeleteFolders: function(){
        var link = $$('#delete-folders');
        var dropdown = $('delete-folders-drop-down');
        //this file is used by pages in which the checboxes are not present, in that case disable this code
        if (!dropdown) {
          return;
        }
	    var href = link.getProperty('href');
        //dropdown.addEvent('mouseleave', function(){
        //  this.setProperty('style','display: none;');
        //});
        link.addEvent('click', function(){
          toggle(dropdown);
          // fill the drop down
          var getForm = new Request.HTML({url: href,
                                          onSuccess: function (tree,elements,html,js){
                                            dropdown.set('html',html);
                                            return false;
                                          }
          }).get();
          return false;
        });
    },

    setupDeleteSingleObjectIcon: function(){
        var list = $$('a[id^="del-object-"]');
        list.addEvent('click', function(){
            //alert("are you sure you want to delete these x files?");
            id = this.getProperty('id').substring(11);
            object_type = this.getProperty('rel');
            object_type = object_type.replace(' ','_');
            folder_name_input = $$('input[id="folder-name-'+ id +'"]');
            folder_name = folder_name_input.getProperty('value');
            if(confirm('Are you sure you want to remove this object ?')) {
                var myRequest = new Request({url: use_subdomain('/mijn/del/'+ object_type + '/'+ id +'/'),
                                            method: 'post',
                                            data: 'folder_name=' + folder_name,
                                            onSuccess: function (txt,xml){
                                                var response = JSON.decode(txt);
                                                window.location.reload();
                                            }
                }).send({method: 'post', data:'folder_name=' + folder_name});
            }
            return false;
        });
    },

    setupDeleteSingleFolderIcon: function(){
        var list = $$('a[id^="del-folder-"]');
        list.addEvent('click', function(){
            //alert("are you sure you want to delete these x files?");
            folder_name = this.getProperty('id').substring(11);
            if(confirm('Are you sure you want to delete folder "' + folder_name + '" ?')) {
                var myRequest = new Request({url: use_subdomain('/mijn/del_single_folder/'),
                                            method: 'post',
                                            data: 'folder_name=' + folder_name,
                                            onSuccess: function (txt,xml){
                                                var response = JSON.decode(txt);
                                                window.location.replace(window.location.href);
                                            }
                }).send({method: 'post', data:'folder_name=' + folder_name});
            } 
            return false;
        });
    },

    setupDeleteObjects: function(){
        var button = $$('a[id^="delete-object"]');
        var list = $$('input[id^="checkbox-"]');
        button.addEvent('click', function(){
          //alert("are you sure you want to delete these x files?");
          list.each(function(el, i) {
            // get the id of the file to delete
			id = el.getProperty('id').substring(9);
			object_type = el.getProperty('alt');
            object_type = object_type.replace(' ','_');
            //if the file is checked then we delete it
            if (el.checked) {
              folder_name_input = $$('input[id="folder-name-'+ id +'"]');
              folder_name = folder_name_input.getProperty('value');
              if(confirm("You are about to delete multiple objects, are you really sure?")) {
                  var myRequest = new Request({url: use_subdomain('/mijn/del/'+ object_type + '/'+ id +'/'),
                                                method: 'post',
                                                data: 'folder_name=' + folder_name,
                                                onSuccess: function (txt,xml){
                                                    var response = JSON.decode(txt);
                                                    //alert('response' + response);
                                                }
                  }).send({method: 'post', data:'folder_name=' + folder_name});
              }
              //alert('will fire ajax req to ' + use_subdomain( '/mijn/del/' + object_type + '/' +id+'/') +' post:folder_name=' + folder_name);
            }
          }, this);
          return true;
          //reload the page to see changes
          //window.location.replace(window.location.href);
          //window.location.reload();
        });
    },

    setupAllNoneCheckboxes: function(){
        var list = $$('input[id^="checkbox-"]');
        var select_all = $$('a[id="select-all"]');
        var select_none = $$('a[id="select-none"]');
        select_all.addEvent('click', function(){
          //mark as cecked
          list.each(function(el, i) {
            //mark as cecked
            el.checked = true;
          }, this);
        });
        select_none.addEvent('click', function(){
          //mark as cecked
          list.each(function(el, i) {
            //uncheck
            el.checked = false;
          }, this);
        });
    },

    setupFavoriteButtons: function(){
        var list = $$('a[id^="button-favorite-"]');
		list.each(function(el, i) {
			id = el.getProperty('id').substring(16);
			el.addEvent('click', function(){
    			var myRequest = new Request({url: '/mark/video/'+id,
			    	                         method: 'post',
				                             data: 'action=mark',
				                             onSuccess: function (txt,xml){
    			                                 var response = JSON.decode(txt);
    				                             alert('I got an:' + response[0] + 'with details:' + response[1]);
    				                         }
    			}).send({method: 'post', data:'action=mark'});
    			return false;
            });
		}, this);
     },
	
	emptySetup: function(options){ }
});

//provide global reference
var myboijmans = new Application();

