function open_win(url) {
	var a = window.open(url,'',"resizable='yes',location=0,menubar=1,left=20,top=20,width=600,height=400");
}; 

var infi = 100000;

var CANVAS = null;

Array.prototype.min = function() {
	return Math.min.apply({},this);
};
Array.prototype.max = function() {
	return Math.max.apply({},this);
};
function get_function() {
    var f = document.getElementById("f_function").value; var g = '';
    if(f.indexOf('+-')>=0) {
	g = f.replace(/\+\-/mg, "-"); f = f.replace(/\+\-/mg, "+");
    }
    var ___ = "sqrt sin asin cos acos tan atan pow abs log exp PI E round ceil floor min max".split(/\s+/);
    for (var i = ___.length; --i >= 0;)
	 eval("var " + ___[i] + " = Math." + ___[i]);
    try {
	eval("f=( function(x) { return (" + f + ") } )"); 
	if (typeof f != "function") {
	    alert("Eroare: nu este funcţie (v. IE!)"); return;
	}
	if(g) {
	    eval("g=( function(x) { return (" + g + ") } )");
	    if(typeof g != "function") {
		alert("Eroare: g nu este funcţie"); return;
	    }
	}
    } catch(ex) {
	alert("Eroare: " + ex); return;
    }
    var a = document.getElementById("f_left").value; a = eval(a);
    var b = document.getElementById("f_right").value; b = eval(b);
    return { f: f, g: g, a: a, b: b };
};

function draw() {
	var X, Y, C, D;

	var tmp = get_function(); 
	var f = tmp.f; var g = tmp.g;
	var a = tmp.a;
	var b = tmp.b;

	var color = $("#colour").val();
    CANVAS = document.getElementById("result");
	X = CANVAS.offsetWidth - 4; Y = CANVAS.offsetHeight - 4; 

	if(!g) dplot(0);
	else {
		Y /= 2; 
		dplot(0);
		f = tmp.g; 
		dplot(2);
	};
	sethist();
	
function dplot(dfg) {
	var alfa = (b-a)/X, beta = a; 
	var y = new Array(); var w = new Array();
	for(var xe=0;xe<=X;xe++) {
		var t = f(xe*alfa + beta);
		y.push(t);
		
		w.push(Math.round(t*10000)/10000); 
	}

	C = y.min(); D = y.max();
	alfa = Y/(C-D); beta = -alfa*D; if(dfg == 2) beta += Y; 
	for(var xe=0;xe<=X;xe++) {
		y[xe] = alfa * y[xe] + beta;
	}

	var x = 0;  var ti = Math.round(X/15); var ji = 0;
	var canvas = CANVAS; 
	alfa = (b-a)/X;

	var node = document.createElement("div");
	node.className = "pixel";
	node.style.backgroundColor = color;
	
	function doit() {
		if (ji == 14) { 
			while(x<=X) {
				var div = node.cloneNode(true);
				var mx = Math.round(10000*(x*alfa+a))/10000;
				div.title = "("+mx +", "+w[x]+")";
				var s = div.style; 
			    s.left = x + "px";
			    s.top = y[x] + "px";
				canvas.appendChild(div);
				x ++; 
			}
			clearInterval(timer);
			node = null;
		} else {
			for(var j=ji*ti,j1=(ji+1)*ti;j<j1;j++) {
			var div = node.cloneNode(true);
			
			var mx = Math.round(10000*(x*alfa+a))/10000;
			div.title = "("+mx +", "+w[x]+")";
			
			var s = div.style; 
			s.left = x + "px";
			s.top = y[x] + "px";
			canvas.appendChild(div);
			x ++;
			}
			ji++;
		}
	};
	var timer = setInterval(doit, 10);
};
function sethist() {
	var fva = document.getElementById("f_function").value;
	var rmd = "<p style=\'color:" + color + ";\'>" + fva + "  [" + document.getElementById("f_left").value + ", " + document.getElementById("f_right").value + "]</p>";
	document.getElementById('reminder').innerHTML += rmd;
}
};

function loadfx(fx0) {
var w = fx0.split(/\s+/g);
document.getElementById('f_function').value = w[0];
document.getElementById('f_left').value = w[1];
document.getElementById('f_right').value = w[2];
$('#dgabsex').dialog('close');
};

function div_toggle(id) {
   var div = 'div' + id;
   if($(div).visible()) {
      $(div).hide();
   } else {
      $('div1','div2','div3','div4','div5','div6','div7','div8').without(div).invoke('hide');
      $(div).show();
   }
};

function hidesubtree(itable, par) {
	var pid = new RegExp('p' + par); var table = $(itable);
	$A(table.getElementsByTagName('tr')).map(Element.extend).each(function(e){
		var aid = e.readAttribute('id');
		if(aid && aid.match(pid)) { e.addClassName('hidden'); 
		                            var wid = aid.replace(pid,'');
		                            hidesubtree(itable, wid);
		                          }  
	});
};
var parent = 0;
function factorial_inform(n) {
   var lgf = 0;  
   var est = Math.pow(10, 7);  
   var thend = "...";  
   for(var k=2; k<=n; k++) {
      lgf += Math.log(k) / Math.LN10;
   }
   var len = parseInt(lgf); 
   if(len < 15) { est = Math.pow(10, len); thend = ""; } 
   var mantisa = parseFloat(lgf) - len; 
   len++;  
   var cifre = parseInt(Math.pow(10,mantisa)*est); 
   alert(n + "! are " + len + " cifre zecimale\n" + n + "! = " + cifre + thend);
}

function total_op_10( n ) {
   var toz = 0; 
   var ln10 = Math.LN10;
   for(var factor = 2; factor < n; factor++) { 
      var lgf = 0; 
      for(var k = 2; k <= factor; k++) {
         lgf += Math.log(k) / ln10;
      }
      toz += Math.ceil(lgf);
   }
   return toz;
}
function get_diff( nr ) {
   var toz = total_op_10( nr );
   alert("Total operaţii zecimale = "+toz+"\nîn baza 256 vor fi cam cu "+Math.floor(0.583*toz)+" mai puţine");
}

function factorial( n ) {
   var cf = new Array();
   cf[0] = 1;
   for( var f = 2; f <= n; f++) {
      var t = 0;
      for(var i = 0, s = cf.length; i < s; i++) {
         var p = t + cf[i] * f;
         cf[i] =  p % 10;
         t = Math.floor(p / 10);
      }
      while(t) {
         cf[s++] =  t % 10; 
         t = Math.floor(t / 10); 
      }
   }
   return cf.reverse().join('');
}

function print_fact(n) {
   var ta = new Date();
   var scf = factorial(n);
   var te = new Date(); 
   var timp = (te - ta)/1000;
   print_sir(n, scf, timp);
}

function print_sir(n, scf, timp) {
   var msw = window.open("","Factoriale","resizable=yes,location=0,menubar=1,width=730,height=auto,left=30,top=30");
   msw.document.write("<style>body{font-family:'monospaced,Courier New';}</style>");
   msw.document.write("<p><b>" + n + "!</b> are <b>" + scf.length + "</b> cifre <i>zecimale</i>. Timp: circa <b>" + timp + "</b> secunde.</p>");
   var j = 0;
   for(var i = 0, lg = scf.length; i < lg; i += 6) {
      msw.document.write(scf.substring(i, i+6) + " ");
      j++;
      if(j == 10) {
         msw.document.write("<br>");
         j = 0;
      }
   }
};

var CIFRA = 6;
var BAZA = eval("1e"+CIFRA); 

function bignum( Z ) {
  var len_Z = Z.length; var rest = len_Z % CIFRA; var len = 0;         
  this.T = new Array(); this.T[0] = 0;       
  for( len = 0; CIFRA*(len + 1) <= len_Z; len++ ) {
     this.T[len] = parseInt( Z.substring( len_Z - CIFRA*(len + 1), len_Z - CIFRA*len ), 10 );
  }
  if( rest ) {  
     this.T[len++] = parseInt( Z.substring( 0, rest ), 10 ); 
  }
  this.len = len; 
  this.to_str = bignum_str; 
  this.mul_int = bignum_mul_int; 
}

function bignum_mul_int( n ) { 
   var i; var th = this.len;
   for( i = 0; i < th; i++ ) this.T[i] *= n;
   for( i = 0; i < th - 1; i++ ) {
       if( this.T[i] >= BAZA ) {
          n = Math.floor( this.T[i] / BAZA );
          this.T[i] = this.T[i] % BAZA;
          this.T[i+1] +=  n; 
       }    
   }
   while( this.T[ th - 1 ] >= BAZA ) { 
      this.T[ th ] = Math.floor( this.T[ th - 1 ]/BAZA );
      this.T[ th - 1 ] %= BAZA;
      this.len++;  
      th++;
   }
   return this; 
}

function bignum_str(delm) {
  var th = this.len - 1;
  var str = "" + this.T[th]; 
  while(--th >= 0) {     
     var cifre = "" + this.T[th];   
     while(cifre.length < CIFRA)  
        cifre = '0' + cifre;
     cifre = delm + cifre;
     str += cifre; 
  }
  return str;
}

function big_fact( n ) {
  var _f1 = new bignum("1");
  for(var f=2; f<=n; f++) 
     _f1.mul_int(f);
  return _f1.to_str("");
}
function print_big_fact(n) {
   var ta = new Date();
   var scf = big_fact(n); 
   var te = new Date(); 
   var timp = (te - ta)/1000;
   print_sir(n, scf, timp);
}

var stop = 1;
function big_fact_rec(big, n) {
   if(n == stop) return big;
   return big_fact_rec(big.mul_int(n), n-1);
}

function print_big_fact_r(n) {
   var ta = new Date();
   var scf = big_fact_rec(new bignum("1"), n).to_str("");
   var te = new Date(); 
   var timp = (te - ta)/1000;
   print_sir(n, scf, timp);
}

function conv_dec(dh,dz) {
   var h=document.getElementById(dh).innerHTML.split('');
   var nx=h.length;
   var z=new Array(); z[0]=0; var nz=1;
   var i=0, j=0, q=0;
   for(i=0;i<nx;i++){
      switch(h[i]) {
         case 'A':h[i]=10;break;
         case 'B':h[i]=11;break;
         case 'C':h[i]=12;break;
         case 'D':h[i]=13;break;
         case 'E':h[i]=14;break;
         case 'F':h[i]=15;break;
         default:h[i]-=0;
      }
   }
   for(i=0;i<nx;i++) {
      q=0; nz=z.length;
      for(j=0;j<nz;j++) {
         q+=16*z[j];z[j]=q%10;
         q=Math.floor(q/10);
      }
      while(q) { 
         z[j++]=q%10;
         q=Math.floor(q/10);
      }
      q=z[0]+h[i];
      z[0]=q%10;
      q=Math.floor(q/10);
      j=1;
      while(q) { 
         if(z[j])q+=z[j];
         z[j++]=q%10;
         q=Math.floor(q/10);
      }
   }
   format(z.reverse().join(''),dz);
   return z.length;
};

function format(scf,fhex){
   var fh=document.getElementById(fhex);
   var sh="";
   var j=0;
   for(var i=0,lg=scf.length;i<lg;i+=8){
      sh+=scf.substring(i,i+8)+" ";
      j++;
      if(j==8){sh+="<br>";j=0;}
   }
   fh.innerHTML=sh;
};

function lg_factorial(n){
   var lgf=0;
   var est=Math.pow(10,7);
   var thend="...";
   for(var k=2;k<=n;k++){
      lgf+=Math.log(k)/Math.LN10;
   }
   var len=parseInt(lgf);
   if(len<15){
      est=Math.pow(10,len);
      thend="";
   }
   var mantisa=parseFloat(lgf)-len;
   len++;
   var cifre=parseInt(Math.pow(10,mantisa)*est);
   return "<b>"+n+"!</b>"+" are "+len+" cifre zecimale: <b>"+cifre+thend+"</b>";
};

function sistem(id_area) {
    var d = document.getElementById(id_area).value.replace(/^\s+/mg,"").replace(/\s+$/mg,"");
    var w = d.split(/[\n\r]+/g);
    this.DIM = w.length;
    this.MAT = new Array();
    this.LIB = new Array();
    for(var i = 0, n = this.DIM; i < n; i++) {
        var m = w[i].split(/\s+/);
        if(m.length > n) {
            this.LIB[i] = parseFloat(m[n]);
            m.pop();
        }
        this.MAT[i] = []; 
        for(var j = 0; j < n; j++) {
            this.MAT[i][j] = parseFloat(m[j]);
        }
    }
};
sistem.prototype.det = function() {
    var d = 1, C, L, i, k; var n = this.DIM;
    var a = []; 
    for(i = 0; i < n; i++) {
        a[i] = [];
        for(k=0;k<n;k++)
            a[i].push(this.MAT[i][k]);
    }
    for(C = 0; C < n; C++) {
        for(L = C; (L < n)&&(!a[L][C]); L++);
        if(L == n) return 0;
        if(L != C) {
            d = -d;
            for(k = C; k < n; k++) {
                var t = a[C][k];
                a[C][k] = a[L][k];
                a[L][k] = t;
            }
        }
        for(i = C+1; i < n; i++) {
            for(k = C+1; k < n; k++){
                a[i][k] -= a[C][k] * a[i][C] / a[C][C];
            }
        }
    }
    for(i = 0; i < n; i++)
        d *= a[i][i];
    return d;
};
sistem.prototype.solutie = function(id_sol) {
    tsol = document.getElementById(id_sol);
    var d = this.det(); var i, j, k, n = this.DIM;
    if(this.LIB.length == 0 || d == 0) {
        tsol.innerHTML = 'are determinantul = ' + d.toFixed(6);
    } else {
        var sol = [];
        for(i = 0; i < n; i++) {
            var col = [];
            for(j = 0; j < n; j++) col[j] = this.MAT[j][i]; 
            for(j = 0; j < n; j++) this.MAT[j][i] = this.LIB[j];
            var dx = this.det();
            sol[i] = dx / d;
            for(j = 0; j < n; j++) this.MAT[j][i] = col[j];
        }
        var res = 'soluţia sistemului:<br>';
        for(i=0; i < n; i++) {
            var v = sol[i].toFixed(6);
            res += 'x' + i + ' = ' + v + '<br>';
        }
        tsol.innerHTML = res;
    }   
};   

function toggrep(tid, nrr) {
   var tab = $("comme"); 
   var the = $A(tab.getElementsByTagName('tr')); 
   for(var i=0; i< the.length; i++) { 
      var aid = the[i].readAttribute('id'); 
      if(aid==tid) {
         for(var j=1; j <= nrr; j++) { 
            var acl = the[i+j].readAttribute('class');
            the[i+j].className = acl=='hidden'? 'show' : 'hidden';
         }
         break;   
      }
   } 
};

var CATAL = []; 
var SORT_ANT;

function load_cat() {
   var tarea = document.getElementById('catalog');
   var trows = tarea.value.replace(/^\s+/mg,"").replace(/\s+$/mg,"");
   if(trows) CATAL = trows.split(/[\n\r]+/g); else alert("Catalogul este vid!");
}

function med_gen(dest) {
   if(CATAL.length == 0) { alert("înscrieţi întâi Catalogul!"); return false; }
   var dest = document.getElementById(dest); 
   dest.innerHTML = '';  $('hordcol').innerHTML='';
   if(CATAL.length == 1) {
      var chart = document.getElementById('chart'); chart.innerHTML = '';
      var col = '339933'; var size = '400x150';
      var charturl = 'http://chart.apis.google.com/chart?cht=p&chco=' + col + '&chs=' + size + '&chd=t:';
      var labels = ['5-6', '6-7', '7-8', '8-9', '9-10']; 
      var data = []; var mes = [0, 0, 0, 0, 0];
      var p = document.createElement('p');
      var el = CATAL[0]; 
      var nume = el.replace(/^(\D+).+/,"$1");
      var medii = el.replace(/^\D+(.+)$/,"$1").split(/\s+/g);
      var mg = 0; var no = medii.length;
      for(var m = 0; m < no; m++) {
         media = parseFloat(medii[m]);
         mg += media;
         if(media >= 5 && media < 6) mes[0]++;
         else { if(media >= 6 && media < 7) mes[1]++;
                  else { if(media >= 7 && media < 8) mes[2]++;
                         else { if(media >= 8 && media < 9) mes[3]++;
                                else mes[4]++;
                              }
                       }
              }
      }
      mg /= no;
      p.innerHTML = "<b>" + nume + "</b> media: <b>" + mg.toPrecision(4).substring(0,4) +"</b>";
      dest.appendChild(p); 
      for(var i=0; i<5;i++) labels[i] += ' (' + mes[i] + ')'; 
      data.push(mes);
      chart.setAttribute('src',charturl+data.join(',') + '&chl=' + labels.join('|'));
      chart.setAttribute('alt', 'ALT');
      dest.appendChild(chart);
      var ghart = document.createElement('img');
      ghart.setAttribute('src',charturl + data.join(',') + '&chl=' + labels.join('|'));
      ghart.setAttribute('alt', 'ALT');
      chart.appendChild(ghart);
   } else {   
   
   var tabel = document.createElement('table'); 
   tabel.setAttribute('id', 'situatie');

   var TR = document.createElement('tr');
   var TH = document.createElement('th');
   var TD = document.createElement('td');
   var row, cel; 

   var thead = document.createElement('thead');
   row = TR.cloneNode(true); var antet = ['Nume Prenume', 'media'];
   for(var i = 0; i < 2; i++) { 
      cel = TH.cloneNode(true); 
      cel.innerHTML = "<a onclick='sort_table(" + i + ");' href='javascript:;'>" + antet[i] + "</a>"; 
      row.appendChild(cel);
   }
   thead.appendChild(row); 
   tabel.appendChild(thead);

   var tbody = document.createElement('tbody');
   var mgcl = 0; 
   var n = CATAL.length;
   for(var i = 0; i < n; i++) {
       var el = CATAL[i]; 
       var nume = el.replace(/^(\D+).+/,"$1");
       var medii = el.replace(/^\D+(.+)$/,"$1").split(/\s+/g);
       var mg = 0; var no = medii.length;
       for(var m = 0; m < no; m++)
          mg += parseFloat(medii[m]);
       mg /= no; mgcl += mg;
       row = TR.cloneNode(true); 
       cel = TD.cloneNode(true); cel.innerHTML = nume; row.appendChild(cel);
       cel = TD.cloneNode(true); 
       cel.innerHTML = mg.toPrecision(4).substring(0,4);
       row.appendChild(cel);
       if(i & 1) row.setAttribute('class', 'altern'); 
       tbody.appendChild(row);
   }

   mgcl /= n; 
   var tfoot = document.createElement('tfoot');
   row = TR.cloneNode(true); 
   cel = TD.cloneNode(true); cel.setAttribute('colspan', '2');
   cel.innerHTML = "media: " + mgcl.toPrecision(5).substring(0,5);
   row.appendChild(cel); tfoot.appendChild(row); 
   tabel.appendChild(tfoot);

   tabel.appendChild(tbody);
   dest.appendChild(tabel);

   SORT_ANT = -1; 
   indicatii('hordcol'); 
   if($('chart')) to_chart('chart');
   }
}

function sort_table(scol) {
   var table = document.getElementById('situatie');
   var tbody0 = table.getElementsByTagName('tbody')[0];
   var rows = tbody0.getElementsByTagName('tr');

   var arr_col = [];  
   for (var i = 0, len = rows.length; i < len; i++) {
      arr_col[i] = {};
      arr_col[i].oldr = i;
      arr_col[i].valc = rows[i].getElementsByTagName('td')[scol].firstChild.nodeValue;
   }

   if (scol == SORT_ANT) { 
      arr_col.reverse(); 
   }
   else {
      SORT_ANT = scol;  
      if (scol == 0) arr_col.sort(hash_cmp_lex); 
      else arr_col.sort(hash_cmp_num); 
   }

   var tbody1 = document.createElement('tbody');
   for (var i=0, len = arr_col.length; i < len; i++) {
      var myrw = rows[arr_col[i].oldr]; 
      var cls = i&1 ? 'altern' : ''; 
      myrw.setAttribute('class', cls);
      tbody1.appendChild(myrw.cloneNode(true));  
   }

   table.replaceChild(tbody1, tbody0);
}

function hash_cmp_lex(a, b) { 
   var aVal = a.valc, bVal = b.valc;  
   return (aVal == bVal ? 0 : (aVal > bVal ? 1 : -1));
}

function hash_cmp_num(a, b) { 
   var aVal = parseFloat(a.valc), bVal = parseFloat(b.valc);
   return (aVal - bVal);
}

function indicatii(dest) {
   var indic = document.createElement('span');
   indic.setAttribute('class','ishelp');
   indic.innerHTML = "Pentru <i>ordonare</i> (alfabetic sau după medii): click <i>antet</i> coloană." +
   "<br>Puteţi <i>selecta</i> datele tabelului şi <i>Copy—Paste</i> într-un fişier-text.";
   dest = document.getElementById(dest);
   dest.appendChild(indic);  
}
to_chart = function(dest) {
   var dest = document.getElementById(dest);
   dest.innerHTML = '';
   var size = '400x150';
   var charturl = 'http://chart.apis.google.com/chart?cht=p3&chs=' + size + '&chtt=Statistică|pe+grupe+de+medii&chd=t:';
   var labels = ['5-6', '6-7', '7-8', '8-9', '9-10']; 
   var data = [0, 0, 0, 0, 0];

   var t = document.getElementById('situatie');
   var tds = t.getElementsByTagName('tbody')[0].getElementsByTagName('td');
   var i;
   for(i = 0; tds[i]; i += 2) {
      media = tds[i+1].innerHTML;
      switch(media.charAt(0)) {
         case '5': data[0]++; break;
         case '6': data[1]++; break;
         case '7': data[2]++; break;
         case '8': data[3]++; break;
         case '9': data[4]++; break;
         case '1': data[4]++; break;
      }
   }

   for(i = 0; i < 5; i++) labels[i] += ' (' + data[i] + ')'; 

   var chart = document.createElement('img');
   chart.setAttribute('src',charturl + data.join(',') + '&chl=' + labels.join('|'));
   chart.setAttribute('alt', 'diagrama');
   
   dest.appendChild(chart);
};


function queens(n, odom) {
    this.n = n > 3 && n < 10 ?  n : 4;
    this.row = new Array(n);
    this.odom = odom;
};

queens.prototype.is_good = function() {
    var n = this.n, row = this.row;
    for(var i = 0; i < n - 1; i++)
        for(var j = i + 1; j < n; j++) 
            if(row[i] == row[j] || Math.abs(row[i] - row[j]) == j - i)
                return 0;
    return 1;
};

queens.prototype.set_queen = function() {
    var n = this.n, row = this.row;
    do {
        for(var i = 0; i < n; i++)
            row[i] = Math.round(1000 * Math.random()) % n;
    } while(!this.is_good());
};
queens.prototype.is_good_back = function(col) {
    var row = this.row;
    if(col == 0) return 1;
    for(var i = 0; i < col; i++)
        if(row[i] == row[col] || Math.abs(row[i] - row[col]) == col - i)
            return 0;
    return 1;
};

queens.prototype.back = function(col) {
    var to;
    for(to = 0; to < this.n; to++) {
        this.row[col] = to;
        if(this.is_good_back(col)) {
            if(col == this.n - 1) this.show_table();
            else this.back(col + 1);
        }
    }
};
    
queens.prototype.show_table = function() {
    var n = this.n, row = this.row, diw = this.odom;
    var diag = document.createElement('table');
    diag.setAttribute('class', 'diag');
    var TR = document.createElement('tr');
    var TH = document.createElement('th');
    var TD = document.createElement('td');
    var SQ = document.createElement('img');
    SQ.setAttribute('src', "/static/wqueen.png");
    var DIV = document.createElement('div');
    
    var drow, cell, dsq, i, j;
        
    var tbody = document.createElement('tbody');
    for(i = 0; i < n; i++) {
        drow = TR.cloneNode(true);
        for(j = 0; j < n; j++) {
            cell = TD.cloneNode(true);
            dsq = DIV.cloneNode(true);
            dsq.setAttribute('class', ((i + j) & 1 ? 'BlackField' : 'WhiteField'));
            if(row[j] == i)
                dsq.appendChild(SQ.cloneNode(true));
            cell.appendChild(dsq);
            drow.appendChild(cell);
        }
        tbody.appendChild(drow);
    }
    diag.appendChild(tbody);
    diw.appendChild(diag);
};

queens.prototype.run = function() {
    this.set_queen();
    this.odom.innerHTML="";
    this.show_table();
};
    
/*
var tabberOptions = {
    'onClick': function(argsObj) {
        if(argsObj.tabber.id == 'tabsah') {
            var i = argsObj.index;
            switch(i) {
              case 1:
                new Ajax.Updater('incheiate','/games/partide_inch',{asynchronous:true, parameters:'', evalScripts:true});
                break;
              case 3: 
                if('[%c.session.wuser%]') {
                    new Ajax.Updater('partide','/partide/listap',{asynchronous:true, parameters:'', evalScripts:true});
                }
                break;
              case 4:
                if('[%c.session.wuser%]') {
                    new Ajax.Updater('incepe','/partide/jucdisp',{asynchronous:true, parameters:'', evalScripts:true});
                }
                break;
            }
        }
        if(argsObj.tabber.id == 'main-1') {
            var i = argsObj.index;
            switch(i) {
              case 0:
                new Ajax.Updater('qedor', '/qedor/edor', {asynchronous:true, parameters:'',evalScripts:true});
                break;
              case 1:
                new Ajax.Updater('qeobj', '/qedor/vobj', {asynchronous:true, parameters:'',evalScripts:true});
                break;
              case 2: 
                new Ajax.Updater('qeprf', '/qedor/vprf', {asynchronous:true, parameters:'',evalScripts:true});
                break;
              case 3:
                new Ajax.Updater('qeore', '/qedor/vore', {asynchronous:true, parameters:'',evalScripts:true});
                break;
              case 4:
                new Ajax.Updater('qekore', '/qedor/vokre', {asynchronous:true, parameters:'',evalScripts:true});
                break;
              case 5:
                new Ajax.Updater('qekob', '/qedor/vokob', {asynchronous:true, parameters:'',evalScripts:true});
                break;
            }
        }
    }
};
*/

var tooltip=function(){
	var id = 'tt';
	var top = -3;
	var left = 3;
	var maxw = 450;
	var speed = 10;
	var timer = 20;
	var endalpha = 95;
	var alpha = 0;
	var tt,t,c,b,h;
	var ie = document.all ? true : false;
	return{
		show:function(v,w){
			if(tt == null){
				tt = document.createElement('div');
				tt.setAttribute('id',id);
				t = document.createElement('div');
				t.setAttribute('id',id + 'top');
				c = document.createElement('div');
				c.setAttribute('id',id + 'cont');
				b = document.createElement('div');
				b.setAttribute('id',id + 'bot');
				tt.appendChild(t);
				tt.appendChild(c);
				tt.appendChild(b);
				document.body.appendChild(tt);
				tt.style.opacity = 0;
				tt.style.filter = 'alpha(opacity=0)';
				document.onmousemove = this.pos;
			}
			tt.style.display = 'block';
			c.innerHTML = v;
			tt.style.width = w ? w + 'px' : 'auto';
			if(!w && ie){
				t.style.display = 'none';
				b.style.display = 'none';
				tt.style.width = tt.offsetWidth;
				t.style.display = 'block';
				b.style.display = 'block';
			}
			if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
			h = parseInt(tt.offsetHeight) + top;
			clearInterval(tt.timer);
			tt.timer = setInterval(function(){tooltip.fade(1)},timer);
		},
		pos:function(e){
			var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
			var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
			tt.style.top = (u - h) + 'px';
			tt.style.left = (l + left) + 'px';
		},
		fade:function(d){
			var a = alpha;
			if((a != endalpha && d == 1) || (a != 0 && d == -1)){
				var i = speed;
				if(endalpha - a < speed && d == 1){
					i = endalpha - a;
				}else if(alpha < speed && d == -1){
					i = a;
				}
				alpha = a + (i * d);
				tt.style.opacity = alpha * .01;
				tt.style.filter = 'alpha(opacity=' + alpha + ')';
			}else{
				clearInterval(tt.timer);
				if(d == -1){tt.style.display = 'none'}
			}
		},
		hide:function(){
			clearInterval(tt.timer);
			tt.timer = setInterval(function(){tooltip.fade(-1)},timer);
		}
	};
}();

function factorial_hex( n ) {
    var cf = new Array();
    cf[0] = 1;
    for( var f = 2; f <= n; f++) {
        var t = 0;
        for(var i = 0, s = cf.length; i < s; i++) {
            var p = t + cf[i] * f;
            cf[i] =  p & 0xFFFF;
            t = p >> 16;
        }
        while(t) {
            cf[s++] =  t & 0xFFFF; 
            t >>= 16;  
        }
    }
    var hfac = cf[cf.length - 1].toString(16);
    for(var i = cf.length - 2; i >= 0; i--) {
        var w = cf[i].toString(16);
        while(w.length < 4) w = '0' + w;
        hfac += w;
    }
    return hfac.toUpperCase();
}


/***************************/
//@Author: Adrian "yEnS" Mato Gondelle & Ivan Guardado Castro
//@website: www.yensdesign.com
//@email: yensamg@gmail.com
//@license: Feel free to use it, but keep this credits please!					
/***************************/

jQuery.fn.tipbox = function(content, allowHtml, className){
	jQuery.fn.tipbox.created.id = "tipBox";
	$("body").append(jQuery.fn.tipbox.created);
	//set some properties for the tipBox division
	var tipBox = $(jQuery.fn.tipbox.created);
	tipBox.css({"position":"absolute","display":"none"});

	//functions
	function tipBoxShow(e){
        // Better not to go offscreen...
        //var epy = e.pageY;
        //if(epy > 200) epy = 200
        /*
        // Get necessary viewport dimensions
        var winHeight = $(window).height(),
	    winTop    = self.pageYOffset || $.boxModel && document.documentElement.scrollTop || document.body.scrollTop,
	    winBottom = winHeight + winTop;
	
	// Loop through the elements and check to see if they are viewable
	$.each(elements, function(i, element) {
		if ( !element ) return;
		
		// Get element top offset and height
		var elTop      = $(element).offset().top, 
		    elHeight   = parseInt( $(element).css('height') ),
		    elBottom   = elTop + elHeight,
		    percentage = 0, hiddenTop  = 0, hiddenBottom = 0;
		
		// Get percentage of unviewable area
		if ( elTop < winTop )             // Area above the viewport
			hiddenTop = winTop-elTop;
		if ( elBottom > winBottom )       // Area below the viewport
			hiddenBottom = elBottom-winBottom;
		
		percentage = 1 - ((hiddenTop + hiddenBottom)/elHeight);
		
		// Trigger viewable event along with percentage of viewable
		$(element).trigger('viewable', [ (percentage > 1 ? 1 : percentage < 0 ? 0 : parseFloat(percentage)) ]);
        */
		tipBox.css({"display":"block", "top":e.pageY+16, "left":e.pageX});
	}
	function tipBoxHide(){
		tipBox.css({"display":"none"});
	}

	//events for each element
	this.each(function(){
		$(this).mousemove(function(e){
			tipBoxShow(e);
			//update the content
			if(allowHtml)
				tipBox.html(content);
			else
				tipBox.text(content);
			//remove all classes for the tipBox before add a new one and to avoid the "append class"
			tipBox.removeClass();
			//set class if specified
			if(className) tipBox.addClass(className);
		});
		$(this).mouseout(function(){
			tipBoxHide();
		});
	});	
};

//create the element (avoiding create multiple divisions for the tipBox)
jQuery.fn.tipbox.created = document.createElement("div");

//http://yensdesign.com/tutorials/tip/example.js

/*
$().ready(function(){
	$("h1").tipbox("This is a <h1> element", 0);
	$("div.default").tipbox("Only content is specified. So <strong>doesn't allow HTML</strong> and custom style.");
	$("div.strong").tipbox("Content and htmlAllow are specified. So <strong>we got HTML content</strong> but not custom style.", 1);
	$("div.all").tipbox("Content allow HTML and custom CSS class!", 1, "blue");
	$("div.width").tipbox("As you can see, we can fix our custom width too by setting the class!", 0, "width");
	$("div.big").tipbox("Yeah, really", 0, "big");
	$("div.project").tipbox("<img src='http://yensdesign.com/wp-content/themes/stiled/images/plusmusicaBanner.jpg' alt='Plusmusica.com' /> <br /> <center><strong>Plusmusica.com</strong></center>", 1, "width");
	$("div.cokidoo").tipbox("<img src='http://cokidoo.com/css/images/top.jpg' alt='Cokidoo' /> <br /> <center><strong>Cokidoo.com</strong> - Creating Communities</center>", 1, "width");
});
*/

function getViewport() {
    var h = document.documentElement, b = document.body;
    return {
        x: h.scrollLeft   || b.scrollLeft,
        y: h.scrollTop    || b.scrollTop,
        w: h.clientWidth  || window.innerWidth  || b.clientWidth,
        h: h.clientHeight || window.innerHeight || b.clientHeight
    };
};
