function SelectareRand(rand,justSelect){
									var celule = $A(rand.getElementsByTagName('td'));
							        celule.each(function(celula){
							                        if (Element.hasClassName(celula, 'selected'))
							                            Element.removeClassName(celula,'selected');
							                        else{
							                            Element.addClassName(celula,'selected');
							                            Element.removeClassName(celula,'tdover');
							                        }
							                     }
							                    );
                                        if (justClick_run!=null && justSelect!="ok") {
                                          justClick.init(rand);
                                        }
}

function DeselectAll(rand){
									_dirSel = 0;
									randuriSelectate.each(
										function (rand){
									       _selRand(rand); //deselectare
										}
									);
									randuriSelectate.clear();
									randuriSelectate.push(rand);
}

function getTextWidth(str, fontfamily,size)
{
	var wid, testSPAN = document.createElement('span');
	testSPAN.style.position = 'absolute';
	testSPAN.style.fontSize=size;
	testSPAN.style.visibility = 'hidden';
        testSPAN.style.fontFamily = fontfamily;
	testSPAN.appendChild(document.createTextNode(str));
	document.getElementsByTagName('body')[0].appendChild(testSPAN);
	wid = testSPAN.offsetWidth;
	testSPAN = null;
        return wid;
}

function to_date(s){
  var d1=new Date();
  d1.setYear(s.substring(6,10));
  d1.setMonth(s.substring(3,5)*1-1,s.substring(0,2))
  if (s.length>10) d1.setHours(s.substring(11,13),s.substring(14,16),0);
  else d1.setHours(12,0,0);
  return d1;
}

function SchimbRanduri(rand1,rand2){
    for (i=0;i<rand1.cells.length;i++){
        vt=rand1.cells[i].innerHTML;
        rand1.cells[i].innerHTML=rand2.cells[i].innerHTML;
        rand2.cells[i].innerHTML=vt;
    }
}

function sorted(col){
  if (col){
    var s=ReplaceTags(col.innerHTML);
    if (s.substring(s.length-4)==" (C)") return 1;
    else if (s.substring(s.length-4)==" (D)") return 2;
    else return 0;
  }
  return 0;
}

function SwitchHeaderText(col){
  if (col){
    var s=ReplaceTags(col.innerHTML);
    if (s.substring(s.length-4)==" (C)") s="<SPAN>"+s.substring(0,s.length-4)+" (D)</SPAN>";
    else if (s.substring(s.length-4)==" (D)") s="<SPAN>"+s.substring(0,s.length-4)+" (C)</SPAN>";
    else s="<SPAN>"+s+" (C)</SPAN>";
  }
  return s;
}

function ResetHeaderText(h){
  if (h){
    var s=h;
    if (s.substring(s.length-4)==" (C)") s=s.substring(0,s.length-4);
    else if (s.substring(s.length-4)==" (D)") s=s.substring(0,s.length-4);
  }
  return s;
}

var resizeMyColumn =
{
    obj:null,
    objTable: null,
    nrColumn : -1,

	init:function(obj)
    {
		obj.onmousedown = resizeMyColumn.start;
        obj.onDragStart=new Function();
        obj.onDragEnd=new Function();
        obj.onDrag=new Function();
    }

    ,start:function(evt)
    {
        document.ondblclick = resizeMyColumn.dblclick;
        var obj = resizeMyColumn.obj = this;
        app=navigator.appName;
				if (app!="Netscape") resizeMyColumn.objTable = this.parentNode.parentNode.parentNode.parentNode;
				else resizeMyColumn.objTable = this.parentNode.parentNode.parentNode;
				
		resizeMyColumn.nrColumn = $A(resizeMyColumn.objTable.getElementsByTagName('th')).indexOf(obj.parentNode);
    var tab=resizeMyColumn.objTable;
    for (i=0;i<tab.rows[0].cells.length;i++) {
      col = $A(tab.getElementsByTagName('col'))[i];
  		col.width=col.offsetWidth;
    };

        evt = resizeMyColumn.fixE(evt);

        if(evt.button==2||evt.button==3)
            return true;

        obj.lastMouseX = evt.clientX;

        document.onmousemove = resizeMyColumn.drag;
        document.onmouseup = resizeMyColumn.end;
        return false;
    }

    ,drag:function(evt)
    {
        evt = resizeMyColumn.fixE(evt);
        var obj = resizeMyColumn.obj;

		col = $A(resizeMyColumn.objTable.getElementsByTagName('col'))[resizeMyColumn.nrColumn];
		//col.width=col.offsetWidth;
		//window.status=col.width

		var dif =  parseInt(evt.clientX,10)-parseInt(obj.lastMouseX,10);
		var newColWidth = parseInt(col.width,10)+ dif;
		var newTableWidth = parseInt(resizeMyColumn.objTable.width,10) +dif;

		if (newColWidth<20)
		{
			newTableWidth +=20-newColWidth;
            newColWidth = 20;
		}
		col.width = newColWidth + 'px';
		resizeMyColumn.objTable.width = newTableWidth + 'px';

        obj.lastMouseX = evt.clientX;
        return false
    }
    ,dblclick:function()
    {
      autoSize.init(resizeMyColumn.obj);
    }
    ,end:function()
    {
        document.onmousemove=null;
        document.onmouseup=null;
        obj = resizeMyColumn.obj;

		obj.onDragEnd();

        moveMyObject.obj=null
    }

    ,fixE:function(evt)
    {
        if(typeof evt=="undefined") evt=window.event;
        if(typeof evt.layerX=="undefined") evt.layerX=evt.offsetX;
        if(typeof evt.layerY=="undefined") evt.layerY=evt.offsetY;
        return evt;
    }
}

var doubleClick =
{
    obj:null,
    objTable: null,
    colNumber: null,
    rowNumber: null,
    f: null,

  	init:function(obj)
      {
  		obj.ondblclick = doubleClick.start;
  		return true;
      }

    ,start:function(evt)
    {
        var obj = doubleClick.obj = this;
        app=navigator.appName;
				if (app!="Netscape") {doubleClick.objTable = this.parentNode.parentNode.parentNode;tag='th';st=1;}
				else {doubleClick.objTable = this.parentNode.parentNode;tag='td';st=0;}

				var rows=$A(doubleClick.objTable.getElementsByTagName('tr'));

				var tot_rows=rows.length;
        var tot_cols=$A(rows[0].getElementsByTagName(tag)).length;
				var id=this.parentNode.cells[0];
				var all_cols=$A(this.parentNode.parentNode.getElementsByTagName('td'));

				doubleClick.rowNumber=Math.floor(all_cols.indexOf(id)/tot_cols);

				var cols=$A(rows[doubleClick.rowNumber+st].getElementsByTagName('td'));

				doubleClick.colNumber = cols.indexOf(this);
				
				if (app=="Netscape") doubleClick.objTable=doubleClick.objTable.parentNode;

				if (doubleClick_run!=null) doubleClick_run();

				return true;

    }

    ,end:function()
    {
        document.ondblclick=null;
        obj = doubleClick.obj;
        return true;

    }

}

var justClick =
{
    obj:null,
    objTable: null,
    colNumber: null,
    rowNumber: null,
    f: null,

  	init:function(obj)
      {
  		obj.onclick = justClick.start;
  		return true;
      }

    ,start:function(evt)
    {
        var obj = justClick.obj = this;
        app=navigator.appName;
				if (app!="Netscape") {justClick.objTable = this.parentNode.parentNode;tag='th';st=1;}
				else {justClick.objTable = this.parentNode;tag='td';st=0;}

				var rows=$A(justClick.objTable.getElementsByTagName('tr'));

				var tot_rows=rows.length;
        var tot_cols=$A(rows[0].getElementsByTagName(tag)).length;
				var id=this.cells[0];
				var all_cols=$A(this.parentNode.getElementsByTagName('td'));
				
				justClick.rowNumber=Math.floor(all_cols.indexOf(id)/tot_cols);

				var cols=$A(rows[justClick.rowNumber+st].getElementsByTagName('td'));

				justClick.colNumber = cols.indexOf(this);

				if (app=="Netscape") justClick.objTable=justClick.objTable.parentNode;

				if (justClick_run!=null) justClick_run(justClick.rowNumber,justClick.colNumber);

				return true;

    }

    ,end:function()
    {
        document.onclick=null;
        obj = justClick.obj;
        return true;
    }

}

var autoSize =
{
    obj:null,
    objTable: null,

  	init:function(obj)
      {
  		obj.ondblclick = autoSize.start;
      }

    ,start:function(evt)
    {
        var obj = autoSize.obj = this;
        app=navigator.appName;
				if (app!="Netscape") {autoSize.objTable = this.parentNode.parentNode.parentNode.parentNode;st=1;}
				else {autoSize.objTable = this.parentNode.parentNode.parentNode;st=0;}

    		var n = $A(autoSize.objTable.getElementsByTagName('th')).indexOf(obj.parentNode);
        var tab=autoSize.objTable;
        var rows=$A(tab.getElementsByTagName('tr'));
        maxwidth=0;
        for (i=st;i<rows.length;i++) if (getTextWidth(ReplaceTags(rows[i].cells[n].innerHTML),"verdana","11")>maxwidth)
          maxwidth=getTextWidth(ReplaceTags(rows[i].cells[n].innerHTML),"verdana","11")
        col = $A(tab.getElementsByTagName('col'))[n];
  		  col.width=maxwidth;
				return false;

    }

    ,end:function()
    {
        document.ondblclick=null;
        obj = autoSize.obj;

    }

    ,fixE:function(evt)
    {
        if(typeof evt=="undefined") evt=window.event;
        if(typeof evt.layerX=="undefined") evt.layerX=evt.offsetX;
        if(typeof evt.layerY=="undefined") evt.layerY=evt.offsetY;
        return evt;
    }
}

var grid = Array();
var gridTable = Array();

var initGrid = {
        '.grid': function(objGrid){
            grid.push(new Grid(objGrid));
            gridTable.push(objGrid);
            grid.last().colorize();
            //grid.setColumnAlign("CNP", "right");
            //Grid.setColumnAlign(grid, "Prenume", "center");
        }
};
if(!stop_behaviour) Behaviour.register(initGrid);

var Grid = Class.create();
Grid.prototype = {
    objGrid: Object(),
    randuriSelectate: Array(),
    _dirSel: 0,
    initialize: function (grid){
          objGrid = grid;
          randuriSelectate = new Array();
          _dirSel = 0;
          if(!stop_behaviour) this._registerBehaviour();
          this.eliminateRightBorder();
          //this.maxResize();
    },

    _registerBehaviour: function(){
        var generalRules = {
                '.grid tr' : function(rand){
                        /* rand.onkeydown = function(thisOne){
                            var keycode = window.event ? window.event.keyCode : thisOne.which;
            									//_dirSel = 0;
            									if (keycode == 40 || keycode == 38){
              							    _selRand = function(rand){
                                  SelectareRand(rand);
                								};
                                document.DataGridSelections.SelectedRows.value = "";
              									var randuri = $A(rand.parentNode.getElementsByTagName('tr')); //get table rows
              									var iRand = randuri.indexOf(rand);
              									_dirSel = 0;
              									randuriSelectate.each(
              										function (rand2){
              									       _selRand(rand2); //deselectare
              										}
              									);
              									randuriSelectate.clear();
                                if (keycode == 40){
                									if (iRand < randuri.length - 1) iRand++;
                									else iRand = 0;
                                }
                                else if (keycode == 38){
                									if (iRand >0) iRand--;
                									else iRand = randuri.length - 1;
                                }
                                rand = randuri[iRand];
                                //event = Utils.getEvent(event);
                                randuriSelectate.push(rand);
                								randuriSelectate.each(function (i) {document.DataGridSelections.SelectedRows.value += i.id+"#"+i.cells[0].innerHTML + ","; });

                                                //(de)selectare linie
                                                _selRand(rand);
                            }
                        }; */
                        rand.onmouseover = function(){
                                var celule = $A(rand.getElementsByTagName('td'));
                                celule._each(function(celula){
                                    if (!Element.hasClassName(celula, 'selected'))
                                        Element.addClassName(celula, 'tdover');}
                                );
                        };
                        rand.onmouseout = function(){
                                var celule = $A(rand.getElementsByTagName('td'));
                                celule._each(function(celula){
                                    Element.removeClassName(celula, 'tdover');}
                                );
                        };
                        rand.onmousedown = function(event){
								document.DataGridSelections.SelectedRows.value = "";
							    _selRand = function(rand){
                    SelectareRand(rand);
								};

                                event = Utils.getEvent(event);

								//administrare vector linii selectate
								//nici un modifier
								if (event.ctrlKey == false && event.altKey == false && event.shiftKey == false){
                  DeselectAll(rand);
								}
								//doar ctrl apasat
								else if (event.ctrlKey == true && event.altKey == false && event.shiftKey == false){
									_dirSel = 0;
									if (randuriSelectate.indexOf(rand) == -1) {
										randuriSelectate.push(rand);
									}
	                                else {
										randuriSelectate.removeItem(rand);
									}
								}
								//doar shift apasat
								else if (event.ctrlKey == false && event.altKey == false && event.shiftKey == true){
									var ultimulRandSelectat = randuriSelectate.pop();

									var randuri = $A(rand.parentNode.getElementsByTagName('tr')); //get table rows
									var iPenultimulRandSelectat = randuri.indexOf(ultimulRandSelectat);
									var iRand = randuri.indexOf(rand);
									var newDirSel = (iRand - iPenultimulRandSelectat) > 0 ? 1 : -1;
									//window.status = (iPenultimulRandSelectat+1) + "->" + (iRand+1) + "[" + newDirSel + "]   ";

									if (_dirSel == 0){//first time shift
										//window.status += "{=0}";
										randuriSelectate.each(function (rand){_selRand(rand);}); //deselectare
										randuriSelectate = new Array();
									}
									else if (newDirSel != _dirSel){
										//window.status += "{!=}";
										if (iRand == iPenultimulRandSelectat){//shift fara efect
											randuriSelectate.push(ultimulRandSelectat);
											return;
										}
										if (randuriSelectate.indexOf(rand) == -1) {//shift in directia opusa
											randuriSelectate.push(ultimulRandSelectat);
											ultimulRandSelectat = randuriSelectate.shift();
											iPenultimulRandSelectat = randuri.indexOf(ultimulRandSelectat);
											/*var str = "";
											randuriSelectate.each(function (i) { str += i.id + ","; });
											alert(str);*/
											randuriSelectate.each(function (rand){_selRand(rand); }); //deselectare
											randuriSelectate = new Array();
										}
										else{//shift decremental
											var range = $A(Utils.getRange(iRand + 1, iPenultimulRandSelectat));
											//alert(range.inspect());
											for (i = range.first(); i <= range.last(); i++) {
													_selRand(randuri[i]);
													randuriSelectate.removeItem(randuri[i]);
													//alert(i + ";" + randuriSelectate.inspect());
											}
											/*var str = "";
											randuriSelectate.each(function (i) { str += i.id + ","; });
											alert(str);*/
											return;
										}
									}
									else {//shift incremental
										//window.status += "{==}";
									}
									_dirSel = newDirSel;

									randuriSelectate.push(ultimulRandSelectat);
									if (_dirSel > 0){
										for (var i = iPenultimulRandSelectat + 1; i < iRand; i++) {
											randuriSelectate.push(randuri[i]);
											_selRand(randuri[i]);
										}
									}
									else if (_dirSel < 0){
										iPenultimulRandSelectat = randuri.indexOf(ultimulRandSelectat);
										for (var i = iPenultimulRandSelectat - 1; i > iRand; i--) {
											randuriSelectate.push(randuri[i]);
											_selRand(randuri[i]);
										}
									}
									randuriSelectate.push(rand);
								}
								randuriSelectate.each(function (i) {document.DataGridSelections.SelectedRows.value += i.id+"#"+i.cells[0].innerHTML + ","; });

                                //(de)selectare linie
                                _selRand(rand);
                        };
                },
                '.grid th' : function(thCelula){
                        thCelula.onmouseover = function(){ Element.addClassName(thCelula, 'thover'); };
                        thCelula.onmouseout  = function(){ Element.removeClassName(thCelula, 'thover'); };
                },
                '.grid th .resize' : function(spanResize)
                {
					resizeMyColumn.init(spanResize);
				},
				'.grid td' : function (item)
				{
          doubleClick.init(item);
        },
				'.grid th .colName' : function (thCelula)
				{
					thCelula.onmousedown = function(event)
					{
            app=navigator.appName;
            var objTable;
						if (app=="Netscape") {
              objTable = this.parentNode.parentNode.parentNode;
              st=0;
              }
						else {objTable = this.parentNode.parentNode.parentNode.parentNode;st=1;}
						var nrTh = $A(objTable.getElementsByTagName('th')).indexOf(this.parentNode);
            var tab=objTable;
            var reg1=new RegExp("\\b([0-9]+|\\.|\\,)\\b","i");
            var reg2=new RegExp("(0[1-9]|[12][0-9]|3[01])[\\. /.](0[1-9]|1[012])[\\. /.](19|20)\\d\\d","i");
            var reg3=new RegExp("[a-z]|[A-Z]","i");
            var cate=$A(this.parentNode.parentNode.getElementsByTagName('span')).length;
            for (i=0;i<cate;i++) if ((nrTh-tab.rows[0].cells.length+cate)!=i) if (i != nrTh){
              col = $A(tab.getElementsByTagName('col'))[i];

          		$A(this.parentNode.parentNode.getElementsByTagName('span'))[i].innerHTML =
                ResetHeaderText($A(this.parentNode.parentNode.getElementsByTagName('span'))[i].innerHTML);

            };
						//alert(nrTh);
// 						alert(objTable.rows[0].cells[nrTh].innerHTML)
            var ordine=sorted(this);
            var d1=new Date();
            var d2=new Date();
						var sortat=false;
						while (!sortat){
						    sortat=true
						    for (i=st;i<objTable.rows.length-1;i++)
						    {
                      v1=ReplaceTags(objTable.rows[i].cells[nrTh].innerHTML);
                      v2=ReplaceTags(objTable.rows[i+1].cells[nrTh].innerHTML)
                      if (reg3.test(v1) && reg3.test(v2)){
                        if (ordine==0 || ordine==2) conditie=(v1.toUpperCase()>v2.toUpperCase());
                        else conditie=(v1.toUpperCase()<v2.toUpperCase());
                      }
                      else if (reg2.test(v1) && reg2.test(v2)){
                        d1=to_date(v1);
                        d2=to_date(v2);
                        if (ordine==0 || ordine==2) conditie=(d1>d2);
                        else conditie=(d1<d2);
                      }
                      else if (reg1.test(v1) && reg1.test(v2)){
                        v3=ToNumber(v1)*1;
                        v4=ToNumber(v2)*1;
                        if (ordine==0 || ordine==2) conditie=(v3>v4);
                        else conditie=(v3<v4);
                      }
                      else{
                        if (ordine==0 || ordine==2) conditie=(v1.toUpperCase()>v2.toUpperCase());
                        else conditie=(v1.toUpperCase()<v2.toUpperCase());
                      }
						        if (conditie){
						            SchimbRanduri(objTable.rows[i],objTable.rows[i+1]);
						            sortat=false;
						        }
						    }
						}
//             objTable.rows[0].cells[nrTh].innerHTML="<DIV class=colName><SPAN>" + getHeaderText(objTable.rows[0].cells[nrTh].innerHTML) + " (C)" +
//               "</SPAN></DIV><DIV class=resize>&nbsp;</DIV>";
            this.innerHTML=SwitchHeaderText(this);

						//objTable.refreshTable();
            if(!stop_behaviour) Behaviour.register(generalRules);
						return false;
					}
    	        }
        };
        if(!stop_behaviour) Behaviour.register(generalRules);
    },
    _selRand: function(rand){
		var celule = $A(rand.getElementsByTagName('td'));
        celule._each(function(celula){
                        if (Element.hasClassName(celula, 'selected'))
                            Element.removeClassName(celula,'selected');
                        else{
                            Element.addClassName(celula,'selected');
                            Element.removeClassName(celula,'tdover');
                        }
                     }
                    );
	},
    colorize: function () {
        var gridRows = $A(objGrid.getElementsByTagName('tr'));
        gridRows._eachi(
            function (gridRow, i){
                if (i%2 == 0){
                    var gridCells = $A(gridRow.getElementsByTagName('td'));
                    gridCells._each(
                        function (gridCell){
                            Element.addClassName(gridCell, 'td1');
                        }
                    );
                }
            }
        );
    },
    eliminateRightBorder: function (){
        var gridRows = $A(objGrid.getElementsByTagName('tr'));
        gridRows._each(
            function (gridRow){
                var gridCells = $A(gridRow.getElementsByTagName('td'));
                if (gridCells != ""){
                    if (gridCells.last().style.borderRight != "")
	                    gridCells.last().style.borderRight = 'hidden';
                }
                else {
                    var gridCells = $A(gridRow.getElementsByTagName('th'));
                    if (gridCells.last().style.borderRight != "")
                    	gridCells.last().style.borderRight = 'hidden';
                }
            }
        );
    },
    setColumnAlign: function (numeColoana, align){
        var gridRows = $A(objGrid.getElementsByTagName('tr'));
        var gridCells = $A(gridRows.first().getElementsByTagName('th'));
        var indexColoana = -1;
        gridCells._eachi(
			function (gridCell, i){
				var columnName = $A(gridCell.getElementsByTagName('span'));
				if (columnName != ""){
					if (columnName.first().innerHTML == numeColoana)
						indexColoana = i;
				}
				else
					if (gridCell.innerHTML == numeColoana) {
					 indexColoana = i;
				}
			}
        );

        gridRows._each(
        	function(gridRow){
				var gridCells = $A(gridRow.getElementsByTagName('td'));
				if (gridCells != "" && typeof gridCells[indexColoana] != "undefined"){
					gridCells[indexColoana].style.textAlign = align;
				}
			}
        );
    },
    maxResize: function (){
		var objResize = $A(document.getElementsByClassName("resize"));
		objResize.each(
			function (obj){
				obj.style.height = (obj.parentNode.offsetHeight-5)+"px";
			}
		);
		var objCN = $A(document.getElementsByClassName("colName"));
		objCN.each(
			function (obj){
				obj.style.height = (obj.parentNode.offsetHeight-5)+"px";
			}
		);
	}
};