var App = new Class({
	Implements: [Options, Events]
	, options: {
		
	}
	// , Binds: []
	, initialize:function(options) {
		this.setOptions(options);
// mm.log('App init');		
// mm.log(document.location.protocol);
		this.controller = false;
		this.page = false;
		this.setupEvents();
	}
	, setupEvents:function() {

mm.log(mm.runtime);
		if (mm.runtime) {
			if (mm.runtime.controller != undefined) {
				this.controller = mm.runtime.controller;
				if (mm.runtime.page != undefined) {
					this.page = mm.runtime.page;
				}
				this.switchController();
				
			}
		}
		this.setupAdminDialogLinks();
	}
	, switchController:function(){ 
		switch(this.controller) {

			case 'Controller_Admin' :
				this.adminEditor();

				
				if(this.page == 'page'){
					this.adminPage();
				}
				if(this.page == 'page_index'){
					this.pageOverview();
					this.pageSort();
					this.switchPageVisible();
					this.pageDelete();
				}
				if(this.page == 'agenda_index'){
					this.agendaOverview();	
					this.agendaDelete();
				}
				if(this.page == 'documents_index'){
					this.documentsOverview();	
					this.documentDelete();
				}
				if(this.page == 'images_index'){
					this.imagesOverview();
					this.imageDelete();
					this.imageEditTitle();
				}
				if(this.page == 'users_index'){
					this.usersOverview();
					this.userDelete();
					this.userEditEmail();
				}
				if(this.page == 'news_index'){
					this.newsOverview();
					this.newsDelete();
				}
				if(this.page == 'settings'){
					this.settings();
				}
				if(this.page == 'team'){
					this.team();
					this.teamSort();
				}
				if(this.page == 'albums'){
					this.albums();
				
				}
				if(this.page == 'album'){
					this.album();
				}
			break;
		}
	}

	, adminEditor: function() {
		// initialize all admin related stuff
		var editor = document.id('mmTextEditor');

		// editor.mooEditable();
		if (editor) {
			new MooEditable(editor, { 
				toolbar: true,
				cleanup: true,
				paragraphise: true,
				xhtml : true,
				semantics : true,
						// urlimage | createlink
				actions: 'bold italic underline strikethrough | formatBlock | mmurlimage | mmurldocument mmcreatelink  unlink | justifyleft justifyright justifycenter justifyfull | insertunorderedlist insertorderedlist indent outdent | undo redo | toggleview ',
				handleSubmit: true,
				handleLabel: true,
				disabled: false,
				baseCSS: 'html{ height: 100%; cursor: text; } body{ font-family: sans-serif; background-color:#fff;}',
				extraCSS: '',
				externalCSS: '',
				html: '<!DOCTYPE html><html><head><meta charset="UTF-8">{BASEHREF}<style>{BASECSS} {EXTRACSS}</style>{EXTERNALCSS}</head><body></body></html>',
				rootElement: 'p',
				baseURL: '',
				dimensions: null			
			});
		}
		
	}
	
	, switchAdminPage:function(){
		switch(this.page){
			case 'companies' :
				this.quickSearch();
			break;
		}
	}
	, setupAdminDialogLinks:function() {	
		var ajaxDialogLinks = document.body.getElements('a.mmAjaxDialog');
		if (ajaxDialogLinks.length > 0) {
			ajaxDialogLinks.each(function(link) {
				var href = link.get('href');
				if (href.charAt(0)=='/'){ href = href.substr(1,href.length); }					
				var dialog = new mmDialog.Ajax(href);				
				link.store('ajaxDialog', dialog);
				
				dialog.addEvent('initialized', function(container) {
					this.initDialogDefault(href, container, dialog);
				}.bind(this));
				
				dialog.addEvent('submit', function(data) {
// mm.log('submit event van dialog '+href+' data = ');
// mm.log(data);				
					this.submitDialogDefault(href, data);
				}.bind(this));

				link.addEvent('click', function(e) {
					e.preventDefault();
					var dialog = link.retrieve('ajaxDialog');
					var extradata = link.get('data-dialog');
					var xd = {};
					if (extradata != undefined && extradata != null) {
						var xd = JSON.decode(extradata);
					}					
					if (dialog) { dialog.openDialog(xd); }
				});
				
			},this);
		}
	}
	, initDialogDefault: function(dialogType, container, dialog) {
		switch(dialogType) {
			case 'company':
				// this.initDialogCompanyAdd(container);
			break;
			case 'task_add':
				this.initDialogTask(container);
			break;
			case 'contact':
				//
			break;
			case 'images_add':
				this.initUploadDialog(container, dialog);
			break;
			case 'member_add':
				this.initMemberDialog(container, dialog);
			break;
		}
	}
	, submitDialogDefault: function(dialogType, data) {
mm.log(data);	
		var submitDialogRequest = new Request.JSON({
			url: mm.runtime.site_url+'ajax/save/'+dialogType
			, method: 'post'
			, data: data
			, onSuccess: function(rJson, rText) {
mm.log(rJson);				
				if (rJson.success) {
					this.handleSaveRequest(rJson, dialogType);				
				} else {
					mm.alert('an error occured saving your data');
				}
			}.bind(this)
			, onFailure: function() {
				mm.alert('error requesting');
			}.bind(this)
		}).send();
	
		switch(dialogType) {
			
			case 'company':
				//
			break;
			case 'task_add':
				// 
			break;
			case 'contact_add':
				this.initContact();
			break;
			case 'contact':
				//
			break;
		}
	}
	, handleSaveRequest:function(rJson, saveType) {
mm.log(rJson);
		switch(saveType) {
			case 'album_add':

					window.location.href = window.location.href;

			break;
		}
	}
	, initAdmin: function() {
		
	}
	// , initDialogCompanyAdd: function(container) {
	// 		var i_name = container.getElement('#name');
	// 		if (i_name) {
	// 			i_name.addEvent('blur', function() {
	// 				// alert('hoi');
	// 			});
	// 		}
	// 			
	// 	}
	, initDialogAddPage: function(dialog) {
		var page_form = dialog.getElement('#page_add_form');
		var i_url = page_form.getElement('#url');
		var i_name = page_form.getElement('#name');
		var i_pagetype = page_form.getElement('#pagetype');
		var i_is_visible = page_form.getElement('#is_visible');
		var url_preview = page_form.getElement('#url_preview');
		var url_preview_page = page_form.getElement('#url_preview_page');	
		var url_available_url = mm.runtime.site_url+'ajax/page_url_available';				
		this.checkUrlAvailableRequest = new Request.JSON({
			url: url_available_url
			, data: {}
			, method: 'post'
			, onSuccess: function(rJson,rText) {
mm.log(rJson);				
				if (rJson && rJson.success) {
					if (rJson.available == undefined || !rJson.available) {
						i_url.addClass('validation-failed');
						mm.alert('This url is already in use by another item, please choose a different one');
						// i_url.focus();
					} else {
						i_url.removeClass('validation-failed');						
					}
				}
			}
		});	
		
		i_pagetype.addEvent('change', function(e) {
			if (i_pagetype.get('value') != 'page') {
				url_preview.hide();
			} else {
				url_preview.show('inline');
			}
		});
		
		i_is_visible.addEvent('change', function(e) {
			if (i_is_visible.get('value') == 0) {
				i_name.set('disabled', true);
			} else {
				i_name.set('disabled', false);
			}
		});
		
		i_url.addEvents({
			'keyup': function(e) {
				if (i_pagetype.get('value') == 'page') {
					var val = i_url.get('value');
					val = val.cleanUri().toLowerCase();
					url_preview_page.set('text', val);
				}
			}.bind(this)
			, 'blur' : function(e) {
				if (i_pagetype.get('value') == 'page') {
					var val = i_url.get('value');
					val = val.cleanUri().toLowerCase();
					url_preview_page.set('text', val);
					i_url.set('value',val);	
					this.checkUrlAvailableRequest.send({data: {url: val}});				
				}
			}.bind(this)
		});
	}
	
	// page add & page edit
	, adminPage: function(){
		this.switchSelectMainMenu();
	}
	
	, switchSelectMainMenu: function(){
		var form = document.id('form');
		var sortMenuPage = document.id('sortMenuPage');
		
		
		if(form && sortMenuPage){
			form.addEvent('click:relay(input[type=radio])', function(e,el){
				
				var mid	 = el.get('value');
				
				if(mid){
					var getMenuRequest = new Request.JSON({
						url: mm.runtime.site_url+'ajax/getMainMenu'	
						,method:'post'
						,onSuccess: function(rJson, rText){
							if(rJson.success){
								sortMenuPage.empty();

								// if(rJson.mainmenu != undefined && rJson.mainmenu != null && rJson.mainmenu.length > 0){
									var o = new Element('option', {
										value: 0
										, text: 'Plaatsen in hoofdmenu'
									});
									o.inject(sortMenuPage, 'bottom');

									rJson.mainmenu.each(function(item){
										var o = new Element('option', {
											value: item.id
											, text: item.name
										});
										o.inject(sortMenuPage, 'bottom');
									});

								// }
								sortMenuPage.set('value', 0).fireEvent('change');
							}
						}
					});

					var data = {
						mid : mid
					};
					getMenuRequest.send({data:data});
				}
				
			});
		}
	}
	
	////////////////////////////////////////////////////////
	// 	PAGES
	////////////////////////////////////////////////////////
	,pageSort: function(){
		var container = document.id('container');

		container.addEvent('click:relay(a.sort)', function(e,el){
			e.preventDefault();

			var sort = el.get('data-sort');
			var id = el.get('data-id');
			var pid = el.get('data-pid');
			var mid = el.get('data-mid');
			
			var pageSortRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/page_sort'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.pageOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
				, mid : mid
				, sort : sort
				, pid : pid
			};
			pageSortRequest.send({data:data});
			
		}.bind(this));
	}
	
	
	,pageOverview: function(){
		var container = document.id('pages_overview_container');
		
		if(container){
			
			var pageOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/page_overview'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			pageOverviewRequest.send();
		}
	}
	
	,pageDelete: function(){
		var container = document.id('container');

		container.addEvent('click:relay(a.deletePage)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			
			var deletePageRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/page_delete'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.pageOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
			};
			deletePageRequest.send({data:data});
			
		}.bind(this));
	}
	
	,switchPageVisible: function(){
		var container = document.id('container');

		container.addEvent('click:relay(a.pageVisible)', function(e,el){
			e.preventDefault();

			var visible = el.get('data-visible');
			var id = el.get('data-id');
			
			var switchPageVisibleRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/page_switch_visible'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.pageOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
				, visible : visible
			};
			switchPageVisibleRequest.send({data:data});
			
		}.bind(this));

	}
	
	
	
	////////////////////////////////////////////////////////
	// 	AGENDA
	////////////////////////////////////////////////////////
	,agendaOverview: function(){
		var container = document.id('agenda_overview_container');
		
		if(container){
			
			var agendaOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/agenda_overview'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			agendaOverviewRequest.send();
		}
	}
	
	,agendaDelete: function(){
		var container = document.id('agenda_overview_container');

		container.addEvent('click:relay(a.deleteAgenda)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			
			var deletePageRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/agenda_delete'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.agendaOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
			};
			deletePageRequest.send({data:data});
			
		}.bind(this));
	}
	
	
	
	
	////////////////////////////////////////////////////////
	// 	DOCUMENTS
	////////////////////////////////////////////////////////
	,documentsOverview: function(){
		var container = document.id('documents_overview_container');
		
		if(container){
			
			var agendaOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/documents_overview'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			agendaOverviewRequest.send();
		}
	}
	
	,documentDelete: function(){
		var container = document.id('documents_overview_container');

		container.addEvent('click:relay(a.deleteDocument)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			
			var deletePageRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/document_delete'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.documentsOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
			};
			deletePageRequest.send({data:data});
			
		}.bind(this));
	}
	
	
	////////////////////////////////////////////////////////
	// 	IMAGES
	////////////////////////////////////////////////////////	
	, imagesOverview: function(){
		var container = document.id('images_overview_container');
		
		if(container){
			
			var imagesOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/images_overview'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			imagesOverviewRequest.send();
		}		
	}
	
	,imageDelete: function(){
		var container = document.id('images_overview_container');

		container.addEvent('click:relay(a.deleteImage)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			var src = el.get('data-src');
			
			var deleteImageRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/image_delete'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.imagesOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
				,src : src
			};
			deleteImageRequest.send({data:data});
			
		}.bind(this));
	}
	
	,imageEditTitle: function(){
		var container = document.id('images_overview_container');

		container.addEvent('click:relay(a.editImageTitle)', function(e,el){
			e.preventDefault();
			
			var id = el.get('data-id');
			
			var row = el.getParent('div').getParent('div');
			
			var title = row.getElement('span.title');
			var input = row.getElement('input');


			this.editTitleRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/image_edit_title'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						input.set('value', rJson.title);
						input.hide();
						title.set('text', rJson.title);
						title.show();	
					}
				}
			});
			
				
			if(title && input){
				title.hide();	
				input.show();
				input.focus();
				
				
				input.addEvent('blur', function(e){
					
					var new_title = input.get('value');
					var org_title = title.get('text');
					
					if(new_title == org_title || new_title == ''){
						title.show();	
						input.set('value', org_title);
						input.hide();
											
					}else{
						
						var data = {
							'id' : id
							,'title' : new_title
						};	
						this.editTitleRequest.send({data:data});
					}
					
				}.bind(this)); // BLUR
			}

		}.bind(this));
	}
	
	
	
	
	
	////////////////////////////////////////////////////////
	// 	USERS
	////////////////////////////////////////////////////////	
	, usersOverview: function(){
		var container = document.id('users_overview_container');
		
		if(container){
			
			var usersOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/users_overview'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			usersOverviewRequest.send();
		}		
	}
	
	,userDelete: function(){
		var container = document.id('users_overview_container');

		container.addEvent('click:relay(a.deleteUser)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			
			var deleteUserRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/user_delete'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.usersOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
			};
			deleteUserRequest.send({data:data});
			
		}.bind(this));
	}	
	
	,userEditEmail: function(){
		var container = document.id('users_overview_container');

		container.addEvent('click:relay(a.userEditEmail)', function(e,el){
			e.preventDefault();
			
			var id = el.get('data-id');
			
			var row = el.getParent('div').getParent('div');
			
			var email = row.getElement('span.email');
			var input = row.getElement('input');


			this.editEmailRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/user_edit_title'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						input.set('value', rJson.email);
						input.hide();
						email.set('text', rJson.email);
						email.show();	
					}
				}
			});
			
			if(email && input){
				email.hide();	
				input.show();
				input.focus();
				
				
				input.addEvent('blur', function(e){
					
					var new_email = input.get('value');
					var org_email = email.get('text');
					
					if(new_email == org_email || new_email == ''){
						email.show();	
						input.set('value', org_email);
						input.hide();
											
					}else{
						
						var data = {
							'id' : id
							,'email' : new_email
						};	
						this.editEmailRequest.send({data:data});
					}
					
				}.bind(this)); // BLUR
			}

		}.bind(this));
	}
	
	
	
	
	
	
	////////////////////////////////////////////////////////
	// 	NEWS
	////////////////////////////////////////////////////////	
	, newsOverview: function(){
		var container = document.id('news_overview_container');
		
		if(container){
			
			var usersOverviewRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/news_overview'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						container.set('html', rJson.html);
						
					}
				}.bind(this)
			});

			usersOverviewRequest.send();
		}		
	}
	
	,newsDelete: function(){
		var container = document.id('news_overview_container');

		container.addEvent('click:relay(a.deleteNews)', function(e,el){
			e.preventDefault();

			var id = el.get('data-id');
			
			var deleteNewsRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/news_delete'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						this.newsOverview();
					}
				}.bind(this)
			});

			var data = {
				id : id
			};
			deleteNewsRequest.send({data:data});
			
		}.bind(this));
	}
	



	, settings:function(){
		var banners = document.id('banners');

		banners.addEvent('click:relay(a.deleteBanner)', function(e,el){
			e.preventDefault();

			var folder = el.get('data-delete-folder');
			var img = el.get('data-delete-img');
			
			var deleteBannerRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_banner'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}else{
					 
					}
				}.bind(this)
			});

			var data = {
				folder : folder
				,img : img
			};
			deleteBannerRequest.send({data:data});
			
		}.bind(this));
		
		
		
		// SPONSORS
		var sponsors = document.id('sponsors');
		
		sponsors.addEvent('click:relay(a.deleteSponsor)', function(e,el){
			e.preventDefault();

			var sponsor = el.get('data-delete-sponsor');

			
			var deleteSponsorRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_sponsor'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}else{
					 
					}
				}.bind(this)
			});

			var data = {
				sponsor : sponsor
			};
			deleteSponsorRequest.send({data:data});
			
		}.bind(this));
	}
	
	
	
	, team:function(){
		var teams = document.id('teams');
		
		teams.addEvent('click:relay(a.deleteTeam)', function(e,el){
			e.preventDefault();

			var team = el.get('data-team-id');

			
			var deleteTeamRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_team'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}else{
					 
					}
				}.bind(this)
			});

			var data = {
				team : team
			};
			deleteTeamRequest.send({data:data});
			
		}.bind(this));
		
		
		
		teams.addEvent('click:relay(a.deleteMember)', function(e,el){
			e.preventDefault();

			var member = el.get('data-member-id');

			
			var deleteMemberRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_member'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}else{
					 
					}
				}.bind(this)
			});

			var data = {
				member : member
			};
			deleteMemberRequest.send({data:data});
			
		}.bind(this));
	}
	
	
	,teamSort: function(){
		var container = document.id('teams');

		container.addEvent('click:relay(a.sort)', function(e,el){
			e.preventDefault();

			var sort = el.get('data-sort');
			var id = el.get('data-id');
			
			var teamSortRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/team_sort'	
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						// this.pageOverview();
						window.location.href = window.location.href;
					}
				}.bind(this)
			});

			var data = {
				id : id
				, sort : sort
			};
			teamSortRequest.send({data:data});
			
		}.bind(this));
	}
	
	, albums: function(){
		var albums = document.id('albums');
		
		albums.addEvent('click:relay(a.deleteAlbum)', function(e,el){
			e.preventDefault();

			var album = el.get('data-album-id');
			
			var deleteAlbumRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_album'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}
				}.bind(this)
			});

			var data = {
				album : album
			};
			deleteAlbumRequest.send({data:data});
			
		}.bind(this));
	}
	
	, album: function(){
		var album = document.id('album');
		
		album.addEvent('click:relay(a.deletePicture)', function(e,el){
			e.preventDefault();

			var picture = el.get('data-delete-picture');

			
			var deletePictureRequest = new Request.JSON({
				url: mm.runtime.site_url+'ajax/delete_picture'
				,method:'post'
				,onSuccess: function(rJson, rText){
					if(rJson.success){
						window.location.href = window.location.href;
					}else{
					 
					}
				}.bind(this)
			});

			var data = {
				picture : picture
			};
			deletePictureRequest.send({data:data});
			
		}.bind(this));		
	}







	, initUploadDialog:function(container, dialog) {
		var form = container.getElement('#uploadForm');
		if (form) {
			this.uploadDialog = dialog;
			var iFrameForm = new iFrameFormRequest(form, {
				onComplete: function(response) {
					// alert(response);
					
				}
			});
		}
	}
	, initMemberDialog:function(container, dialog) {
		var form = container.getElement('#uploadForm');
		if (form) {
			this.uploadDialog = dialog;
			var iFrameForm = new iFrameFormRequest(form, {
				onComplete: function(response) {
					// alert(response);
					
				}
			});
		}
	}
	
	, uploadComplete:function(success) {
		if (success) {
			alert('gelukt');
			this.uploadDialog.close();
		} else {
			alert('mislukt');
		}
	}
	
});

// window.addEvent('domready', function(){
// 
// });
