Your IP : 216.73.216.147


Current Path : /home/balossw/www/temp/common/cms/media/js/
Upload File :
Current File : /home/balossw/www/temp/common/cms/media/js/appmanager.js

/*---------------------------------------------------------------------------
		File name ............ content/js/appmanager.js
		Project .............. Gestion
		Author ............... Antoine Lemoine
		Creation date ........ 26.10.2007
		Modification date .... 30.01.2008
---------------------------------------------------------------------------*/


var table_sort = null;
var HTMLTableSort = function (id, index, elements_per_page)
{
	this.id = id;
	this.table = $('#'+id);
	this.rows = this.table.children('tbody').children('tr');
	this.first_row = this.table.children('thead').children('tr:eq(0)');
	this.elements_per_page = elements_per_page;
	table_sort = this;
	this.max_index = Math.ceil(this.rows.size()/elements_per_page)-1;
	
	this.column_index = 1;
	this.field = null;

	/* Methodes */

	this.sort = function (column_index, field)
	{
		this.column_index = column_index;
		this.field = field;
		this.refresh(true);
	}
	
	this.setIndex = function (index)
	{
		if (index>this.max_index) { index = this.max_index; }
		else if (index<0) { index = 0; }
		this.index = index;
		this.refresh(false);
		$('.navigation-page-index').html((index+1));
		
		if (index==0)
		{
			$('.navigation-first-page').addClass('disabled');
			$('.navigation-previous-page').addClass('disabled');
		}
		else
		{
			$('.navigation-first-page').removeClass('disabled');
			$('.navigation-previous-page').removeClass('disabled');
		}
		if (index==this.max_index)
		{
			$('.navigation-next-page').addClass('disabled');
			$('.navigation-last-page').addClass('disabled');
		}
		else
		{
			$('.navigation-next-page').removeClass('disabled');
			$('.navigation-last-page').removeClass('disabled');
		}
	}

	this.addToIndex = function (delta)
	{
		this.setIndex(this.index+delta);
	}

	this.refresh = function (reverse)
	{
		var column_match_string = 'td:eq('+(this.column_index-1)+')';
		var sort_column_head = this.first_row.children('th:eq('+(this.column_index-1)+')').find('.sort');

		var order = sort_column_head.attr('order');
		if (reverse)
		{
			if (order=='asc') { order = 'desc'; }
			else if (order=='desc') { order = 'asc'; }
			else { order = 'asc'; }
		}
		else if (order==null) { order = 'asc'; }

		var row_array = new Array();
		for (var i=0; i<this.rows.size(); i++)
		{
			row_array[i] = i;
		}

		var rows = this.rows;
		var owner = this;
		row_array.sort(
			function (index1, index2)
			{
				var value1 = rows.eq(index1).children(column_match_string).text();
				var value2 = rows.eq(index2).children(column_match_string).text();
				var len1 = value1.length;
				var len2 = value2.length;
				var factor = order=='asc' ? 1 : -1;

				if (owner.field=='numeric')
				{
					var numeric_value1 = parseFloat(value1);
					var numeric_value2 = parseFloat(value2);
					if (numeric_value1<numeric_value2) { return -factor; }
					else if (numeric_value1>numeric_value2) { return factor; }
				}
				else if (owner.field=='date')
				{
					var date_array1 = value1.split('/');
					var year1 = parseInt(date_array1[2],10);
					var month1 = parseInt(date_array1[1],10);
					var day1 = parseInt(date_array1[0],10);

					var date_array2 = value2.split('/');
					var year2 = parseInt(date_array2[2],10);
					var month2 = parseInt(date_array2[1],10);
					var day2 = parseInt(date_array2[0],10);
					
					if (year1<year2) { return -factor; }
					else if (year1>year2) { return factor; }
					if (month1<month2) { return -factor; }
					else if (month1>month2) { return factor; }
					if (day1<day2) { return -factor; }
					else if (day1>day2) { return factor; }
				}
				else
				{
					var n = Math.min(len1,len2);
					var c1, c2 = 0;
					for (var i=0; i<n; i++)
					{
						c1 = value1.charCodeAt(i);
						c2 = value2.charCodeAt(i);
						if (c1<c2) { return -factor; }
						else if (c1>c2) { return factor; }
					}
				}
				if (len1<len2) { return -factor; }
				else if (len1>len2) { return factor; }
				return 0;
			}
		);
		this.rows.remove();

		var other_column_heads = this.first_row.find('.sort:not('+(this.column_index-1)+')');
		other_column_heads.removeClass('selected_sort_column');
		other_column_heads.removeClass('asc_sort');
		other_column_heads.removeClass('desc_sort');
		other_column_heads.removeAttr('order')
		sort_column_head.addClass('selected_sort_column');
		sort_column_head.addClass(order+'_sort');
		sort_column_head.attr('order',order);

		var min = this.index*this.elements_per_page;
		var max = (this.index+1)*this.elements_per_page;
		for (var i=0; i<row_array.length; i++)
		{
			var row = this.rows.eq(row_array[i]);
			row.attr('class','row'+(i%2)+(i<min || i>=max ? ' hide' : ''));
			this.table.find('tr:last').after(row);
		}
	}

	this.setIndex(index);
}

var DialogButton = function (label, click_function, class_name)
{
	this.label = label;
	this.class_name = class_name;
	this.click = jQuery.isFunction(click_function) ? click_function : function (event) {};
}

var Dialog = function (type, message, title_text, buttons)
{
	var body = $('body');
	var jdialog_background = $('<div class="dialog-background" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:500;"></div>');
	var jdialog = $('<div class="dialog '+type+'-dialog" style="width:400px;position:absolute;top:25%;left:0;z-index:501;">'
		+'<div class="ibox">'
			+'<div class="box-t"><div class="box-trc"></div><div class="box-tlc"></div><div class="box-header"></div></div>'
			+'<div class="box-rs"><div class="box-c"><h2>'+title_text+'</h2><p>'+message+'</p><div class="button_div">'
			+'</div></div></div><div class="box-b"><div class="box-brc"></div><div class="box-blc"></div><div class="box-footer"></div></div></div>');
	var jbutton_div = jdialog.find('.button_div');
	
	for (var i=0; i<buttons.length; i++)
	{
		var jbutton = $('<button'+(buttons[i].class_name!=null ? ' class="'+buttons[i].class_name+'"' : '')+'>'+buttons[i].label+'</button>');
		jbutton.click(buttons[i].click);
		jbutton.click(
			function (event)
			{
				jdialog_background.remove();
				jdialog.remove();
			}
		);
		
		jbutton_div.append(jbutton);
	}
	
	body.prepend(jdialog_background).prepend(jdialog);
	
	var html_document = $('html');
	
	var height1 = jdialog_background.height();
	var height2 = parseInt(html_document.css('height'))+parseInt(body.css('padding-top'))+parseInt(body.css('padding-bottom'))
		+parseInt(body.css('margin-top'))+parseInt(body.css('margin-bottom'));
	var height3 = html_document.outerHeight(true);

	var height = height1;
	if (height2>height) { height = height2; }
	if (height3>height) { height = height3; }
	if (height>height1)
	{
		jdialog_background.height(height3);
	}
	jdialog.css({'top':(html_document.scrollTop()+($(window).height()-parseInt(jdialog.height()))/2.5)+'px','left':((body.width()-400)/2)+'px'});
	//app.form_enhancer.processFields(jdialog);
}

var app = null;
var ApplicationManager = function (images_path)
{
	this.images_path = images_path;
	this.form_enhancer = null;
	app = this;
	
	/* --- Methodes --- */
	
	// Ajout des listeners sur les champs de formulaire
	this.init = function ()
	{
		var manager = this;
		//this.form_enhancer = new FormEnhancer(['date-picker','hue-picker','radio','checkbox','textfield','button','richtext-field','email-field','website-field'],this.images_path);

		setTimeout(function () { $('div.message').not('.error').fadeOut('slow'); }, 5000);
	}

	this.setLocation = function (url, check)
	{
		document.location = url;
	}

	this.splitLines = function (regex1,regex2,text)
	{
		text = text.replace(regex1,'\n$1');
		if (regex2!=null) { text = text.replace(regex2,'$1\n'); }
		return text;
	}
	
	this.concatLines = function (text)
	{
		return text.replace(/[\r\n]*/g,'');
	}

	this.pregreplace = function (regex, replacement, text)
	{
		text = text.replace(regex, replacement);
		return text;
	}
	
	this.cleanHTMLCode = function (text)
	{
		var tags_array = null;
		var tag = null;
	
		text = this.pregreplace(/<br( [^>]*)?>/gi,'<br />',text);
	
		text = this.pregreplace(/<(\/)?strong>/gi,'<$1b>',text);
		text = this.pregreplace(/<(\/)?em>/gi,'<$1i>',text);
		text = this.pregreplace(/<(\/)?strike>/gi,'<$1s>',text);
	
		tags_array = new Array('b','i','u','s','ul','ol','li','span','a');
		for (var i=0; i<tags_array.length; i++)
		{
			tag = tags_array[i];
			text = this.splitLines(new RegExp('(<'+tag+'( [^>]*)?>)','gi'),new RegExp('(</'+tag+'>)','gi'),text);
			text = this.pregreplace(new RegExp('<('+tag+')( style="[^"]*)font-weight: bold;([^"]*")( [^>]*)?>(.*)<\/'+tag+'>','gim'),'<b><$1$2$3$4>$5</$1></b>',text);
			text = this.pregreplace(new RegExp('<('+tag+')( style="[^"]*)font-style: italic;([^"]*")( [^>]*)?>(.*)<\/'+tag+'>','gim'),'<i><$1$2$3$4>$5</$1></i>',text);
			text = this.pregreplace(new RegExp('<('+tag+')( style="[^"]*text-decoration:) underline([^"]*")( [^>]*)?>(.*)<\/'+tag+'>','gim'),'<u><$1$2$3$4>$5</$1></u>',text);
			text = this.pregreplace(new RegExp('<('+tag+')( style="[^"]*text-decoration:) line-through([^"]*")( [^>]*)?>(.*)<\/'+tag+'>','gim'),'<s><$1$2$3$4>$5</$1></s>',text);
			text = this.pregreplace(new RegExp('<('+tag+') style="[ ]*(text-decoration:[ ]*;)?[ ]*"( [^>]*)?>(.*)</'+tag+'>','gim'),'<$1$3>$4</$1>',text);
			if (tag=='span') { text = this.pregreplace(new RegExp('<span>(.*)</span>','gim'),'$1',text); }
			text = this.concatLines(text);
		}
		
		tags_array = new Array('b','i','u','s','ul','ol','li');
		for (var i=0; i<tags_array.length; i++)
		{
			text = this.pregreplace(new RegExp('<'+tags_array[i]+'></'+tags_array[i]+'>','gi'),'',text);
		}
	
		tags_array = new Array('b','i');
		for (var i=0; i<tags_array.length; i++)
		{
			text = this.pregreplace(new RegExp('</'+tags_array[i]+'>(([ ]*<br />[ ]*)*)<'+tags_array[i]+'>','gi'),'$1',text);
		}
	
		tags_array = new Array('u','s');
		for (var i=0; i<tags_array.length; i++)
		{
			text = this.pregreplace(new RegExp('</'+tags_array[i]+'>((<br />)*)<'+tags_array[i]+'>','gi'),'$1',text);
		}
	
		return text;
	}

	// Gestion de la selection
	this.getSelectedText = function ()
	{
		// Mozilla
		if (typeof this.focused_element.selectionStart != 'undefined')
		{
			var text_length = this.focused_element.textLength;
			var start = this.focused_element.selectionStart;
			var end = this.focused_element.selectionEnd;
			if (end == 1 || end == 2) 
			{
				end = text_length;
			}
	
			return this.focused_element.value.substring(start,end);
		}
		// IE
		else if (typeof document.selection != 'undefined')
		{
			this.focused_element.focus();
			var range = document.selection.createRange();
			return range.text;
		}
		else { return null; }
	}
	
	this.selectionToUpperCase = function ()
	{
		if (this.focused_element!=null)
		{
			var selected_text = this.getSelectedText();
			if (selected_text!=null)
			{
				this.changeSelection('',selected_text.toUpperCase(),'')
			}
		}
	}
	
	this.selectionToLowerCase = function ()
	{
		if (this.focused_element!=null)
		{
			var selected_text = this.getSelectedText();
			if (selected_text!=null)
			{
				this.changeSelection('',selected_text.toLowerCase(),'')
			}
		}
	}
	
	this.changeSelection = function (prefixe, replacement, suffixe)
	{
		var selection = false;
	
		// Mozilla
		if (typeof this.focused_element.selectionStart != 'undefined')
		{
			var text_length = this.focused_element.textLength;
			var start = this.focused_element.selectionStart;
			var end = this.focused_element.selectionEnd;
	
			if (end == 1 || end == 2) 
			{
				end = text_length;
			}
	
			var before = (this.focused_element.value).substring(0,start);
			var selection = (this.focused_element.value).substring(start, end)
			var after = (this.focused_element.value).substring(end, text_length);
	
			var new_start = start;
			var new_end = end;
			var caret = start;
	
			if (replacement!=null)
			{
				this.focused_element.value = before + prefixe + replacement + suffixe + after;
				new_end += prefixe.length + replacement.length + suffixe.length;
				caret += prefixe.length;
			}
			else
			{
				// La selection contient deja les balises => on les supprime
				if (selection.substring(0,prefixe.length)==prefixe && selection.substring(selection.length-suffixe.length,selection.length)==suffixe)
				{
					this.focused_element.value = before + selection.substring(prefixe.length,selection.length-suffixe.length) + after;
					new_end -= (prefixe.length + suffixe.length);
				}
				// La selection est entouree par les balises => on les supprime
				else if (before.substring(before.length-prefixe.length,before.length)==prefixe && after.substring(0,suffixe.length)==suffixe)
				{
					this.focused_element.value = before.substring(0,before.length-prefixe.length) + selection + after.substring(suffixe.length,after.length);
					new_start -= prefixe.length;
					new_end -= prefixe.length;
					caret = new_start;
				}
				// On ajoute les balises
				else
				{
					this.focused_element.value = before + prefixe + selection + suffixe + after;
					new_end += prefixe.length + suffixe.length;
					caret += prefixe.length;
				}
			}
	
			// Modification de la selection
			if (end-start>0)
			{
				this.focused_element.selectionStart = new_start;
				this.focused_element.selectionEnd = new_end;
			}
			// Positionnement du curseur
			else
			{
				this.focused_element.selectionStart = caret;
				this.focused_element.selectionEnd = caret;
			}
		}
		// IE
		else if (typeof document.selection != 'undefined')
		{
			this.focused_element.focus();
			var range = document.selection.createRange();
			var selection = range.text;
	
			var new_start = 0;
			var new_end = 0;
			var caret = 0;
			
			if (replacement!=null)
			{
				if (selection==prefixe + replacement + suffixe)
				{
					range.text = '';
				}
				else
				{
					range.text = prefixe + replacement + suffixe;
				}
			}
			else
			{
				var new_text = '';
				
				// La selection contient deja les balises => on les supprime
				if (selection.substring(0,prefixe.length)==prefixe && selection.substring(selection.length-suffixe.length,selection.length)==suffixe)
				{
					new_text = selection.substring(prefixe.length,selection.length-suffixe.length);
				}
				else
				{
					var range2 = range.duplicate();
					range2.moveStart('character', -prefixe.length);
					range2.moveEnd('character', suffixe.length);
					var selection2 = range2.text;
	
					// La selection est entouree par les balises => on les supprime
					if (selection2.substring(0,prefixe.length)==prefixe && selection2.substring(selection2.length-suffixe.length,selection2.length)==suffixe)
					{
						range = range2;
						selection = selection2;
						new_text = selection2.substring(prefixe.length,selection2.length-suffixe.length);
						caret += prefixe.length.length;
					}
					// On ajoute les balises
					else
					{
						new_text = prefixe + selection + suffixe;
						caret = -suffixe.length;
					}
				}
	
				range.text = new_text;
				new_start = -new_text.length;
			}
	
			if (selection.length==0)
			{
				range.move('character', caret);
			}
			else
			{
				// Si la selection contient des caracteres \n, on doit modifier le positionnement de la selection
				var array = selection.match(/\n/g);
				if (array!=null) { new_start += array.length; }
				range.moveStart('character', new_start);
				range.moveEnd('character', new_end);
			}
			
			range.select();
			selection = '';
		}
	}

	this.preload = function (image)
	{
		var image_element = new Image();
		image_element.src = image;
	}

	// Boite d'alerte
	this.alert = function (message, title_text, ok_button_text)
	{
		if (typeof title_text=='undefined' || title_text==null) { title_text = 'Alerte'; }
		if (typeof ok_button=='undefined' || ok_button==null) { ok_button = new DialogButton('OK',null); }

		new Dialog('alert',message,title_text,[ok_button]);
	}

	// Boite de confirmation
	this.confirm = function (message, title_text, ok_button, cancel_button)
	{
		if (typeof title_text=='undefined' || title_text==null) { title_text = 'Confirmation'; }
		if (typeof ok_button=='undefined' || ok_button==null) { ok_button = new DialogButton('OK',null,'ok-button'); }
		if (typeof cancel_button=='undefined' || cancel_button==null) { cancel_button = new DialogButton('Annuler',null,'cancel-button'); }

		new Dialog('confirm',message,title_text,[ok_button,cancel_button]);
	}

	this.submit = function (jform, form_action_suffixe)
	{
		jform.attr('action',jform.attr('action')+form_action_suffixe);
		jform.submit();
	}

	// Gestion du menu
	this.preload(this.images_path+'/style/list-selected-item.png');
	
	this.menu_items = $('#menu .menu-item');
	this.selectMenuGroup = function (section)
	{
		this.menu_items.removeClass('selected').children('.submenu').hide();
		var selected_item = $('#'+section+'_menu.group');
		selected_item.addClass('selected').children('.submenu').show();
		selected_item.children('a').blur();
		return false;
	}

	this.init();
}