var NetManagerFront = new Class({
								
	/* 
	 * Class NetManagerFront
	 * Holds all functions for the mailcampaign interface
	 * 
	 * @Author Orestis Molopodis / Martin van der Poel
	 * @Copyright Dytech Solutions VOF
	 */
	
    /* 
	 * Initialize function of mailcampaign class
	 * Setting up the framework and firing the default action
	 * @Author Martin van der Poel
	 * @Copyright Dytech Solutions VOF
	 */
    
	initialize: function() {
		
		// Cleanup Ajax request
		this.ajaxRequest = Class.empty;		
		
		this.formSent = false;
		this.formElement = null;
		this.fileUpload = null;
	},
	
	getAjax: function(url, onComplete, evalscripts) {
		
		var onCompleteAction = eval('this.' + onComplete + '.bind(this)');
		var ajaxFailure = this.ajaxFailure.bind(this);
		var ajaxOptions = {
			method: 		'get',
			evalScripts: 	evalscripts,
			onComplete: 	onCompleteAction, 
			onFailure: 		ajaxFailure
		};
		
		// Fire Ajax request
		this.ajaxRequest = new Ajax(url, ajaxOptions).request();
	},
	
	postAjax: function(url, onComplete, evalscripts) {
		
		var onCompleteAction = eval('this.' + onComplete + '.bind(this)');
		var ajaxFailure = this.ajaxFailure.bind(this);
		var ajaxOptions = {
			method: 		'post',
			evalScripts: 	evalscripts,
			onComplete: 	onCompleteAction, 
			onFailure: 		ajaxFailure
		};
		
		// Fire Ajax request
		this.ajaxRequest = new Ajax(url, ajaxOptions).request();
	},
	
	ajaxFailure: function() {
		
		this.main.setHTML('<p>Er is een probleem ontstaan bij het laden van de pagina. Probeer het nogmaals.</p>');
	},
	
	getForm: function(sFormName) {

		this.getAjax('/form/get/' + sFormName, 'renderForm', false);
	},
	
	renderForm: function(sResponse) {
		
		if (sResponse.test('<!DOCTYPE')) {
			
			document.location.href = '/redactie';
		}
		
		this.formElement = $('form_holder').getElement('form');
		
		$('form_holder').setHTML(sResponse);
		
		this.initCalendarButtons();
		
		this.initTextAreas($('form_holder'));
		
		//this.initFileUpload($('form_holder'));
	},
	
	renderOverview: function(sResponse) {
		
		$('form_holder').setHTML(sResponse);
		
		/*if (sResponse.test('<!DOCTYPE')) {
			document.location.href = '/redactie';
		} else {
			$('form_holder').setHTML(sResponse);
		}*/
	},
	
    initCalendarButtons: function(){
		
		$$('.dateTrigger').each(function ( el ) {
										  
			Calendar.setup({
				inputField     :    el.getParent().getPrevious().id,      // id of the input field
				ifFormat       :    "%d-%m-%Y",      // format of the input field
				showsTime      :    false,           // will display a time selector
				button         :    el.id,   // trigger for the calendar (button ID)
				singleClick    :    false,           // double-click mode
				step           :    1                // show all years in drop-down boxes (instead of every other year as default)
			});
		});
	},
	
	initTextAreas: function() {
		
		$$('.simpleTiny textarea').each(function(el) {
												 
		   	var sId = el.getProperty('id');
			
			tinyMCE.init({
				mode : "exact",
				elements : sId,
				theme : "simple",
				language : "nl",
				height: "200px",
				width: "483px",
				plugins: "inlinepopups,media,style,table,advhr,advimage,insertdatetime,print,contextmenu,paste,directionality,visualchars,liststyle", 
				cleanup_on_startup : true,
				extended_valid_elements: "p[id|class|style],a[class|name|href|target|title],img[class|src|mce_src|border=0|alt|title|width|height|align|onmouseover|onmouseout|name|obj|param|style],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style],div[align],hr,br,strike,sub,sup",
				document_base_url : "/",
				convert_urls : false,
				force_br_newlines : true,
				flashaudio : true,
				flashvideo : true
			});
		});
		
		$$('.advancedTiny textarea').each(function(el) {
													
		   	var sId = el.getProperty('id');
			
		   	tinyMCE.init({
				mode : "exact",
			  	elements : sId,
			  	theme : "advanced",
			  	language : "nl",
			  	height: "400px",
			  	width: "483px",
			  	plugins: "inlinepopups,media,style,table,advhr,advimage,insertdatetime,print,contextmenu,paste,directionality,visualchars,liststyle", 
			  	theme_advanced_buttons1: "tekstopmaak,bold,italic,underline,strikethrough,forecolor,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,liststyle,separator,outdent,indent,separator,sub,sup",
			  	theme_advanced_buttons2: "interactiviteit,link,unlink,anchor,separator,invoegen,image,media,charmap,hr,insertdate,inserttime,separator,overigen,undo,redo,removeformat,pasteword,print",		
			  	theme_advanced_buttons3: "tabellen,table,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,split_cells,delete_table",
			  	theme_advanced_toolbar_location : "top",
			  	theme_advanced_toolbar_align : "left",
			  	cleanup_on_startup : true,
			  	extended_valid_elements: "p[id|class|style],a[class|name|href|target|title],img[class|src|mce_src|border=0|alt|title|width|height|align|onmouseover|onmouseout|name|obj|param|style],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style],div[align],hr,br,strike,sub,sup",
			  	document_base_url : "/",
			  	convert_urls : false,
			  	force_br_newlines : true,
			  	flashaudio : true,
			  	flashvideo : true
			});
		});
	},
	
	initFileUpload: function(elm) {
		
		var inputElement = $(elm).getElement('input[type="file"]');
		
		var formElement = $(elm).getElement('form');
		
		if ($chk(inputElement)) {
			
			setTimeout(function() {
								
				var params = $(formElement).toQueryString();
				
				oNetManagerFront.fileUpload = new FancyUpload(inputElement, {
															  
					url: $(formElement).action + '?' + params,					
					swf: '/flash/Swiff.Uploader.swf',
					queueList: 'photoupload-queue',
					container: $('divFile'),
					form: formElement,
					onAllComplete: function() {
						oNetManagerFront.getAjax('/redactie/bekijk-overzicht/', 'renderOverview', false);
					}
				});
			}, 300);
		}
	},
	
	trim: function(value) {
		
	  	value = value.replace(/^\s+/,'');
	  	
	  	value = value.replace(/\s+$/,'');
	  	
	  	return value;
	},

	formatUrl: function(elm) {
		
		var sTitle = this.trim($(elm).value);
		
		$('url_segment').value = sTitle.clean().replace(/[^a-z0-9 ]/ig,'-').replace(/ /g, '-');
	},
	
	submitFileForm: function() {
			
		oNetManagerFront.fileUpload.upload();
	},
	
	processForm: function(iFormId) {
		// Define the processed form
		this.processedForm = $(iFormId);
		
		// Bind the function which has to be fired after completion
		var validateForm = this.validateForm.bind(this);
		
		$$('.advancedTiny textarea').each(function(el) {
			var ed, sText;
			var sId = el.getProperty('id');
			ed = tinyMCE.get(sId);
			sText = ed.getContent();
			sText = replaceImagesByMedia(sText);
			tinyMCE.execCommand('mceRemoveControl', false, sId);
			$(sId).value = sText;
		});
		
		$$('.simpleTiny textarea').each(function(el) {
			var ed, sText;
			var sId = el.getProperty('id');
			ed = tinyMCE.get(sId);
			sText = ed.getContent();
			if(typeof replaceImagesByMedia == 'function') {
				sText = replaceImagesByMedia(sText);
			}
			tinyMCE.execCommand('mceRemoveControl', false, sId);
			$(sId).value = sText;
		});

		// Send AJAX request
		this.processedForm.send({ onComplete: validateForm });
	},
	
	validateForm: function(sResponse) {
		if (sResponse.test('<!DOCTYPE')) {
			
			document.location.href = '/auth/login';
			
		} else {
		
			// Evaluate server response
			var oResponse = Json.evaluate(sResponse);
			
			this.formSent = false;
			
			// Remove error classes
			this.processedForm.getElements('dd').each(function(el) {
				el.removeClass('iError');
			});
		
			// Remove previous error messages
			this.processedForm.getElements('.errorMessage').each(function(el) {
				el.remove();
			});
			
			// Function to execute if server response is valid
			if(oResponse.valid) {
				// Redirect to the defined tab
				$('RedactieForm').innerHTML = '<iframe id="FileUploadFrame" height="300" width="450" src="/form/get-multi-upload/parent_id/' + oResponse.folder_id + '/redactie/1" frameborder="0">';
				
				$('redactieFormHolder').getElement('p.arrowLink a').remove();
				var oLink = new Element('a').setProperties({
					'title': 'Volgende',
					'href' : 'javascript:void(0);'
				}).setText('Volgende').addEvent('click', this.finishRedactie.bind(this)).injectInside($('redactieFormHolder').getElement('p.arrowLink'));
			} else {
				
				// For each error do
				$each(oResponse.errors, function(errorMessage, fieldName) {
					console.log('fieldName: ' + fieldName);
					var formElement = oNetManagerFront.processedForm.getElement('[name^=' + fieldName + ']');
					console.log('formElement: ' + formElement);
					var formHolder = formElement.getParent();
					while(formHolder.getTag() != 'dd') {
						formHolder = formHolder.getParent();
					}
					formHolder.addClass('iError');
					
					if(formElement.getProperty('type') == 'text') {
					
						$(formHolder).addClass('iError');
						
						$(formElement).value = errorMessage;
						
						$(formElement).addEvent('focus', function(el) {
							if($(formHolder).hasClass('iError')) {
								$(formHolder).removeClass('iError');
								$(formElement).value = '';
							}
						});
						
					} else {
					
						if ($type(errorMessage) == 'object') {
							
							$each(errorMessage, function(msg, key){
														 
								// Place the error message in the dataholder
								var oError = new Element('span').addClass('errorMessage').setHTML(msg).inject(formHolder);
							});
							
						} else {
						
							// Place the error message in the dataholder
							var oError = new Element('span').addClass('errorMessage').setHTML(errorMessage).inject(formHolder);
						}
						
						$(formHolder).getElements('input').each(function(el) {
							el.addEvent('click', function() {
								if($(formHolder).hasClass('iError')) {
									$(formHolder).removeClass('iError');
									$(formHolder).getElement('.errorMessage').remove();
								}
							});
						});
					}
				});
				
				// hide the loading animation
				this.initTextAreas();
				this.hideOverlay();
				
				if(oResponse.db_error) {
					
					this.showError('Systeemfout!', oResponse.db_error);
					this.processedForm.getParent().empty();
				}
			}
		}
	},
	
	finishRedactie: function () {
		$('RedactieForm').setStyle('display', 'none');
		$('redactieFormHolder').getElement('p.arrowLink').remove();
		//$('redactieFormHolder').empty();
		this.getAjax('/redactie/afronden', 'setRedactionMsg', false);
	},

	setRedactionMsg: function (sResponse) {
		var oParagraph = new Element('p').setText(sResponse).injectInside($('redactieFormHolder'));
	},
	
	showError: function(sHeader, sContent, sFooter) {
		var oPopup = new Element('div').setOpacity(0).setProperty('id', 'popup').inject(document.body);
		
		var oHeader = new Element('div').setProperty('id', 'popupHeader').inject(oPopup);
		
		var oH3 = new Element('h3').setText(sHeader).inject(oHeader);
		
		var closeIcon = new Element('a').setProperties({
			'href': '#',
			'class': 'closeIcon',
			'title': 'Sluit dit venster'
		}).addEvent('click', function() {
			oNetManagerFront.closePopup();
		}).inject(oHeader);
		
		var oContent = new Element('div').setProperty('id', 'popupContent').setHTML(sContent).inject(oPopup);
		
		var oFooter = new Element('div').setProperty('id', 'popupFooter').setHTML(sFooter).inject(oPopup);
		
		$('popup').setStyles({
			'top': ((window.getHeight() / 2) - ($('popup').getSize().size.y / 2)),
			'left': ((window.getWidth() / 2) - ($('popup').getSize().size.x / 2))
		});
		
		$('popup').setOpacity(1);
	},
	
	closePopup: function() {
		if($defined($('popup'))) {
			
			// Remove the overlay from the DOM
			$ES('#popup').getLast().remove();
			
			this.hideOverlay();
		}
	},
	
	showOverlay: function(sType) {
		
		// Create the transparent overlay
		var oOverlay = new Element('div').setProperty('id', 'transOverlay');
			
		oOverlay.addClass('loadingOverlay');
		
		var oText = new Element('p').setStyle('margin-top', (window.getHeight()/2 + 30)).setText('Een ogenblik geduld a.u.b.').inject(oOverlay);
		
		// Inject the overlay into the DOM
		oOverlay.inject(document.body);
	},
	
	hideOverlay: function() {
		
		if($defined($('transOverlay'))) {
			
			// Remove the overlay from the DOM
			$ES('#transOverlay').getLast().remove();
		}
	},
	
	showRedactieForm: function() {
		
		$('redactieFormHolder').setStyle('display', 'block');
		$('aanleverOpties').setStyle('display', 'none');
		if ($defined($('typesPermitted')))
			$('typesPermitted').setStyle('display', 'none');
	},
	
	showTypesPermitted: function() {
		if ($defined($('typesPermitted'))) {
			$('typesPermitted').setStyle('display', 'block');
		}
		var Scroller = new Fx.Scroll(window, {duration:50, wait:false}).toElement('wrapper');
		
	}
});
	
var oNetManagerFront = new NetManagerFront();