function WafManager(servicePath)
{
	this.servicePath = servicePath;
}

WafManager.prototype.coreStartRequest = function(requestUrl, data, successHandler, errorHandler)
{
	jQuery.ajax({
		type: "POST",
		url: requestUrl,
		success: successHandler,
		error: errorHandler,
		data: data
	});
};

WafManager.prototype.getChildElementsByClass = function(element, className, recursive)
{
	var result = new Array();
	if(element.childNodes == null) return result;
	
	for(var i = 0; i < element.childNodes.length; i++)
	{
		var item = element.childNodes[i];
		if(item.attributes != null && item.attributes["class"] != null && item.attributes["class"].value == className)
		{
			result.push(item);
		}
		if(recursive)
		{
			var items = this.getChildElementsByClass(item, className, true);
			for(var j = 0; j < items.length; j++)
			{
				result.push(items[j]);
			}
		}
	}
	return result;
};

WafManager.prototype.coreStartFormRequest = function(requestUrl, formName, successHandler, errorHandler)
{
	var frm = document.forms[formName];
	
	if(frm == null)
	{
		alert("Es wurde kein Formular mit dem Namen [" + formName + "] gefunden.");
		return;
	}
	
	// TinyMCE Editor Inhalte übernehmen
	
	if(typeof(tinyMCE) != "undefined")
	{
		var editors = this.getChildElementsByClass(frm, "editor_field", true);
		for(var i = 0; i < editors.length; i++)
		{
			var editor = editors[i];
			var name = editor.attributes["name"].value;
			var editorId = editor.attributes["id"].value;
			var content =  tinyMCE.get(editorId).getContent();
			frm.elements[name].value = content;
		}
	}
	
	var data = new Object();

	for(var i = 0; i < frm.elements.length; i++)
	{
		var element = frm.elements[i];
		
		if(element.nodeName == "INPUT" && element.attributes["type"] != null && element.attributes["type"].value == "radio")
		{
			if(element.checked)
			{
				data[frm.elements[i].name] = frm.elements[i].value;
			}
		}
		else if(element.nodeName == "INPUT" && element.attributes["type"] != null && element.attributes["type"].value == "checkbox")
		{				
			if(element.checked)
			{
				data[frm.elements[i].name] = frm.elements[i].value;
			}
		}
		else if(element.nodeName == "SELECT" && element.attributes["multiple"] != null)
		{
			var selectedItems = new Array();
			for(var x = 0;x < element.options.length; x++)
			{
				if (element.options[x].selected)
				{
					selectedItems.push(element.options[x].value);
				}
			}
			
			data[frm.elements[i].name] = selectedItems;
		}
		else
		{
			data[frm.elements[i].name] = frm.elements[i].value;
		}
	}
	
	this.coreStartRequest(requestUrl, data, successHandler, errorHandler);
};

WafManager.prototype.startRequest = function(moduleName, methodName, data, successHandler, errorHandler)
{
	var requestUrl = this.getRequestUrl(moduleName, methodName);
	this.coreStartRequest(requestUrl, data, successHandler, errorHandler);
}

WafManager.prototype.startFormRequest = function(moduleName, methodName, formName, successHandler, errorHandler)
{
	var requestUrl = this.getRequestUrl(moduleName, methodName);
	this.coreStartFormRequest(requestUrl, formName, successHandler, errorHandler);
}

WafManager.prototype.startRedirectRequest = function(moduleName, methodName, data, redirectUrl)
{
	this.startRequest(moduleName, methodName, data, function(message) {
		if(message != "true")
		{
			alert(message);
			return;
		}
		
		if(redirectUrl == undefined) redirectUrl = location.href;
		
		location.href = redirectUrl;
	}, function(request, message) {
		alert(message);
	});
}

WafManager.prototype.startRedirectFormRequest = function(moduleName, methodName, formName, redirectUrl)
{
	this.startFormRequest(moduleName, methodName, formName, function(message) {
		if(message != "true")
		{
			alert(message);
			return;
		}
		
		if(redirectUrl == undefined) redirectUrl = location.href;
		
		location.href = redirectUrl;
	}, function(request, message) {
		alert(message);
	});
}

WafManager.prototype.getRequestUrl = function(moduleName, methodName)
{
	return this.servicePath + "?module=" + moduleName + "&method=" + methodName;
}

WafManager.prototype.getToolRequestUrl = function(toolName, methodName)
{
	return this.servicePath + "?tool=" + toolName + "&method=" + methodName;
}

WafManager.prototype.startToolRequest = function(toolName, methodName, data, successHandler, errorHandler)
{
	var requestUrl = this.getToolRequestUrl(toolName, methodName);
	this.coreStartRequest(requestUrl, data, successHandler, errorHandler);
};

WafManager.prototype.startToolFormRequest = function(toolName, methodName, formName, successHandler, errorHandler)
{
	var requestUrl = this.getToolRequestUrl(toolName, methodName);
	this.coreStartFormRequest(requestUrl, formName, successHandler, errorHandler);
};

WafManager.prototype.initEditor = function(elementId)
{
	$('#' + elementId).tinymce({
		// Location of TinyMCE script
		script_url : 'waf/js/tiny_mce/tiny_mce.js',

		// General options
		theme : "advanced",
		plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

		// Theme options
		theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
		theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
		theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
		theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		theme_advanced_resizing : true,

		// Example content CSS (should be your site CSS)
		content_css : "css/content.css",

		// Drop lists for link/image/media/template dialogs
		template_external_list_url : "lists/template_list.js",
		external_link_list_url : "lists/link_list.js",
		external_image_list_url : "lists/image_list.js",
		media_external_list_url : "lists/media_list.js",

		// Replace values for the template plugin
		template_replace_values : {
			username : "Some User",
			staffid : "991234"
		},
		
		file_browser_callback : 'waf_file_browser'
	});
};

function waf_file_browser (field_name, url, type, win)
{
	if(type != "file")
	{
		// Bild wählen
	    tinyMCE.activeEditor.windowManager.open({
	        file : 'admin_service.php?module=core_admin&method=getLinkImageContent',
	        width : 600,
	        height : 400,
	        resizable : "yes",
	        inline : "yes",
	        close_previous : "no"
	    }, {
	        window : win,
	        input : field_name
	    });
    }
    else
    {
    	var lang = null;
    	var editor_id = tinyMCE.activeEditor.id;
    	var editor = document.getElementById(editor_id);
    	if(editor.attributes["lang"] != null)
    	{
    		lang = editor.attributes["lang"].value;
    	}
    	
    	// Menü-Link wählen
    	tinyMCE.activeEditor.windowManager.open({
	        file : 'admin_linkbrowser.php?lang=' + lang,
	        width : 600,
	        height : 410,
	        resizable : "no",
	        inline: "yes",
	        close_previous : "no"
	    }, {
	        window : win,
	        input : field_name
	    });
    }
    
    return false;
}
