function errorMsg(text){
	alert(text);
	return false;
}

function put(text) {
$j("#put").html($j("#put").html() + "<br />" + text);
}

function LOG(){
	return;
}

function logout(){
	var url = new String(self.location);
	if(url.substr(url.length-1, 1) != "/")
		url = url + "/";
	url = url + "logout";
	location.href = url;
}


var checkUploadTimer;
function checkUpload(field){
	var body = '';
	body = $j("#" + field).siblings('iframe').contents().find('body').html();

	if(body == ''){
		checkUploadTimer = setTimeout("checkUpload('" + field + "')", 1000);
	} else {
		var data = body;
		var formID = $j("#" + field).parent('form').attr('id');
		var fileName = serverName = fileType = formID = fieldName = '';
		fileName = data.replace(/^(.*)fileName=([^;]*);*(.*)$/, '$2');
		serverName = data.replace(/^(.*)serverName=([^;]*);*(.*)$/, '$2');
		fileType = data.replace(/^(.*)fileType=([^;]*);*(.*)$/, '$2');
		formID = data.replace(/^(.*)formID=([^;]*);*(.*)$/, '$2');
		fieldName = data.replace(/^(.*)fieldName=([^;]*);*(.*)$/, '$2');

		// remove the loading gif
		$j("#" + formID + " #fileinfo_" + fieldName).html('');

		// pre-fill the form
		$j("#" + formID + " #filename_" + fieldName).val(fileName);
		$j("#" + formID + " #" + fieldName + "_name").val(fileName);
		$j("#" + formID + " #" + fieldName + "_type").val(fileType);
		$j("#" + formID + " #" + fieldName + "_serverFileName").val(serverName);
		$j("#" + formID + " #" + fieldName + "_originalFileName").val(fileName);

		// remove the loading gif
		$j("#" + formID + " #fileinfo_" + fieldName).html('');
	}
	return;

	i = 0;

	while(body == ''){
		body = $j("#" + field).siblings('iframe').contents().find('body').html();
		if(i > 10000)
			break;
	}

	// remove the loading gif
	$j("#" + formID + " #fileinfo_" + fieldName).html('');

	/*if(body != ''){

	} else {
		checkUploadTimer = setTimeout("checkUpload(field)", 1000);
	}*/
	//return;

}

function Form () {

	this.multiSelectToLi = function(el) {
		// hide the select
		el.css('display','none');
		// get the options
		var values = new Array();
		var titles = new Array();
		var xhtml = '<div class="unselector">D&eacute;selectionner</div><ul class="selectable">';
		el.children('option').each(function(i){
			values[i] = $j(this).val();
			titles[i] = $j(this).html();
			xhtml += '<li title="' + values[i] + '">' + titles[i] + '</li>';
		});
		xhtml += '</ul>';
		xhtml += '<p class="fix"></p>';
		el.before(xhtml);
		var value;
		var selectable = el.siblings('ul.selectable');
		jQuery("option[selected=selected]").each(function(){
			value = jQuery(this).attr('value');
			jQuery("li[title="+value+"]", selectable).addClass('ui-selected');
		});

		// make selectable
		el.siblings('.selectable').selectable({
		   // on stop selection
		   stop: function(){
				var value;
				var selElement = jQuery(this).siblings("select");
				selElement.find('option').removeAttr('selected');
				// unselect all in the select
				jQuery(".ui-selected", this).each(function(){
					value = jQuery(this).attr('title');
					jQuery("option[value="+value+"]", selElement).attr('selected', 'selected');
				});
			}
		});

		// make the unselect button clicable
		el.siblings('.unselector').click(function(){
			jQuery(this).siblings('select').find('option').removeAttr('selected');
			jQuery('.ui-selected', selectable).removeClass('ui-selected');
		}).css('cursor','pointer');




	}

	this.setFieldLang = function(id, lang, span) {
		// show the right language field
		if(lang == "all"){
			$j("#" + id + " .multiLang").show('fast');
		} else {
			$j("#" + id + " .multiLang:not(."+lang+")").hide('fast');
			$j("#" + id + " .multiLang." + lang).show('fast');
		}

		// select the right button
		$j("span", $j(span).parent()).removeClass('selected');
		$j(span).addClass('selected');
	}

	this.upload = function (formID, fieldName){
		var form = document.getElementById(formID);

		// check if the file is accepted
		var filename = $j("#file_" + fieldName).val();
		var ext = filename.replace(/^(.*)\.([^\.]*)$/, "$2");
		var accept = $j("#file_" + fieldName).attr('class');

		if(!$j("#file_" + fieldName).hasClass(ext))
			return errorMsg('Filetype not accepted');

		var target = form.target;
		var enctype = form.enctype;
		var action = form.action;

		form.target = "hiddenUploadFrame_" + fieldName;
		form.enctype = "multipart/form-data";
		form.action = S.baseURL + "app/system/index/uploadForm/fieldName/" + fieldName + "/noJS/true";

		form.submit();

		form.target = target;
		form.enctype = enctype;
		form.action = action;

		$j("#file_" + fieldName).val('');

		this.formID = formID;
		this.fieldName = fieldName;
		this.displayLoading();
		checkUpload($j("#file_" + fieldName).attr('id'));

	}

	this.formID = '';
	this.fieldName = '';

	this.checkUploadReturn = function(data){
		if(data != "pending"){
			clearTimeout(checkUploadTimer);

			// get the datas
			var fileName = serverName = fileType = formID = fieldName = '';
			fileName = data.replace(/^(.*)fileName=([^;]*);*(.*)$/, '$2');
			serverName = data.replace(/^(.*)serverName=([^;]*);*(.*)$/, '$2');
			fileType = data.replace(/^(.*)fileType=([^;]*);*(.*)$/, '$2');
			formID = data.replace(/^(.*)formID=([^;]*);*(.*)$/, '$2');
			fieldName = data.replace(/^(.*)fieldName=([^;]*);*(.*)$/, '$2');

			// remove the loading gif
			$j("#" + formID + " #fileinfo_" + fieldName).html('');

			// pre-fill the form
			$j("#" + formID + " #filename_" + fieldName).val(fileName);
			$j("#" + formID + " #" + fieldName + "_name").val(fileName);
			$j("#" + formID + " #" + fieldName + "_type").val(fileType);
			$j("#" + formID + " #" + fieldName + "_serverFileName").val(serverName);
			$j("#" + formID + " #" + fieldName + "_originalFileName").val(fileName);
		}
	}

	this.displayLoading = function() {
		$j("#" + this.formID + " #fileinfo_" + this.fieldName).html('<img src="' + S.baseURL + 'assets/images/loading.gif" style="width:16px;height:16px" />');
	}


	this.submit = function(formID, url, divID){
		var method='post';

		var parameters = new Array(); //contient les noms des champs
		var values = new Array(); //contient les valeurs des champs
		var jValues = new Object();

		//nous avons ainsi des couples parameters[i]=values[i]
		var pars = "";

		var multipleSelectFieldIds = new Array(); //contient les indices du tableau parameters qui sont des multiplesSelect
		//c'est utile pour √©viter de faire un search and replace de la valeur & dans les cl√©s d'un select multiple


		var form = document.getElementById(formID);
		var elements = form.elements;
		var j = 0;
		for(var i=0; i<elements.length; i++){
			if(elements[i].type == "checkbox"){
				parameters[j] = elements[i].name;
				//alert(elements[i].checked);
				if(elements[i].checked == true)
					values[j] = "1";
				else
					values[j] = "0";
				j++;

			}
			else if(elements[i].type == "text"
				|| elements[i].type == "select-one"
				|| elements[i].type == "textarea"
				|| elements[i].type == "hidden"
				|| elements[i].type == "password"
				){
				parameters[j] = elements[i].name;
				values[j] = elements[i].value;
				j++;
			}
			else if (elements[i].type == "select-multiple"){
				parameters[j] = elements[i].name;
				//cette input est particulier car il y aura plusieurs
				//valeurs pour le m√™me champ, on construit donc un tableau
				v = new Array();
				var options = elements[i].getElementsByTagName('option');
				var l = options.length;
				var n = 0;
				for(var k=0; k < l; k++){
					if(options[k].selected == true){
						v[n] = options[k].value;
						n++;
					}
				}

				values[j] = v;
				multipleSelectFieldIds[j] = true;
				j++;
			}
		}

		for(var i=0; i<parameters.length; i++){
			//attention ce code n'est pas redondant par rapport √† update, car l'url encode
			//est fait sur le param√®tre pars!
			var code = "";
			var value = '';
			if (multipleSelectFieldIds[i]===true){
				pars = pars + parameters[i] + "=" + encodeURI(values[i]);
				value = values[i];
				//code = "jValues." + parameters[i] + " = '" + (values[i]).replace(/\'/g, "\\'") + "';";
				code = "jValues." + parameters[i] + ' = value;';
				eval(code);
			} else {
				pars = pars + parameters[i] + "=" + encodeURI(values[i].replace("&", "\$EtCom\$"));
				value = values[i];
				//code = "jValues." + parameters[i] + ' = "' + escape(values[i]).replace(/\"/g, '\\"') + '";';
				code = "jValues." + parameters[i] + ' = value;';
				eval(code);
			}
			if (i!=parameters.length-1) //si c'est le dernier param√®tre, on ajoute pas un & de plus
				pars = pars + "&";
		}
		//alert(url+" "+pars+" "+method);
		jValues.test="salut";
		S.ajaxLoad(divID, url, jValues);
		//update(url, pars, method);
		return false;
	}

	this.validateForm = function (jQueryForm) {
		var validationError = false;

		$j("input, select, textarea", jQueryForm).each( function() {
			if ($j(this).attr("class")) {
				if (!Form.validateField(this)){
					validationError = true;
				}
			}
		});

		if(!validationError)
			jQueryForm.submit();
		else{
			var errorText = $j("input.errorText", jQueryForm).val();
			errorMsg(errorText);
		}
	}

	this. validateField = function (field) {

		var error = false;

		// required fields
		if ($j(field).attr("class").indexOf("required") != -1) {
			if (!$j(field).val().length)
				error = true;
		}
		// numeric fields
		if ($j(field).attr("class").indexOf("numeric") != -1) {
			if (!/^[0-9]*$/.test($j(field).val()))
				error = true;
		}
		// characters (letters)
		if ($j(field).attr("class").indexOf("character") != -1) {
			if (!/^[a-zA-Z√É¬∂√É‚Äì√É¬§√É‚Äû√É¬•√É‚Ä¶]*$/.test($j(field).val()))
				error = true;
		}
		// emails
		if ($j(field).attr("class").indexOf("email") != -1) {
			if (!/^[a-zA-Z0-9]{1}([\._a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+){1,3}$/.test($j(field).val()))
				error = true;
		}

		if (error) {
			$j(field).addClass("error");
		} else {
			$j(field).removeClass("error");
		}

		return !error;
	}
}
Form = new Form();

function S () {

	this.baseURL = '';
	this.galleryDialogJustOpen = false;

	this.ajaxPost = function(url, parameters){
		url = url + "/";
		url = this.baseURL + url;
		$j.post(url, parameters, this.ajaxOnSuccess);
	}

	this.ajaxLoad = function(id, url, parameters){
		url = url + "/";
		url = this.baseURL + url;
		$j("#" + id).load(url, parameters);

		if($j("#" + id).hasClass('ui-tabs-container')){
			// the id is a tab => let's activate it
			var tabIndex = $j("#" + id).attr('class').replace(/^(.*)tabIndex_([^\s]*)\s*(.*)$/, "$2");

			$j(function() {
				$j("#" + id).siblings("ul").tabsClick(tabIndex);//('select', "#" + domID);
			});
		}

	}

	this.reloadViews = function(views, params){
		var url = new String(self.location);
		if(url.substr(url.length-1, 1) != "/")
			url = url + "/";
		if(arguments.length < 2){
			var params = {};
		}
		params.views= views;
		$j.ajax({
			url: url,
			type: "GET",
			data: params,
			success: this.updateAjaxDiv
		});
	}

	this.setVars = function(vars){
		var url = new String(self.location);
		if(url.substr(url.length-1, 1) != "/")
			url = url + "/";

		url = url + "setVars/vars/" + vars;

		$j.ajax({
			url: url,
			type: "POST"
		});
	}

	this.setGlobalVars = function(vars){
		var url = new String(self.location);
		if(url.substr(url.length-1, 1) != "/")
			url = url + "/";

		url = S.baseURL + "app/global/setGlobalVars/vars/" + vars;
		$j.ajax({
			url: url,
			type: "POST"
		});
	}

	this.updateAjaxDiv = function(data, textStatus){
		if(textStatus != 'success')
			return;


		data = data.split('--AX--');

		if(data == 'logout'){
			logout();
			return;
		}

		var type = '';
		var view = '';
		for(var i=0; i < data.length; i++){
			if(data[i].substr(0, 5) == 'View:')
				type = 'view';
			else if(data[i].substr(0, 8) == 'Content:')
				type = 'content';
			else
				type = 'generic';

			switch(type){
				case 'view':
					view = data[i].substr(5);
					break;
				case 'content':
					var content = data[i].substr(8);
					$j("#" + view).html(content);

					if($j("#" + view).hasClass('tabContainer')){
						$j("#" + view).show();
						$j("#" + view).siblings("div.tabContainer").hide();
					}
					break;
				case 'generic':
					break;
			}
		}

	}

	this.displayManagePicture = function(ref){

		if($j("body #managePictures").attr('id') == null){
			// create the element
			$j("body").prepend('<div id="managePictures" title="Gestionnaire de photos"></div>');
			$j("#managePictures").dialog({
/*				height:500,*/
				width:800,
				position: 'center'
			});
			$j("#managePictures").parent('.ui-dialog').addClass('flora');

		}
		this.galleryDialogJustOpen = true;
		S.reloadViews('managePictures', {ref:ref});

	}



}
S = new S();

function View(__area, __viewName){
	this.area = __area;
	this.viewName = __viewName;
}

function PreviewElement () {
	this.domID = 'generic';
	this.selectedElement = 0;

	this.addLangsFunctions = function () {
		$j("#" + this.domID + " .langSelector span").click(function(){GenericPreviewElement.selectLang(this)});
	}

	this.selectLang = function(el){
		var domID = ($j($j(el).parents('div.preview').get(0)).parent('div').attr('id'));
		//alert($($(el).parents('div.preview').get(0)).parent('div').attr('id'));

		if(this.domID == "generic"){
			eval(domID + ".selectLang(el);");
			return;
		}

		var lang = $j(el).attr('class').replace(/^(.*)lang_([a-z]{2,3})(.*)$/, "$2");
		// show the right language value
		if(lang == "all"){
			$j("#" + this.domID + " .multiLang").show('fast');
		} else {
			$j("#" + this.domID + " .multiLang:not(."+lang+")").hide('fast');
			$j("#" + this.domID + " .multiLang." + lang).show('fast');
		}

		// select the right button
		$j("span", $j(el).parent()).removeClass('selected');
		$j(el).addClass('selected');
	}

}
GenericPreviewElement = new PreviewElement();

function TreeElement () {
	this.domID = 'generic';
	this.dropOverItem = 0;
	this.closedIcon = '';
	this.openIcon = '';

	this.init = function () {
		//this.collapseAll();
		this.prependIcons();
		this.addToggleClick();
	}

	this.collapseAll = function(){
		$j("#" + this.domID + " li ul").hide('fast');
	}

	this.prependIcons = function(){
		$j("#" + this.domID + " li div").prepend('<span class="icon"></span>');
		$j("#" + this.domID + " li:has(ul) > div > span.icon").addClass('closed');
		$j("#" + this.domID + " li:not(:has(ul)) span.icon").addClass('nochild');
	}

	this.addToggleClick = function(){
		$j("#" + this.domID + " li span.icon:not(.nochild)").click(function(){
			$j(this).parent('div').parent("li").children("ul").toggle();
			if($j(this).parent('div').parent("li").children("ul").css('display') == 'block'){
				$j(this).addClass('open').removeClass('closed');
			} else {
				$j(this).removeClass('open').addClass('closed');
			}
		});
	}

	this.listingRowDropped = function(ev, ui) {
		var draggedElement = GenericListingElement.draggedElement;
		var droppedItem = this.dropOverItem;

		var className = $j(draggedElement).attr('class');
		alert(className);
		var elementName = GenericListingElement.getRowElementName(className);
		var moduleName = GenericListingElement.getRowModuleName(className);
		var idElement   = GenericListingElement.getRowidElement(className);



		//alert($(draggedElement).attr('class'));
	}

}
GenericTreeElement = new TreeElement();