/**
 * Project:     AJAX
 * 
 * @author Eric Garin <eric@xmlnest.com>
 * @link http://www.xmlnest.com
 * @version 0.1
 */
var def={DB_ADD:"DB_ADD",DB_UPDATE:"DB_UPDATE",DB_DELETE:"DB_DELETE",DB_SEARCH:"DB_SEARCH",FORM_ADD:"FORM_ADD",FORM_UPDATE:"FORM_UPDATE"};function init_table(a){var d=slot.get(a);var c=d.rows.length;for(var b=0;b<c;b++){d.deleteRow(0)}}function create_cell(c,b){var a=c.insertCell(-1);a.innerHTML=b;return(a)}function delete_rows(f,c,a){var g=new RegExp("^"+c+":");for(var e=0;e<a.length;e++){var h=slot.get(f);var k=h.rows;for(var d=0;d<k.length;d++){var b=k[d].id.replace(g,"");if(b==a[e]){h.deleteRow(d);break}}}}function DOMtoString(a){try{return(new XMLSerializer()).serializeToString(a)}catch(b){try{return a.xml}catch(b){alert("Xmlserializer not supported")}}return false}function set_class(a,b){a.setAttribute("class",b);a.setAttribute("className",b)}function getGroupNode(g,e){var b=document.getElementsByTagName(e);var f=null,a=null;var c=new Array();for(var d=0;d<b.length;d++){f=b[d].getAttribute("id");if(f!=null){a=f.split(":")[0];if(a==g){c.push(b[d])}}}return(c)}var xut={encode:function(b){var a=String(b);a=a.replace(/&/g,"&amp;");a=a.replace(/</g,"&lt;");a=a.replace(/>/g,"&gt;");a=a.replace(/'/g,"&apos;");a=a.replace(/"/g,"&quot;");return(a)},print:function(b){var a=xut.encode(b);a=a.replace(/&gt;&lt;/g,"&gt;<br/>&lt;");return(a)}};function isIE(){if(arguments.length>0){var a=arguments[0];if(a==6){if(window.XMLHttpRequest){return(false)}else{return(true)}}else{alert("Version detection not supported yet !");return(false)}}else{if(window.attachEvent){return(true)}else{return(false)}}}function DataGrid(e,b){var g=this;var a=new GridID(e);this.header=null;if(b.header.create){var h=a.get_id("HEADER","TABLE","TABLE");this.header=new GridHEADER(h,a,g,b)}var j=a.get_id("GRID","FORM","FORM");var f=a.get_id("GRID","DIV","LIST");var d=a.get_id("GRID","TABLE","TABLE");this.reset_add=b.reset_add;slot.get(d).cellPadding=b.cellpadding;this.Ogriditem=new GridITEM(b.items);b.items.Oitemsys=this.Ogriditem.Oitemsys;this.grid_dom=new GridDOM(d,this.Ogriditem,b.model());this.grid_dom.events=b.dom_events;if(b.html){this.html_generate=b.html.generate;this.grid_html=new GridHTML(d,f,this.Ogriditem,b.model());this.grid_html.events=b.html.events;this.grid_html.cellpadding=b.cellpadding;this.grid_html.classname=b.html.classname;this.grid_html.table_attributes=b.html.table_attributes}else{this.html_generate=false}var c=false;this.check=null;if(this.header&&this.header.checkall){this.check=this.header.check;this.check.check_form_name=j;c=true}else{if(!this.header&&b.check_item.checkbox){this.check=new GridCHECK(null,j,b.check_item.checkname);c=true}}if(c){this.grid_dom.checkbox=true;this.grid_dom.checkclass=b.check_item.checkclass;this.grid_dom.checkname=b.check_item.checkname;if(this.html_generate){this.grid_html.checkbox=true;this.grid_html.checkclass=b.check_item.checkclass;this.grid_html.checkname=b.check_item.checkname}}this.counter=null;this.set_counter=function(k){this.counter=new GridCOUNTER(k)};this.paginator=null;this.set_paginator=function(l){var k=a.get_id("PAGE","TABLE","TABLE");var m=new GridITEM_PAGINATOR(l.items);this.paginator=new GridPAGINATOR(k,m,l.classname);this.paginator.Opage.auto_complete=l.auto_complete;this.paginator.Opage.nb_pages=l.nb_pages;this.paginator.events=l.events};this.resize_height=function(l){var k=slot.get(f);k.style.height=l};var i=true;this.display=function(k){i=true;if(this.html_generate){this.grid_html.create_table(k.rows)}else{this.grid_dom.create_list(k.rows)}if(this.paginator){if(k.count>0){this.paginator.create(k.page,k.count,k.nb_items);this.paginator.show()}else{this.paginator.hide()}}if(this.check){this.check.all_unselect()}if(this.counter){this.counter.set(k.count)}};this.add=function(k){if(this.reset_add){if(i){i=false;init_table(d);if(this.paginator){this.paginator.hide()}if(this.counter){this.counter.reset()}}}this.grid_dom.create_row(this.grid_dom.Ogriditem.on_add,k.id,k,0);if(this.counter){this.counter.increment(1)}};this.update=function(k){this.grid_dom.update_row(this.grid_dom.Ogriditem.on_update,k.id,k)};this.del=function(k){this.grid_dom.delete_rows(k.ids);if(this.paginator){this.paginator.del(k.nb_delete)}if(this.counter){this.counter.decrement(k.nb_delete)}}}function GridMODEL(){this.model=new Array();var a=function(){var b={name:null,title:null,classname:null,data:null};return(b)};this.add=function(){var b=new a();this.model.push(b);return(b)}}function GridHEADER(j,b,g,c){this.check=null;this.checkall=c.header.checkall;this.classname=c.header.classname;var m=slot.get(j);var n=m.insertRow(0);set_class(n,this.classname);if(this.checkall){var k=create_cell(n,'<input name="CHECK_ALL" type="checkbox"/>');set_class(k,c.check_item.checkclass);var a=b.get_id("HEADER","INPUT","CHECK_ALL");this.check=new GridCHECK(a,null,c.check_item.checkname);var l=slot.get(a);if(window.attachEvent){l.attachEvent("onclick",function(){g.check.check_all()})}else{l.addEventListener("click",function(){g.check.check_all()},false)}}var f=c.model();for(var e=0;e<f.length;e++){var k=create_cell(n,f[e].title);set_class(k,f[e].classname)}m.cellPadding=c.cellpadding;var d=16-(c.cellpadding*2);k=create_cell(n,"");k.style.width=d+"px"}function GridID(a){this.nodeGrid=slot.get(a);this.get_id=function(d,e,c){var f=this.search(this.nodeGrid,"TR",d);var b=this.search(f,e,c);var g=this.build_name(d,e,c);b.setAttribute("id",g);return(g)};this.search=function(b,f,d){var c=b.getElementsByTagName(f);for(var e=0;e<c.length;e++){if(c[e].getAttribute("name")==d){return(c[e])}}return(null)};this.build_name=function(d,e,c){var b=a.split("_");var f=b[0];var g=b[1];return(f+"_"+d+"_"+e+"_"+c+"_"+g)}}function GridHTML(b,a,d,c){this.table_name=b;this.events=function(f,e){return("")};this.checkbox=false;this.checkclass="check";this.checkname="check";this.cellpadding=5;this.table_attributes="";this.Ogriditem=d;this.Oitemsys=d.Oitemsys;this.create_table=function(f){var e="";e+='<table id="'+this.table_name+'" cellpadding="'+this.cellpadding+'" '+this.table_attributes+">"+this.create_list(f)+"</table>";slot.get(a).innerHTML=e};this.create_list=function(g){var e="";for(var f=0;f<g.length;f++){e+=this.create_row(d.init_state(g[f]),g[f].id,g[f])}return(e)};this.create_row=function(f,j,g){var e="";e+='<tr id="'+d.Oitemsys.group_name+":"+g.id+'" class="'+f+'" '+d.Oitemsys.state_attribute+'="'+f+'" '+this.events(j,this)+">";if(this.checkbox){e+='<td class="'+this.checkclass+'"><input name="'+this.checkname+'[]" type="checkbox" value="'+j+'"/></td>'}for(var h=0;h<c.length;h++){e+='<td class="'+c[h].classname+'">'+c[h].data(g)+"</td>"}e+="</tr>";return(e)}}function GridDOM(a,c,b){this.table_name=a;this.events=function(d,e){};this.checkbox=false;this.checkclass="check";this.checkname="check";this.Ogriditem=c;this.Oitemsys=c.Oitemsys;this.create_list=function(e){init_table(this.table_name);for(var d=0;d<e.length;d++){this.create_row(c.init_state(e[d]),e[d].id,e[d],-1)}};this.create_row=function(e,l,f,k){var h=document.getElementById(this.table_name);var j=h.insertRow(k);j.setAttribute("id",c.Oitemsys.group_name+":"+l);c.Oitemsys.set_state(j,e);c.Oitemsys.set_style(j,e);this.events(j,l,this);if(this.checkbox){var d=create_cell(j,'<input name="'+this.checkname+'[]" type="checkbox" value="'+l+'"/>');set_class(d,this.checkclass)}for(var g=0;g<b.length;g++){var d=create_cell(j,b[g].data(f));set_class(d,b[g].classname)}};this.update_row=function(e,k,g){var d=slot.get(c.Oitemsys.group_name+":"+k);var f=d.getElementsByTagName("td");var j;for(var h=0;h<b.length;h++){j=h;if(this.checkbox){j=h+1}f[j].innerHTML=b[h].data(g)}c.Oitemsys.set_state(d,e)};this.delete_rows=function(d){delete_rows(this.table_name,c.Oitemsys.group_name,d)}}function GridCHECK(a,c,b){this.check_all_name=a;this.check_form_name=c;this.check_item_name=b;this.check_all=function(){var e=document.getElementById(this.check_all_name);var d=this.get_check();if(d){if(!d.length){if(e.checked){d.checked=true}else{d.checked=false}}else{for(var f=0;f<d.length;f++){if(e.checked){d[f].checked=true}else{d[f].checked=false}}}}};this.all_unselect=function(){var d=document.getElementById(this.check_all_name);if(d){d.checked=false}};this.all_select=function(){var d=document.getElementById(this.check_all_name);if(d){d.checked=true}};this.is_selection=function(){var d=this.get_check();var f=false;if(d){if(!d.length){if(d.checked){f=true}}else{for(var e=0;e<d.length;e++){if(d[e].checked){f=true;break}}}}return(f)};this.get_check=function(){return(document.forms[this.check_form_name].elements[this.check_item_name+"[]"])}}function GridPAGINATOR(a,b,c){this.table_name=a;this.classname=c;this.events=function(e,d,f){};this.Opage=new Paginator();this.Opage.auto_complete=true;this.Opage.nb_pages=10;this.Ogriditem=b;this.Oitemsys=b.Oitemsys;this.create=function(g,k,f){this.Opage.nb_items=f;this.Opage.page_on=g;this.Opage.count=k;init_table(this.table_name);var j=document.getElementById(this.table_name);var l=j.insertRow(0);var e=this.create_link(l,this.Opage.page_min(),this.Opage.page_min());e=this.create_link(l,this.Opage.page_prec(),"&lt;&lt;");var d=this.Opage.pages();for(var h=0;h<d.length;h++){e=this.create_link(l,d[h],d[h]);if(d[h]==this.Opage.page_on){b.Oitemsys.turn_on(e);b.Oitemsys.set_state(e,b.on_current)}}e=this.create_link(l,this.Opage.page_next(),"&gt;&gt;");e=this.create_link(l,this.Opage.page_max(),this.Opage.page_max())};this.del=function(d){this.Opage.count-=d;this.create(this.Opage.page_on,this.Opage.count,this.Opage.nb_items)};this.show=function(){slot.show(this.table_name)};this.hide=function(){slot.hide(this.table_name)};this.create_link=function(g,e,f){var d=null;if(e!=null){d=create_cell(g,f);this.events(d,e,this)}else{d=create_cell(g,"&nbsp")}b.Oitemsys.set_state(d,b.init_state());b.Oitemsys.set_style(d,b.init_state());set_class(d,this.classname);return(d)}}function GridCOUNTER(a){this.counter_name=a;this.set=function(b){slot.get(this.counter_name).innerHTML=b};this.reset=function(){slot.get(this.counter_name).innerHTML=0};this.increment=function(b){slot.get(this.counter_name).innerHTML=Number(slot.get(this.counter_name).innerHTML)+b};this.decrement=function(b){slot.get(this.counter_name).innerHTML=Number(slot.get(this.counter_name).innerHTML)-b}}function ItemSys(c,b,a){this.states=c.states;this.group_name=b;this.dom_name=a;this.state_attribute="state";this.turn_on=function(d){this.turn_off_all();this.set_style(d,c.item_on)};this.turn_off_all=function(){var d=getGroupNode(this.group_name,this.dom_name);for(var e=0;e<d.length;e++){this.turn_off(d[e])}};this.turn_off=function(e){var d=null;d=e.getAttribute(this.state_attribute);if(d){this.set_style(e,d)}};this.set_style=function(e,d){e.style.backgroundColor=this.states[d].bgcolor;e.style.color=this.states[d].color};this.set_state=function(d,e){d.setAttribute(this.state_attribute,e)}}function ItemState(){this.item_on=null;this.states=new Object();var a=function(){var b={bgcolor:null,color:null};return(b)};this.add=function(d,b,c){var e=new a();this.states[d]=e;return(e)};this.item_on=function(b){this.item_on=b}}function GridITEM(a){this.Oitemsys=new ItemSys(a.states(),a.group_name,a.dom_name);this.init_state=null;this.active_rule=function(b){this.init_state=a.init_state[Number(b)]};this.active_rule(0);this.on_add=a.on_add;this.on_update=a.on_update}function GridITEM_PAGINATOR(a){this.Oitemsys=new ItemSys(a.states(),a.group_name,a.dom_name);this.init_state=a.init_state;this.on_current=a.on_current}function Paginator(){this.nb_items=0;this.count=0;this.page_on=0;this.nb_pages=10;this.auto_complete=true;this.page_first=function(){var b=this.nb_pages;if(this.page_on>this.total()){this.page_on=this.total()}var c=this.page_on;var a=1;if((c%b)==0){a=(c-b)+1}else{a=((Math.floor(c/b)*b)+1)}return(Number(a))};this.page_last=function(){var a=this.pages();var b=a.length;if(b>0){return(a[b-1])}else{return(1)}};this.total=function(){var c=this.count;var a=this.nb_items;var b=Math.ceil(c/a);return(Number(b))};this.page_prec=function(){var a=this.pages();var c=a.length;var b=null;if((c>0)&&(a[0]>1)){b=a[0]-1}return(b)};this.page_next=function(){var c=this.page_last();var b=this.total();var a=null;if(c<b){a=c+1}return(a)};this.page_min=function(){var a=null;if(this.count>0){a=1}return(a)};this.page_max=function(){var a=null;if(this.count>0){a=this.total()}return(a)};this.pages=function(){var c=this.page_first();var b=this.nb_pages;var h=this.total();var a=new Array();for(var e=c;e<(c+b);e++){if(e>h){break}a.push(e)}if(this.auto_complete){var g=a.length;if((g<b)&&(g>0)){var d=a[0];var f=a[g-1];for(var e=(d-1);e>(f-b);e--){if(e>0){a.unshift(e)}}}}return(a)};this.show_values=function(){alert("pages : "+this.pages().join(", ")+"\ntotal : "+this.total()+"\npage_min : "+this.page_min()+"\npage_prec : "+this.page_prec()+"\npage_first : "+this.page_first()+"\npage_last : "+this.page_last()+"\npage_next : "+this.page_next()+"\npage_max : "+this.page_max())}}var slot={get:function(a){var b=document.getElementById(a);if(b){return(b)}else{b=document.getElementsByName(a);if(b){return(b.item(0))}}return(null)},show:function(a){slot.get(a).style.display="block"},hide:function(a){slot.get(a).style.display="none"}};function Popup(h,c,b,d,e){this.obj=slot.get(h);this.show=function(){slot.show(h)};this.hide=function(){slot.hide(h)};this.alert=function(i){this.show();slot.get(c).innerHTML=i;this.obj.style.zIndex=15};this.size=function(i,k){var j=this.obj;j.style.height=String(i+"px");j.style.width=String(k+"px")};this.position=function(i){var j=this.obj;if((i=="fixed")&&(isIE(6))){j.style.position="absolute"}else{j.style.position=i}};this.coords=function(k,j){var i=this.obj;i.style.top=String(k+"px");i.style.left=String(j+"px")};this.centered=function(i,j){var l=((screen.height-i)/2)-120;var k=((screen.width-j)/2);if(isIE(6)){}this.coords(l,k)};this.size(b,d);if(e==null){this.position("fixed");this.centered(b,d)}else{var a=e[0];var g=e[1];var f=e[2];this.position(a);this.coords(g,f)}}var zone={on:function(d){var a=getGroupNode("Z","DIV");var b=null;for(var c=0;c<a.length;c++){b=null;if(a[c].name){b=a[c].name}else{if(a[c].id){b=a[c].id}}if(b){zone.off(b)}}slot.show(d)},off:function(a){slot.hide(a)}};var mask={show:function(b){var a=slot.get(b).parentNode;slot.get(b).style.height=a.style.height;slot.get(b).style.width=a.style.width;slot.show(b)},hide:function(a){slot.hide(a)}};