| Current Path : /home/balossw/www/temp/common/cms/media/js/ |
| 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();
}