var timer_id;
var newXsize=1517;
var newYsize=1853;
var rue=[];

//y,x,long,haut
//----------------------------------------------------------------------create  game table-----------------------------------------------------------------------------------------------
var arrGame = rue;
var level = 1;
if (!Array.prototype.duplicate) 
    Array.prototype.duplicate = function() { return [].concat(this);} ;
  
if (!Array.prototype.sortRandom) 
    Array.prototype.sortRandom = function() { this.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) }); } ;
  
if (!Array.prototype.getRandomlySort) 
    Array.prototype.getRandomlySort= function() { return this.duplicate().sortRandom();} ;

//----------------------------------------------------------------------Zoom-----------------------------------------------------------------------------------------------
function EmailLink(){
window.location = "mailto:"+"?subject=I thought this link might interest you." + "&body="+document.title+"  "+window.location;
}
function ruehead(id)
{
document.write ('<table cellpadding="1" cellspacing="1"><tr><td class=caption>'+rue[id][2]+' / '+rue[id][3]+' / '+rue[id][5]+'</td></tr><tr><td><img align="left" src="picture/plaques/'+rue[id][1]+'.gif">');
}
//----------------------------------------------------------------------info-----------------------------------------------------------------------------------------------

function getVar(name)
         {
         get_string = document.location.search;         
         return_value = '';
         do { 
            name_index = get_string.indexOf(name + '=');
            if(name_index != -1)
              {
              get_string = get_string.substr(name_index + name.length + 1, get_string.length - name_index);
              end_of_value = get_string.indexOf('&');
              if(end_of_value != -1)                
                value = get_string.substr(0, end_of_value);                
              else                
                value = get_string;                
                
              if(return_value == '' || value == '')
                 return_value += value;
              else
                 return_value += ', ' + value;
              }
            } while(name_index != -1)
         space = return_value.indexOf('+');
         while(space != -1)
              { 
              return_value = return_value.substr(0, space) + ' ' + 
              return_value.substr(space + 1, return_value.length);							 
              space = return_value.indexOf('+');
              }
         return(return_value);        
         }

  function TrierColAsc(x1,x2)      {   
         return (x1[iColSel].toUpperCase() < x2[iColSel].toUpperCase())? -1 : 1;
      }   
//-----------------------------------------------------------------

var ns4 = document.layers;
var ns6 = document.getElementById && !document.all;
var ie4 = document.all;
offsetX = 0;
offsetY = 20;
var toolTipSTYLE="";
function initToolTips()
{
  if(ns4||ns6||ie4)
  {
    if(ns4) toolTipSTYLE = document.toolTipLayer;
    else if(ns6) toolTipSTYLE = document.getElementById("toolTipLayer").style;
    else if(ie4) toolTipSTYLE = document.all.toolTipLayer.style;
    if(ns4) document.captureEvents(Event.MOUSEMOVE);
    else
    {
      toolTipSTYLE.visibility = "visible";
      toolTipSTYLE.display = "none";
    }
    document.onmousemove = moveToMouseLoc;
  }
}
function toolTip(msg, fg, bg)
{
  if(toolTip.arguments.length < 1) // hide
  {
    if(ns4) toolTipSTYLE.visibility = "hidden";
    else toolTipSTYLE.display = "none";
  }
  else // show
  {
    if(!fg) fg = "#777777";
    if(!bg) bg = "#FFFFFF";
    var content =
    '<table border="0" cellspacing="0" cellpadding="1" bgcolor="' + fg + '"><td>' +
    '<table border="0" cellspacing="0" cellpadding="1" bgcolor="' + bg + 
    '"><td align="center"><font face="sans-serif" color="' + fg +
    '" size="-2">&nbsp\;' + msg +
    '&nbsp\;</font></td></table></td></table>';
    if(ns4)
    {
      toolTipSTYLE.document.write(content);
      toolTipSTYLE.document.close();
      toolTipSTYLE.visibility = "visible";
    }
    if(ns6)
    {
      document.getElementById("toolTipLayer").innerHTML = content;
      toolTipSTYLE.display='block'
    }
    if(ie4)
    {
      document.all("toolTipLayer").innerHTML=content;
      toolTipSTYLE.display='block'
    }
  }
}
function moveToMouseLoc(e)
{
  if(ns4||ns6)
  {
    x = e.pageX;
    y = e.pageY;
  }
  else
  {
    x = event.x + document.body.scrollLeft;
    y = event.y + document.body.scrollTop;
  }
  toolTipSTYLE.left = x + offsetX;
  toolTipSTYLE.top = y + offsetY;
  return true;
} 
	  
//---------------------------------------------------------------------Liste------------------------------------------------------------------------------------------------

function ListeRue(){
    var arrListe = rue;
	var Alist='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z';
	var Ad=new Array();
	Ad = Alist.split(' ');

	iColSel =2;
	arrListe.sort(TrierColAsc);
	var Tpos;
	var Temp;
	var ListeHtml="";

	ListeHtml+="<table id=list><tr><td width=33% valign=top class=tdTransparent>";
	ListeHtml+="<UL>";

	for (var Tpos = 0; Tpos <= Ad.length-1; Tpos++) {
		if (Tpos==10){
			 ListeHtml+="</td><td width=5% valign=topvalign=top class=tdTransparent></td><td width=33% valign=topvalign=top class=tdTransparent>";};
		if (Tpos==20) {
			ListeHtml+="</td><td width=5% valign=topvalign=top class=tdTransparent></td><td width=33% valign=top class=tdTransparent>";};
			ListeHtml+="<H3>"+Ad[Tpos]+"</H3>";
		for (var i = 0; i <= arrListe.length-1; i++) {
			Temp=arrListe[i][2];
			if ((Ad[Tpos]==Temp.charAt(0))&&(!(arrListe[i][2]=="En construction"))){
				if (arrListe[i][7]=="0") {
				ListeHtml+="<LI>";
				ListeHtml+="<div title='header=[en construction] body=[<img src=picture/plaques/"+arrListe[i][1]+".gif>]'><font color='#0000FF'>"+arrListe[i][2]+"</font>";} else {
				ListeHtml+="<LI>";
				ListeHtml+="<div><a href='rue.php?rue="+arrListe[i][1]+"&id="+arrListe[i][0]+"'>"+arrListe[i][2];
				ListeHtml+="</a>";
				ListeHtml+=" <span class='remark'> texte </span>"};
				ListeHtml+="</div></LI>";};
				//ListeHtml+=" <span class='remark'> texte </span>"
		};
	};
	ListeHtml+="<UL>";
	ListeHtml+="</td><tr></table>";
	ListeHtml+="<p class='droit'>1:text, 2:photo</p>";
	var tabobj=document.getElementById("Liste");
	tabobj.innerHTML=ListeHtml;
}

function ListeRueAlsacien(){
    var arrListe = rue;
	var Alist='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z';
	var Ad=new Array();
	Ad = Alist.split(' ');

	iColSel =3;
	arrListe.sort(TrierColAsc);
	var Tpos;
	var Temp;
	var ListeHtml="";

	ListeHtml+="<table id=list><tr><td width=33% valign=top class=tdTransparent>";
	ListeHtml+="<UL>";

	for (var Tpos = 0; Tpos <= Ad.length-1; Tpos++) {
		if (Tpos==10){
			 ListeHtml+="</td><td width=5% valign=topvalign=top class=tdTransparent></td><td width=33% valign=topvalign=top class=tdTransparent>";};
		if (Tpos==20) {
			ListeHtml+="</td><td width=5% valign=topvalign=top class=tdTransparent></td><td width=33% valign=top class=tdTransparent>";};
			ListeHtml+="<H3>"+Ad[Tpos]+"</H3>";
		for (var i = 0; i <= arrListe.length-1; i++) {
			Temp=arrListe[i][3];
			if ((Ad[Tpos]==Temp.charAt(0))&&(!(arrListe[i][3]=="En construction"))){
				if (arrListe[i][7]=="0") {
				ListeHtml+="<LI>";
				ListeHtml+="<div title='header=[en construction] body=[<img src=picture/plaques/"+arrListe[i][1]+".gif>]'><font color='#0000FF'>"+arrListe[i][3]+"</font>";} else {
				ListeHtml+="<LI>";
				ListeHtml+="<div><a href='rue.php?rue="+arrListe[i][1]+"&id="+arrListe[i][0]+"'>"+arrListe[i][3];
				ListeHtml+="</a>";
				ListeHtml+=" <span class='remark'> texte </span>"};
				ListeHtml+="</div></LI>";};
		};
	};
	ListeHtml+="<UL>";
	ListeHtml+="</td><tr></table>";
	ListeHtml+="<p class='droit'>1:text, 2:photo</p>";
	var tabobj=document.getElementById("Liste");
	tabobj.innerHTML=ListeHtml;
}


//----------------------------------------------------------------------Quizz-----------------------------------------------------------------------------------------------
var chx = new Array();
var chxId = new Array();
var chxId1 = new Array();
var chxId2 = new Array();
var chxId3 = new Array();
var chxId4 = new Array();
var playP=0;
for (var a=0; a < rue.length-1;a++) {
	chxId[a]=a;
	chxId1[a]=a;
	chxId2[a]=a;
	chxId3[a]=a;
	playP+=1;
	if (playP==4){playP=1;};
	chxId4[a]=playP;	
};
var a;
var ba;
var score=0;
var arrGame = rue;

if (!Array.prototype.duplicate) 
    Array.prototype.duplicate = function() { return [].concat(this);} ;
  
if (!Array.prototype.sortRandom) 
    Array.prototype.sortRandom = function() { this.sort(function(elmt1, elmt2) { return ((2 * Math.round(Math.random())) - 1) }); } ;
  
if (!Array.prototype.getRandomlySort) 
    Array.prototype.getRandomlySort= function() { return this.duplicate().sortRandom();} ;
	
function randOrd(a, b){
return (Math.round(Math.random())-0.5); } 

function StartGame(){
arrGame.getRandomlySort;

chxId4.sort( randOrd );

 do {
chxId.sort( randOrd );
chxId1.sort( randOrd );
chxId2.sort( randOrd );
chxId3.sort( randOrd );
var ok=true;
for (var i=0; i<rue.length-1; i++) {

   if (chxId[i]==chxId1[i]) ok=false;
   if (chxId[i]==chxId2[i]) ok=false;   
   if (chxId[i]==chxId3[i]) ok=false;
   
   if (chxId1[i]==chxId2[i]) ok=false;
   if (chxId1[i]==chxId3[i]) ok=false;
   
   if (chxId2[i]==chxId3[i]) ok=false;
   };
 } while (!ok);



//select game
if (jeux.rep[0].checked==true) {
	score=0;
	level=1;
	var tabobj=document.getElementById("GameHead");	
	var Gtxt="<table width=100%><tr><td class=caption>Noms courants / noms alsaciens </td></tr></table>";
	tabobj.innerHTML=Gtxt;
	PlayLevel1();
	}
	else
	{
		if (jeux.rep[1].checked==true) {
			score=0;
			level=2;
			var tabobj=document.getElementById("GameHead");
			tabobj.innerHTML="<table width=100%><tr><td class=caption>Noms alsaciens / noms courants  </td></tr></table>";
			PlayLevel2();
			}
			else
			{
			if (jeux.rep[2].checked==true) {
				score=0;
				level=3;
				var tabobj=document.getElementById("GameHead");
				tabobj.innerHTML="<table width=100%><tr><td class=caption>Langues alternées</td></tr></table>";
				PlayLevel3();}
				else
				{
					if (jeux.rep[3].checked==true) {
						score=0;
						level=3;
						var tabobj=document.getElementById("GameHead");
						tabobj.innerHTML="<table width=100%><tr><td class=caption>Langues alternées avec un temps de réponse limité </td></tr></table>";
						PlayLevel3();};
				}
			}
		}
for (c=0; c < chxId1.length; c++) {
	//document.write (chxId1[c]+'   '+chxId2[c]+'   '+chxId3[c]+'   '+chxId4[c]+'<br>');
}

}

//--------------------------------------------------------------------------------------------Level 1-----------------------------------------------------------------

function PlayLevel1(){

chx[1]="";
chx[1]=arrGame[chxId1[score]][3];
chx[2]="";
chx[2]=arrGame[chxId2[score]][3];
chx[3]="";
chx[3]=arrGame[chxId3[score]][3];

ba = chxId4[score];  // a = random number between 1-3
if (arrGame[chxId[score]][3]=="En construction"){chx[ba]="bonne reponse"} else{chx[ba]=arrGame[chxId[score]][3];};

var ruechx0=arrGame[chxId[score]][2];
var StTxt=ruechx0.indexOf("(");
var EdTxt=ruechx0.indexOf(")");
var ruechx="";
for (c=StTxt+1; c < EdTxt; c++) {
	ruechx+=ruechx0.charAt(c);
}
ruechx+=" ";
for (c=0; c < StTxt; c++) {
	ruechx+=ruechx0.charAt(c);
}
var Gtxt;
Gtxt="";
Gtxt+="<h3> Quel nom correspond à la plaque: " + ruechx +" ?</h3> "  ;
Gtxt+="<center><table><tr><td><form name='question' method='post' action='javascript:NextQuestion()'>";
Gtxt+=" <p><label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[1];
Gtxt+="</label><br>";
Gtxt+="<label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[2];
Gtxt+="</label><br>";
Gtxt+="<label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[3];
Gtxt+="</label><br><br>";
Gtxt+=" <input type='submit' name='Submit' value='Repondre'> </p>";
Gtxt+="</form></td></tr></table></center>";

var tabobj=document.getElementById("Game");
tabobj.innerHTML=Gtxt;
var tabobj=document.getElementById("Score");
tabobj.innerHTML="<H3></H3> Vous avez répondu correctement à " + score + " questions(s) il en reste encore "+(rue.length-score)+"...";
}

//--------------------------------------------------------------------------------------------Level 2-----------------------------------------------------------------

function PlayLevel2(){
chx[1]="";
chx[1]=NomCourrant(arrGame[chxId1[score]][2]);
chx[2]="";
chx[2]=NomCourrant(arrGame[chxId2[score]][2]);
chx[3]="";
chx[3]=NomCourrant(arrGame[chxId3[score]][2]);

ba =chxId4[score];   // a = random number between 1-3
if (arrGame[chxId[score]][3]=="En construction"){chx[ba]="bonne reponse"} else{chx[ba]=NomCourrant(arrGame[chxId[score]][2]);};

var Gtxt;
Gtxt="";
Gtxt+="<h3> Quel nom correspond à la plaque: " + arrGame[chxId[score]][3]+" ?</h3> "  ;
Gtxt+="<center><table><tr><td><form name='question' method='post' action='javascript:NextQuestion()'>";
Gtxt+=" <p><label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[1];
Gtxt+="</label><br>";
Gtxt+="<label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[2];
Gtxt+="</label><br>";
Gtxt+="<label>";
Gtxt+="<input name='resp' type='radio' value='1'>";
Gtxt+=chx[3];
Gtxt+="</label><br><br>";
Gtxt+=" <input type='submit' name='Submit' value='Repondre'> </p>";
Gtxt+="</form></td></tr></table></center>";

var tabobj=document.getElementById("Game");
tabobj.innerHTML=Gtxt;
var tabobj=document.getElementById("Score");
tabobj.innerHTML="<H3></H3> Vous avez répondu correctement à " + score + " questions(s) il en reste encore "+(rue.length-score)+"...";
}
//--------------------------------------------------------------------------------------------Level 3-----------------------------------------------------------------
function PlayLevel3(){
var lang= 1+Math.round(Math.random());  
if (lang==1) {PlayLevel1();}
else
{PlayLevel2();};
}
//--------------------------------------------------------------------------------------------question-----------------------------------------------------------------

function NextQuestion()
{
var c;
var repondu;
repondu=4
for (c=0; c < 3; c++) {
	if (question.resp[c].checked) {repondu=c};
}
if (repondu==4)
{alert ("Vous n'avez pas repondu");}
else
{
if (repondu==(ba-1))
{score+=1;
if (level==1) {PlayLevel1();};
if (level==2) {PlayLevel2();};
if (level==3) {PlayLevel3();};
}
else
{alert ("Desolé, la bonne réponse était: " + chx[ba]);
	document.src="quiz.php";
	document.location.reload();}
}
}

function NomCourrant(ruechx0)
{
var StTxt=ruechx0.indexOf("(");
var EdTxt=ruechx0.indexOf(")");
var ruechx="";
for (var c=StTxt+1; c < EdTxt; c++) {
	ruechx+=ruechx0.charAt(c);
}
ruechx+=" ";
for (c=0; c < StTxt; c++) {
	ruechx+=ruechx0.charAt(c);
}
return  ruechx;
}


//---------------------------------------------------------------------------------------------------------------------
/* This notice must be untouched at all times.

wz_jsgraphics.js    v. 2.32
The latest version is available at
http://www.walterzorn.com
or http://www.devira.com
or http://www.walterzorn.de

Copyright (c) 2002-2004 Walter Zorn. All rights reserved.
Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
Last modified: 21. 6. 2005

Performance optimizations for Internet Explorer
by Thomas Frank and John Holdsworth.
fillPolygon method implemented by Matthieu Haller.

High Performance JavaScript Graphics Library.
Provides methods
- to draw lines, rectangles, ellipses, polygons
	with specifiable line thickness,
- to fill rectangles and ellipses
- to draw text.
NOTE: Operations, functions and branching have rather been optimized
to efficiency and speed than to shortness of source code.

LICENSE: LGPL

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License (LGPL) as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA,
or see http://www.gnu.org/copyleft/lesser.html
*/


var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz,
jg_n4 = (document.layers && typeof document.classes != "undefined");


function chkDHTM(x, i)
{
	x = document.body || null;
	jg_ie = x && typeof x.insertAdjacentHTML != "undefined";
	jg_dom = (x && !jg_ie &&
		typeof x.appendChild != "undefined" &&
		typeof document.createRange != "undefined" &&
		typeof (i = document.createRange()).setStartBefore != "undefined" &&
		typeof i.createContextualFragment != "undefined");
	jg_ihtm = !jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined";
	jg_fast = jg_ie && document.all && !window.opera;
	jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined";
}


function pntDoc()
{
	this.wnd.document.write(jg_fast? this.htmRpc() : this.htm);
	this.htm = '';
}


function pntCnvDom()
{
	var x = document.createRange();
	x.setStartBefore(this.cnv);
	x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm);
	this.cnv.appendChild(x);
	this.htm = '';
}


function pntCnvIe()
{
	this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm);
	this.htm = '';
}


function pntCnvIhtm()
{
	this.cnv.innerHTML += this.htm;
	this.htm = '';
}


function pntCnv()
{
	this.htm = '';
}


function mkDiv(x, y, w, h)
{
	this.htm += '<div style="position:absolute;'+
		'left:' + x + 'px;'+
		'top:' + y + 'px;'+
		'width:' + w + 'px;'+
		'height:' + h + 'px;'+
		'clip:rect(0,'+w+'px,'+h+'px,0);'+
		'background-color:' + this.color +
		(!jg_moz? ';overflow:hidden' : '')+
		';"><\/div>';
}


function mkDivIe(x, y, w, h)
{
	this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';';
}


function mkDivPrt(x, y, w, h)
{
	this.htm += '<div style="position:absolute;'+
		'border-left:' + w + 'px solid ' + this.color + ';'+
		'left:' + x + 'px;'+
		'top:' + y + 'px;'+
		'width:0px;'+
		'height:' + h + 'px;'+
		'clip:rect(0,'+w+'px,'+h+'px,0);'+
		'background-color:' + this.color +
		(!jg_moz? ';overflow:hidden' : '')+
		';"><\/div>';
}


function mkLyr(x, y, w, h)
{
	this.htm += '<layer '+
		'left="' + x + '" '+
		'top="' + y + '" '+
		'width="' + w + '" '+
		'height="' + h + '" '+
		'bgcolor="' + this.color + '"><\/layer>\n';
}


var regex =  /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g;
function htmRpc()
{
	return this.htm.replace(
		regex,
		'<div style="overflow:hidden;position:absolute;background-color:'+
		'$1;left:$2;top:$3;width:$4;height:$5"></div>\n');
}


function htmPrtRpc()
{
	return this.htm.replace(
		regex,
		'<div style="overflow:hidden;position:absolute;background-color:'+
		'$1;left:$2;top:$3;width:$4;height:$5;border-left:$4px solid $1"></div>\n');
}


function mkLin(x1, y1, x2, y2)
{
	if (x1 > x2)
	{
		var _x2 = x2;
		var _y2 = y2;
		x2 = x1;
		y2 = y1;
		x1 = _x2;
		y1 = _y2;
	}
	var dx = x2-x1, dy = Math.abs(y2-y1),
	x = x1, y = y1,
	yIncr = (y1 > y2)? -1 : 1;

	if (dx >= dy)
	{
		var pr = dy<<1,
		pru = pr - (dx<<1),
		p = pr-dx,
		ox = x;
		while ((dx--) > 0)
		{
			++x;
			if (p > 0)
			{
				this.mkDiv(ox, y, x-ox, 1);
				y += yIncr;
				p += pru;
				ox = x;
			}
			else p += pr;
		}
		this.mkDiv(ox, y, x2-ox+1, 1);
	}

	else
	{
		var pr = dx<<1,
		pru = pr - (dy<<1),
		p = pr-dy,
		oy = y;
		if (y2 <= y1)
		{
			while ((dy--) > 0)
			{
				if (p > 0)
				{
					this.mkDiv(x++, y, 1, oy-y+1);
					y += yIncr;
					p += pru;
					oy = y;
				}
				else
				{
					y += yIncr;
					p += pr;
				}
			}
			this.mkDiv(x2, y2, 1, oy-y2+1);
		}
		else
		{
			while ((dy--) > 0)
			{
				y += yIncr;
				if (p > 0)
				{
					this.mkDiv(x++, oy, 1, y-oy);
					p += pru;
					oy = y;
				}
				else p += pr;
			}
			this.mkDiv(x2, oy, 1, y2-oy+1);
		}
	}
}


function mkLin2D(x1, y1, x2, y2)
{
	if (x1 > x2)
	{
		var _x2 = x2;
		var _y2 = y2;
		x2 = x1;
		y2 = y1;
		x1 = _x2;
		y1 = _y2;
	}
	var dx = x2-x1, dy = Math.abs(y2-y1),
	x = x1, y = y1,
	yIncr = (y1 > y2)? -1 : 1;

	var s = this.stroke;
	if (dx >= dy)
	{
		if (s-3 > 0)
		{
			var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx;
			_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
		}
		else var _s = s;
		var ad = Math.ceil(s/2);

		var pr = dy<<1,
		pru = pr - (dx<<1),
		p = pr-dx,
		ox = x;
		while ((dx--) > 0)
		{
			++x;
			if (p > 0)
			{
				this.mkDiv(ox, y, x-ox+ad, _s);
				y += yIncr;
				p += pru;
				ox = x;
			}
			else p += pr;
		}
		this.mkDiv(ox, y, x2-ox+ad+1, _s);
	}

	else
	{
		if (s-3 > 0)
		{
			var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy;
			_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1;
		}
		else var _s = s;
		var ad = Math.round(s/2);

		var pr = dx<<1,
		pru = pr - (dy<<1),
		p = pr-dy,
		oy = y;
		if (y2 <= y1)
		{
			++ad;
			while ((dy--) > 0)
			{
				if (p > 0)
				{
					this.mkDiv(x++, y, _s, oy-y+ad);
					y += yIncr;
					p += pru;
					oy = y;
				}
				else
				{
					y += yIncr;
					p += pr;
				}
			}
			this.mkDiv(x2, y2, _s, oy-y2+ad);
		}
		else
		{
			while ((dy--) > 0)
			{
				y += yIncr;
				if (p > 0)
				{
					this.mkDiv(x++, oy, _s, y-oy+ad);
					p += pru;
					oy = y;
				}
				else p += pr;
			}
			this.mkDiv(x2, oy, _s, y2-oy+ad+1);
		}
	}
}


function mkLinDott(x1, y1, x2, y2)
{
	if (x1 > x2)
	{
		var _x2 = x2;
		var _y2 = y2;
		x2 = x1;
		y2 = y1;
		x1 = _x2;
		y1 = _y2;
	}
	var dx = x2-x1, dy = Math.abs(y2-y1),
	x = x1, y = y1,
	yIncr = (y1 > y2)? -1 : 1,
	drw = true;
	if (dx >= dy)
	{
		var pr = dy<<1,
		pru = pr - (dx<<1),
		p = pr-dx;
		while ((dx--) > 0)
		{
			if (drw) this.mkDiv(x, y, 1, 1);
			drw = !drw;
			if (p > 0)
			{
				y += yIncr;
				p += pru;
			}
			else p += pr;
			++x;
		}
		if (drw) this.mkDiv(x, y, 1, 1);
	}

	else
	{
		var pr = dx<<1,
		pru = pr - (dy<<1),
		p = pr-dy;
		while ((dy--) > 0)
		{
			if (drw) this.mkDiv(x, y, 1, 1);
			drw = !drw;
			y += yIncr;
			if (p > 0)
			{
				++x;
				p += pru;
			}
			else p += pr;
		}
		if (drw) this.mkDiv(x, y, 1, 1);
	}
}


function mkOv(left, top, width, height)
{
	var a = width>>1, b = height>>1,
	wod = width&1, hod = (height&1)+1,
	cx = left+a, cy = top+b,
	x = 0, y = b,
	ox = 0, oy = b,
	aa = (a*a)<<1, bb = (b*b)<<1,
	st = (aa>>1)*(1-(b<<1)) + bb,
	tt = (bb>>1) - aa*((b<<1)-1),
	w, h;
	while (y > 0)
	{
		if (st < 0)
		{
			st += bb*((x<<1)+3);
			tt += (bb<<1)*(++x);
		}
		else if (tt < 0)
		{
			st += bb*((x<<1)+3) - (aa<<1)*(y-1);
			tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
			w = x-ox;
			h = oy-y;
			if (w&2 && h&2)
			{
				this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1);
				this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1);
			}
			else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h);
			ox = x;
			oy = y;
		}
		else
		{
			tt -= aa*((y<<1)-3);
			st -= (aa<<1)*(--y);
		}
	}
	this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod);
	this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod);
}


function mkOv2D(left, top, width, height)
{
	var s = this.stroke;
	width += s-1;
	height += s-1;
	var a = width>>1, b = height>>1,
	wod = width&1, hod = (height&1)+1,
	cx = left+a, cy = top+b,
	x = 0, y = b,
	aa = (a*a)<<1, bb = (b*b)<<1,
	st = (aa>>1)*(1-(b<<1)) + bb,
	tt = (bb>>1) - aa*((b<<1)-1);

	if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0))
	{
		var ox = 0, oy = b,
		w, h,
		pxl, pxr, pxt, pxb, pxw;
		while (y > 0)
		{
			if (st < 0)
			{
				st += bb*((x<<1)+3);
				tt += (bb<<1)*(++x);
			}
			else if (tt < 0)
			{
				st += bb*((x<<1)+3) - (aa<<1)*(y-1);
				tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
				w = x-ox;
				h = oy-y;

				if (w-1)
				{
					pxw = w+1+(s&1);
					h = s;
				}
				else if (h-1)
				{
					pxw = s;
					h += 1+(s&1);
				}
				else pxw = h = s;
				this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h);
				ox = x;
				oy = y;
			}
			else
			{
				tt -= aa*((y<<1)-3);
				st -= (aa<<1)*(--y);
			}
		}
		this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod);
		this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod);
	}

	else
	{
		var _a = (width-((s-1)<<1))>>1,
		_b = (height-((s-1)<<1))>>1,
		_x = 0, _y = _b,
		_aa = (_a*_a)<<1, _bb = (_b*_b)<<1,
		_st = (_aa>>1)*(1-(_b<<1)) + _bb,
		_tt = (_bb>>1) - _aa*((_b<<1)-1),

		pxl = new Array(),
		pxt = new Array(),
		_pxb = new Array();
		pxl[0] = 0;
		pxt[0] = b;
		_pxb[0] = _b-1;
		while (y > 0)
		{
			if (st < 0)
			{
				st += bb*((x<<1)+3);
				tt += (bb<<1)*(++x);
				pxl[pxl.length] = x;
				pxt[pxt.length] = y;
			}
			else if (tt < 0)
			{
				st += bb*((x<<1)+3) - (aa<<1)*(y-1);
				tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);
				pxl[pxl.length] = x;
				pxt[pxt.length] = y;
			}
			else
			{
				tt -= aa*((y<<1)-3);
				st -= (aa<<1)*(--y);
			}

			if (_y > 0)
			{
				if (_st < 0)
				{
					_st += _bb*((_x<<1)+3);
					_tt += (_bb<<1)*(++_x);
					_pxb[_pxb.length] = _y-1;
				}
				else if (_tt < 0)
				{
					_st += _bb*((_x<<1)+3) - (_aa<<1)*(_y-1);
					_tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-3);
					_pxb[_pxb.length] = _y-1;
				}
				else
				{
					_tt -= _aa*((_y<<1)-3);
					_st -= (_aa<<1)*(--_y);
					_pxb[_pxb.length-1]--;
				}
			}
		}

		var ox = 0, oy = b,
		_oy = _pxb[0],
		l = pxl.length,
		w, h;
		for (var i = 0; i < l; i++)
		{
			if (typeof _pxb[i] != "undefined")
			{
				if (_pxb[i] < _oy || pxt[i] < oy)
				{
					x = pxl[i];
					this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy);
					ox = x;
					oy = pxt[i];
					_oy = _pxb[i];
				}
			}
			else
			{
				x = pxl[i];
				this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod);
				this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod);
				ox = x;
				oy = pxt[i];
			}
		}
		this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod);
		this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod);
	}
}


function mkOvDott(left, top, width, height)
{
	var a = width>>1, b = height>>1,
	wod = width&1, hod = height&1,
	cx = left+a, cy = top+b,
	x = 0, y = b,
	aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1,
	st = (aa2>>1)*(1-(b<<1)) + bb,
	tt = (bb>>1) - aa2*((b<<1)-1),
	drw = true;
	while (y > 0)
	{
		if (st < 0)
		{
			st += bb*((x<<1)+3);
			tt += (bb<<1)*(++x);
		}
		else if (tt < 0)
		{
			st += bb*((x<<1)+3) - aa4*(y-1);
			tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3);
		}
		else
		{
			tt -= aa2*((y<<1)-3);
			st -= aa4*(--y);
		}
		if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1);
		drw = !drw;
	}
}


function mkRect(x, y, w, h)
{
	var s = this.stroke;
	this.mkDiv(x, y, w, s);
	this.mkDiv(x+w, y, s, h);
	this.mkDiv(x, y+h, w+s, s);
	this.mkDiv(x, y+s, s, h-s);
}


function mkRectDott(x, y, w, h)
{
	this.drawLine(x, y, x+w, y);
	this.drawLine(x+w, y, x+w, y+h);
	this.drawLine(x, y+h, x+w, y+h);
	this.drawLine(x, y, x, y+h);
}


function jsgFont()
{
	this.PLAIN = 'font-weight:normal;';
	this.BOLD = 'font-weight:bold;';
	this.ITALIC = 'font-style:italic;';
	this.ITALIC_BOLD = this.ITALIC + this.BOLD;
	this.BOLD_ITALIC = this.ITALIC_BOLD;
}
var Font = new jsgFont();


function jsgStroke()
{
	this.DOTTED = -1;
}
var Stroke = new jsgStroke();


function jsGraphics(id, wnd)
{
	this.setColor = new Function('arg', 'this.color = arg.toLowerCase();');

	this.setStroke = function(x)
	{
		this.stroke = x;
		if (!(x+1))
		{
			this.drawLine = mkLinDott;
			this.mkOv = mkOvDott;
			this.drawRect = mkRectDott;
		}
		else if (x-1 > 0)
		{
			this.drawLine = mkLin2D;
			this.mkOv = mkOv2D;
			this.drawRect = mkRect;
		}
		else
		{
			this.drawLine = mkLin;
			this.mkOv = mkOv;
			this.drawRect = mkRect;
		}
	};


	this.setPrintable = function(arg)
	{
		this.printable = arg;
		if (jg_fast)
		{
			this.mkDiv = mkDivIe;
			this.htmRpc = arg? htmPrtRpc : htmRpc;
		}
		else this.mkDiv = jg_n4? mkLyr : arg? mkDivPrt : mkDiv;
	};


	this.setFont = function(fam, sz, sty)
	{
		this.ftFam = fam;
		this.ftSz = sz;
		this.ftSty = sty || Font.PLAIN;
	};


	this.drawPolyline = this.drawPolyLine = function(x, y, s)
	{
		for (var i=0 ; i<x.length-1 ; i++ )
			this.drawLine(x[i], y[i], x[i+1], y[i+1]);
	};


	this.fillRect = function(x, y, w, h)
	{
		this.mkDiv(x, y, w, h);
	};


	this.drawPolygon = function(x, y)
	{
		this.drawPolyline(x, y);
		this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]);
	};


	this.drawEllipse = this.drawOval = function(x, y, w, h)
	{
		this.mkOv(x, y, w, h);
	};


	this.fillEllipse = this.fillOval = function(left, top, w, h)
	{
		var a = (w -= 1)>>1, b = (h -= 1)>>1,
		wod = (w&1)+1, hod = (h&1)+1,
		cx = left+a, cy = top+b,
		x = 0, y = b,
		ox = 0, oy = b,
		aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1,
		st = (aa2>>1)*(1-(b<<1)) + bb,
		tt = (bb>>1) - aa2*((b<<1)-1),
		pxl, dw, dh;
		if (w+1) while (y > 0)
		{
			if (st < 0)
			{
				st += bb*((x<<1)+3);
				tt += (bb<<1)*(++x);
			}
			else if (tt < 0)
			{
				st += bb*((x<<1)+3) - aa4*(y-1);
				pxl = cx-x;
				dw = (x<<1)+wod;
				tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-3);
				dh = oy-y;
				this.mkDiv(pxl, cy-oy, dw, dh);
				this.mkDiv(pxl, cy+y+hod, dw, dh);
				ox = x;
				oy = y;
			}
			else
			{
				tt -= aa2*((y<<1)-3);
				st -= aa4*(--y);
			}
		}
		this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod);
	};


/* fillPolygon method, implemented by Matthieu Haller.
This javascript function is an adaptation of the gdImageFilledPolygon for Walter Zorn lib.
C source of GD 1.8.4 found at http://www.boutell.com/gd/

THANKS to Kirsten Schulz for the polygon fixes!

The intersection finding technique of this code could be improved
by remembering the previous intertersection, and by using the slope.
That could help to adjust intersections to produce a nice
interior_extrema. */
	this.fillPolygon = function(array_x, array_y)
	{
		var i;
		var y;
		var miny, maxy;
		var x1, y1;
		var x2, y2;
		var ind1, ind2;
		var ints;

		var n = array_x.length;

		if (!n) return;


		miny = array_y[0];
		maxy = array_y[0];
		for (i = 1; i < n; i++)
		{
			if (array_y[i] < miny)
				miny = array_y[i];

			if (array_y[i] > maxy)
				maxy = array_y[i];
		}
		for (y = miny; y <= maxy; y++)
		{
			var polyInts = new Array();
			ints = 0;
			for (i = 0; i < n; i++)
			{
				if (!i)
				{
					ind1 = n-1;
					ind2 = 0;
				}
				else
				{
					ind1 = i-1;
					ind2 = i;
				}
				y1 = array_y[ind1];
				y2 = array_y[ind2];
				if (y1 < y2)
				{
					x1 = array_x[ind1];
					x2 = array_x[ind2];
				}
				else if (y1 > y2)
				{
					y2 = array_y[ind1];
					y1 = array_y[ind2];
					x2 = array_x[ind1];
					x1 = array_x[ind2];
				}
				else continue;

				 // modified 11. 2. 2004 Walter Zorn
				if ((y >= y1) && (y < y2))
					polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1);

				else if ((y == maxy) && (y > y1) && (y <= y2))
					polyInts[ints++] = Math.round((y-y1) * (x2-x1) / (y2-y1) + x1);
			}
			polyInts.sort(integer_compare);
			for (i = 0; i < ints; i+=2)
				this.mkDiv(polyInts[i], y, polyInts[i+1]-polyInts[i]+1, 1);
		}
	};


	this.drawString = function(txt, x, y)
	{
		this.htm += '<div style="position:absolute;white-space:nowrap;'+
			'left:' + x + 'px;'+
			'top:' + y + 'px;'+
			'font-family:' +  this.ftFam + ';'+
			'font-size:' + this.ftSz + ';'+
			'color:' + this.color + ';' + this.ftSty + '">'+
			txt +
			'<\/div>';
	};


/* drawStringRect() added by Rick Blommers.
Allows to specify the size of the text rectangle and to align the
text both horizontally (e.g. right) and vertically within that rectangle */
	this.drawStringRect = function(txt, x, y, width, halign)
	{
		this.htm += '<div style="position:absolute;overflow:hidden;'+
			'left:' + x + 'px;'+
			'top:' + y + 'px;'+
			'width:'+width +'px;'+
			'text-align:'+halign+';'+
			'font-family:' +  this.ftFam + ';'+
			'font-size:' + this.ftSz + ';'+
			'color:' + this.color + ';' + this.ftSty + '">'+
			txt +
			'<\/div>';
	};


	this.drawImage = function(imgSrc, x, y, w, h, a)
	{
		this.htm += '<div style="position:absolute;'+
			'left:' + x + 'px;'+
			'top:' + y + 'px;'+
			'width:' +  w + ';'+
			'height:' + h + ';">'+
			'<img src="' + imgSrc + '" width="' + w + '" height="' + h + '"' + (a? (' '+a) : '') + '>'+
			'<\/div>';
	};


	this.clear = function()
	{
		this.htm = "";
		if (this.cnv) this.cnv.innerHTML = this.defhtm;
	};


	this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h)
	{
		this.mkDiv(xr+cx, yt+cy, w, h);
		this.mkDiv(xr+cx, yb+cy, w, h);
		this.mkDiv(xl+cx, yb+cy, w, h);
		this.mkDiv(xl+cx, yt+cy, w, h);
	};

	this.setStroke(1);
	this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN);
	this.color = '#000000';
	this.htm = '';
	this.wnd = wnd || window;

	if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM();
	if (typeof id != 'string' || !id) this.paint = pntDoc;
	else
	{
		this.cnv = document.all? (this.wnd.document.all[id] || null)
			: document.getElementById? (this.wnd.document.getElementById(id) || null)
			: null;
		this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : '';
		this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe :  jg_ihtm? pntCnvIhtm :pntCnv;
	}

	this.setPrintable(false);
}



function integer_compare(x,y)
{
	return (x < y) ? -1 : ((x > y)*1);
}

var openImg = new Image();
openImg.src = "picture/defaut/open.gif";
var closedImg = new Image();
closedImg.src = "picture/defaut/closed.gif";

function showBranch(branch){
	var objBranch = document.getElementById(branch).style;
	if(objBranch.display=="block")
		objBranch.display="none";
	else
		objBranch.display="block";
}

function swapFolder(img){
	objImg = document.getElementById(img);
	if(objImg.src.indexOf('closed.gif')>-1)
		objImg.src = openImg.src;
	else
		objImg.src = closedImg.src;
}



