var karttaObj;
var karttaTyyli;
var karttaDoc;
var seliteObj;
var seliteTyyli;
var histoDoc;
var karttaAlueObj;
var karttaArvoObj;
var tayttoVarit = new Array();
var varienVahvuus = new Array();
var latausDiv; 
var latausTeksti; 
var svgNS = "http://www.w3.org/2000/svg";
var xhtmlNS = "http://www.w3.org/1999/xhtml";
var objectDet;
var arvot = new Array();
var pelkatArvot = new Array();
var kynnysarvot = new Array();
var head = document.getElementsByTagName('head').item(0);
var thisArray=[];

var svgNelio;
var svgPaaViewport;
var width;
var height;

var alueenVari;
var seliteViiva;
var nykLuokka;
var pluginPixWidth;
var pluginPixHeight;
var painettu = 0;
var oletusViewBoxX = 300;
var oletusViewBoxY = 204;
var oletusViewBoxWidth = 90;
var oletusViewBoxHeight = 120;
var nykVari = '#1A4A8C';
var skaalausKerroin = 10;
var kartanKeskusX = 345;
var kartanKeskusY = 264;

//histogrammin tietoja
var histoAloitusX = 90;
var histoAloitusY = 25;
var lowerY = 680;
var histoKorkeus = 680;
var histoLeveys = 900;

var formi='';

var valueV='';
var vaikaV='';
var vaiheV='';
var vaineV='';
var vaikaVS=0;

/* Vaihdetaan kartta */
function vaihdaKartta(){
  latausStatus("ladataan...");
  valinnatV();
  vaikaV=vaikaV.substring(2,6);
  valaika=vaikaV;
  vaihdaScripti('arvoscr',WfServletPolku+'?IBIF_ex='+vaiheV+'&IBIAPP_app=witmaps&YALUEVAL='+valueV+vaineV+'&file=arv.js','map');
}

/* Valintalistojen tilan tallentaminen */
function valinnatV(){
formi=document.A1;
vaikaVS=formi.YAIKAVALI.options.selectedIndex;
valueV=formi.YALUEVAL.options[formi.YALUEVAL.options.selectedIndex].value;
vaikaV=formi.YAIKAVALI.options[vaikaVS].value;
vaiheV=formi.YAINEISTO.options[formi.YAINEISTO.options.selectedIndex].value;
vaineV=formi.YAINVAL.options[formi.YAINVAL.options.selectedIndex].value;
}
 
/* Aika-valintalistan muuttaminen */ 
function vaihdaAika(){
  valinnatV();
  vaikaV=vaikaV.substring(2,6);
  valaika=vaikaV;
  setTimeout(tarkVarita,100);
}

/* Tieto-valintalistan muuttaminen */
function vaihdaTieto(){
  valinnatV();
  vaikaV=vaikaV.substring(2,6);
  valaika=vaikaV;
  teeVaihto();
}

/* Tarkistetaan onko FireFox, jos on pakotetaan lataamaan kartta uudelleen, jottei jämähtäisi */
function tarkVarita(arg){
 if (navigator.product == 'Gecko'){
  valinnatV();
  var vaihdUrl=WfApppathPolku+"map"+valueV+".svgz";
  kirjoitaSVGDom('svghist',WfApppathPolku+'histo.svgz',screen.width/5.5,screen.width/4,"svghisto");
  kirjoitaSVGDom("svgmap",vaihdUrl, screen.width*0.52, screen.width*0.52,"svgkartta");
 }
 else {
  varita(arg);
 }
}

/* Valintalistojen täyttäminen javascripteistä */
function taytaValinnat()
{
  formi=document.A1;
	var vaikaVP = formi.YAIKAVALI;
	var valittuAika=vaikaVP.options.selectedIndex;
	vaikaVP.options.length = 0;
	for(i=0;i<ajatV.length-1;i+=1)
	{
	  var valaikaV=ajatV[i];
	  vaikaVP.options[i]=new Option(valaikaV.substring(2,6),valaikaV.substring(0,6)+'/'+valaikaV.substring(7,8)+'/'+valaikaV.substring(9,10));
	}
	vaikaVP.options.selectedIndex=valittuAika;
	valaika=vaikaVP.options[valittuAika].text;
	var vtietoVP = formi.YAINVAL;
	var valittuTieto=vtietoVP.options.selectedIndex;
	vtietoVP.options.length = 0;
	for(i=0;i<tietoV.length-1;i+=2)
	{
		vtietoVP.options[i/2] = new Option(tietoV[i],tietoV[i+1]);
	}
	vtietoVP.options.selectedIndex=valittuTieto;
}

/* Aiheen vaihtofunktio */
function vaihdaAihe(){
  latausStatus("ladataan...");
  valinnatV();
  vaikaV=vaikaV.substring(2,6);
  valaika=vaikaV;
  vaihdaScripti('aikascr',WfServletPolku+'?IBIF_ex=yaiksel1&IBIAPP_app=witmaps&YTAULU='+vaiheV+'&file=ajat'+vaiheV+'.js',true);
  //valinnatV();
  formi.YAIKAVALI.options.selectedIndex=0;
  formi.YAINVAL.options.selectedIndex=0;
  vaikaV=formi.YAIKAVALI.options[0].value.substring(2,6);
  valaika=vaikaV;
}

/* Tieto-javascriptin vaihtofunktio 2 */
function vaihdaScripti(id,src,tayta){
  var old  = document.getElementById(id);
  script = document.createElement('script');
  script.src = src;
  script.type = 'text/javascript';
  script.id = id;
  void(head.replaceChild(script,old));


  if(navigator.userAgent.toLowerCase().indexOf('opera') + 1){
    if (id=='arvoscr'){
        if (tayta=='map') {  
		   var vaihdUrl=WfApppathPolku+"map"+valueV+".svgz";
           kirjoitaSVGDom("svgmap",vaihdUrl, screen.width*0.52, screen.width*0.52,"svgkartta");
		}
        else {setTimeout(varita,100); }	   	
	}
    else if (id=='tietoscr'){
        void(taytaValinnat());
     	vaihdaScripti('arvoscr',WfServletPolku+'?IBIF_ex='+vaiheV+'&IBIAPP_app=witmaps&YALUEVAL='+valueV+vaineV+'&file=arv.js',true);		
	}
    else if (id=='aikascr'){
        void(taytaValinnat());
		vaihdaScripti('tietoscr',WfApppathPolku+vaiheV+'Tieto.js',true);
   }	  
  }
  else {
    script.onreadystatechange=function(){
     if (script.readyState=='loaded' || script.readyState=='complete'){ 
	   if (id=='arvoscr'){
        if (tayta=='map') {  
		   var vaihdUrl=WfApppathPolku+"map"+valueV+".svgz";
           kirjoitaSVGDom("svgmap",vaihdUrl, screen.width*0.52, screen.width*0.52,"svgkartta");
		}
       else {setTimeout(varita,100);	}
	   }
	   else if (id=='tietoscr'){
        void(taytaValinnat());
     	vaihdaScripti('arvoscr',WfServletPolku+'?IBIF_ex='+vaiheV+'&IBIAPP_app=witmaps&YALUEVAL='+valueV+vaineV+'&file=arv.js',true);		
	   }	  
	   else if (id=='aikascr'){
        void(taytaValinnat());
		vaihdaScripti('tietoscr',WfApppathPolku+vaiheV+'Tieto.js',true);
	   }	  
     }
    }
    script.onload=function(){
	 if (id=='arvoscr'){
      var vaihdUrl=WfApppathPolku+"map"+valueV+".svgz";
      kirjoitaSVGDom('svghist',WfApppathPolku+'histo.svgz',screen.width/5.5,screen.width/4,"svghisto");
      kirjoitaSVGDom("svgmap",vaihdUrl, screen.width*0.52, screen.width*0.52,"svgkartta");
     }
    else if (id=='tietoscr'){
        void(taytaValinnat());
     	vaihdaScripti('arvoscr',WfServletPolku+'?IBIF_ex='+vaiheV+'&IBIAPP_app=witmaps&YALUEVAL='+valueV+vaineV+'&file=arv.js',true);		
 	}
   else if (id=='aikascr'){
        void(taytaValinnat());
		vaihdaScripti('tietoscr',WfApppathPolku+vaiheV+'Tieto.js',true);
   }	  
  }
 }
 if (tayta) {
    void(taytaValinnat());
  }
}

/* Arvo-javascriptin vaihtofunktio */
function teeVaihto(){
  latausStatus("ladataan...");
  valinnatV();
  vaihdaScripti('arvoscr',WfServletPolku+'?IBIF_ex='+vaiheV+'&IBIAPP_app=witmaps&YALUEVAL='+valueV+vaineV+'&file=arv.js',false);

}


/* Tasojen näkyvyyden vaihtofunktio */
function vaihdaTaso(layerName) {
        var layer=karttaDoc.getElementById(layerName);
        if (document.getElementById("i1").checked || layerName=='aikasarjaKaavio')
		{
		 layer.setAttributeNS(null,"visibility","visible");
		 }
        else {
		 layer.setAttributeNS(null,"visibility","hidden");
		 }
}

/* Valintalistojen näkyvyyden päivitysfunktio */
function vaihdaNaytto() {
				if (document.getElementById("Vert").checked){
				 document.getElementById("luokittelu").value='NC';
				 document.getElementById("VertVal").style.display="block";
				 }
        else{
				 document.getElementById("VertVal").style.display="none";
				 }
        if (document.getElementById("luokittelu").value=='OW'){
				 document.getElementById("customValue").style.display="block";
				 luokkienLkm=document.getElementById("luokkia").value;
				 for (var i=1;i<7;i++){
				     cVal="cValue"+i;
						 if (i<luokkienLkm){ 
						  eval("document.getElementById(\""+cVal+"\").style.display=\"inline\"");
							}
							else {
							eval("document.getElementById(\""+cVal+"\").style.display=\"none\"");
							}
						}	
				} 
        else {
				 document.getElementById("customValue").style.display="none";
				 }	
}



/* Pikkukartan zoomausfunktio */
function zoomaa(type){

// referenssi karttaan
  var mappi = karttaDoc.getElementById('map')

// lähennä
	if (type == "plus")	{
        if (skaalausKerroin > 0.5) skaalausKerroin = skaalausKerroin - 0.5;
	}

// loitonna	
	if (type == "miinus")	{
	if (skaalausKerroin < 10)	skaalausKerroin = skaalausKerroin + 0.5;
	}

// lasketaan uudet viewboxin attribuutit
	var uusiViewBoxWidth = oletusViewBoxWidth * skaalausKerroin / 10;  
	var uusiViewBoxHeight = oletusViewBoxHeight * skaalausKerroin / 10; 
	var uusiViewBoxX = kartanKeskusX - (uusiViewBoxWidth / 2 );
	var uusiViewBoxY = kartanKeskusY - (uusiViewBoxHeight / 2 );

    kartanKeskusX=uusiViewBoxX + (uusiViewBoxWidth / 2 );
    kartanKeskusY=uusiViewBoxY + (uusiViewBoxHeight / 2 );

// asetetaan kartalle uusi viewboxi	
    mappi.setAttributeNS(null,"viewBox",uusiViewBoxX+" "+uusiViewBoxY+" "+uusiViewBoxWidth+" "+uusiViewBoxHeight);

// asetetaan neliö saman kokoiseksi kuin viewboxi
	svgNelio.setAttributeNS(null,"x",uusiViewBoxX);
	svgNelio.setAttributeNS(null,"y",uusiViewBoxY);
	svgNelio.setAttributeNS(null,"width",uusiViewBoxWidth);
	svgNelio.setAttributeNS(null,"height",uusiViewBoxHeight);
}

/* Alueen tietojen näyttäminen */	
function naytaAlue(alueKoodi,nayta) {	

	var alueenJSKoodi = "A" + alueKoodi;
	tamaId = alueKoodi;
	try {
	alueenNimi = thisArray[alueenJSKoodi][0];
	alueenKoodi = thisArray[alueenJSKoodi][1];
    karttaAlueObj.data=alueenNimi;		
	ind = Number(document.getElementById("YAIKAVALI").selectedIndex) + 2;
		
	// otetaan vanha arvo talteen ja väritetään alue keltaisella ja säilötään edellinen arvo
	karttaObj = karttaDoc.getElementById(tamaId);
	karttaTyyli = karttaObj.style;
	alueenVari = karttaTyyli.getPropertyValue("fill"); 
	karttaTyyli.setProperty("fill","rgb(255,204,51)",null); 

	// onko tietoa vai puuttuuko, jos on, näytetään tiedot
	if (thisArray[alueenJSKoodi][ind]!= "-") { 
	// haetaan arvo 
    karttaArvoObj.data=thisArray[alueenJSKoodi][ind];	
 
	// yhteys vastaavaan selitteeseen ja histogrammiin
	nykLuokka = alueenKoodi;
	seliteObj = karttaDoc.getElementById("val"+nykLuokka);
	histoObj = histoDoc.getElementById("histoBar"+alueKoodi);
	histoTyyli = histoObj.style;
	histoTyyli.setProperty("fill","rgb(255,204,51)",null);

    // otetaan vanha arvo talteen ja muutetaan selitteen viiva paksummaksi ja keltaiseksi
   	seliteTyyli = seliteObj.style;
   	seliteViiva = seliteTyyli.getPropertyValue("stroke"); 
    seliteTyyli.setProperty("stroke-width","3",null);
	seliteTyyli.setProperty("stroke","rgb(255,204,51)",null); 
        }	
	else {
    karttaArvoObj.data="-";
	}
	}
	catch(e){}

}

/* Alueen tietojen tyhjentäminen */
function tyhjennaAlue(nayta) {
   karttaAlueObj.data="";		
   karttaArvoObj.data="";	
   if (nayta==1) {
        // palautetaan alkuperäinen väri		
		karttaTyyli.setProperty("fill",alueenVari,null);	
		if (histoObj) {
    		// palautetaan alkuperäinen väri
			histoTyyli.setProperty("fill",alueenVari,null); 
		}
	}
	else {
    	// jos oli tyhjä, laitetaan tyhjän väri
		karttaTyyli.setProperty("fill","#FFFF00",null);			
	}
	// selitteen viiva normaaliksi ja alkuperäisen väriseksi
	seliteTyyli.setProperty("stroke-width","0.5",null); 
	seliteTyyli.setProperty("stroke",seliteViiva,null);
}	

/* Alustetaan käytettävät dokumentit */
function dokkarit(){
  // jos mozilla tai Opera, käytetään objectia, muutoin embediä
	if (objectDet){
	 karttaDoc = document.getElementById("svgmap").contentDocument;
	 histoDoc = document.getElementById("svghist").contentDocument;
	}
	else {
	 karttaDoc = document.getElementById("svgmap").getSVGDocument();
	 histoDoc = document.getElementById("svghist").getSVGDocument();
	}
}

/* Lataustilanteen näyttäminen */	
function latausStatus(arg){
		if (arg==0){
		latausDiv.style.display="none";
		}
		else {
		latausDiv.style.display="block";
		latausTeksti.firstChild.nodeValue=arg;
		}
 }	
	
/* Kartan värittäminen */	
function varita(arg) {
 
	karttaAlueObj = karttaDoc.getElementById("alueTeksti").childNodes.item(0);
	karttaArvoObj = karttaDoc.getElementById("arvoTeksti").childNodes.item(0);

	overviewViewport = karttaDoc.getElementById("pikkuKartta");		
	pluginPixWidth = overviewViewport.getAttributeNS(null,"width");
	pluginPixHeight = overviewViewport.getAttributeNS(null,"height");

	// yhteys karttalaatikkoon
	svgNelio = karttaDoc.getElementById("karttaLaatikko");
	svgPaaViewport = karttaDoc.getElementById("map");
  
    zoomaa();

	var alueenJSKoodi;
	ind = Number(document.getElementById("YAIKAVALI").selectedIndex) + 2;
	
	latausStatus("lasketaan luokkarajoja...");

	luokkienLkm = document.getElementById("luokkia").value;
	nykVari = ''+document.getElementById("variVal").value;

	node=karttaDoc.getElementById('Kartta');
    polku=node.getElementsByTagNameNS(svgNS,'path');

	valLuokat=document.getElementById("luokittelu").value;

	// jos luokittelematon luokkien lukumäärä -1:ksi
	if (valLuokat=='NC')  {
    var luokkienLkm = -1;
	}
 
 // jos tehdään muuta kuin vaihdetaan pelkästään väriä, alustetaan arvot uusiksi	
 if (arg!='varit'){	
	arvot = new Array();

	//hae arvot, id ja väritunnus arvosrc.js:stä
	j=0;
	var polkuLength=polku.length-1;
	for (var i = polkuLength; i >=0; i--) {

	  alueenJSKoodi = "A"+polku.item(i).getAttributeNS(null,'id');		
	  try {
	    // luetaan yksittäisistä javascript-muuttujista arrayksi
  	    thisArray[alueenJSKoodi] = this[alueenJSKoodi];

   	    arvot[j] = new Array(3);
        arvot[j][0] = thisArray[alueenJSKoodi][ind];
		arvot[j][1] = alueenJSKoodi.substring(1);
        arvot[j][2] = thisArray[alueenJSKoodi][1];
        j++;
	}
	catch(err){
	    // asetetaan javascriptistä puuttuvat alueet keltaiseksi
		polku.item(i).style.setProperty('fill','#FFFF00','');
	}	
   }

	//lajittele arvomatriisi
   arvot.sort(function vertaaLukuja(a,b){return a[0] - b[0]});


   if (luokkienLkm>arvot.length){
    document.getElementById("luokkia").value=arvot.length;
	luokkienLkm=arvot.length;
	}
  
	//ottaa pelkät arvot matriisista
	pelkatArvot = new Array();
	for (var i = arvot.length-1; i >=0 ;  i--) {
				pelkatArvot[i] = arvot[i][0];	
	}


	var tilastot=document.getElementById("tilastot").checked;
	var SDAM = 1;

	if (valLuokat=='SD' || valLuokat=='NM' || tilastot)  {
	 var tl = tunnusluvut(pelkatArvot);
     var average = tl[0];
	 var variance =  tl[1];
 	 var standardDeviation = tl[2];
     SDAM = tl[3];
	}


// jos tehdään muuta kuin vaihdetaan tunnuslukujen näkyvyyttä, lasketaan luokat uusiksi		
if (arg!='tilastot'){	
    var minV = arvot[0][0];
    var maxV = arvot[arvot.length -1][0];


  	// Geometrinen
    if (valLuokat=='GE'){
	 if (arvot[0][0]>0){
	  kynnysarvo= (Math.log(arvot[arvot.length - 1][0])-Math.log(arvot[0][0]))/luokkienLkm;
	  kynnysarvot[0] = arvot[0][0] - 0.01;
	  for (var i = 1; i<luokkienLkm; i++) {
		kynnysarvot[i] = Math.exp(Math.log(arvot[0][0]) + (i)*kynnysarvo);
      }
	  kynnysarvot[luokkienLkm] = arvot[arvot.length - 1][0];     
	 }	
	 else {
	  alert('Geometristä sarjaa ei voi laskea, pienin arvo ei positiivinen');
	  valLuokat='NC';
	  document.getElementById("luokittelu").value='NC';
	  luokkienLkm=-1;
	 }
	}	
	
	// luokittelematon
	if (valLuokat=='NC' && !document.getElementById('Vert').checked)  {
  	kynnysarvot[0] = arvot[0][0] - 0.01;
	  varienVahvuus = new Array();
	  varienVahvuus[0] = 0.1;

	  for (var i = arvot.length-1; i > 0 ; i--) {
  		kynnysarvot[i] = arvot[i][0];
	  	varienVahvuus[i] = Math.round((0.9*(arvot[i][0] - minV)/(maxV-minV)+0.1)*1000)/1000;
	  }
	}

	//Optimaalinen
	else	if (valLuokat=='FI')  {
	kynnysarvot[0] = arvot[0][0] - 0.01;

	var katkot=JenksKatkot(pelkatArvot, luokkienLkm);
   
	for (var i = katkot.length-2; i >0; i--) {
		kynnysarvot[i] = arvot[katkot[i]-1][0]+0.01;
	  }
    kynnysarvot[katkot.length-1] = arvot[katkot[katkot.length-1]][0];
	
	var luokTunnusluvut = new Array();
	k=0;
	for (var l = 0; l < katkot.length-1;  l++) {
		var pelkatArvot2 = new Array();
		j=0;
		for (var i = 0; i < arvot.length;  i++) {
			if ((arvot[i][0] > kynnysarvot[k]) && (arvot[i][0] <= kynnysarvot[k+1])){	
			pelkatArvot2[j] = arvot[i][0];
			j++;
			}
		}
    k++;
	

	var tl = tunnusluvut(pelkatArvot2);
		luokTunnusluvut[l]=tl[0];
	}	

    if (katkot.length<arvot.length-1){
	for (var l = 1; l < katkot.length-1;  l++) {
	 var i1=1;
	 if ((katkot[l]-i1)>=0){
	  while((luokTunnusluvut[l]-arvot[katkot[l]-i1][0])>(arvot[katkot[l]-i1][0]-luokTunnusluvut[l-1])){
	   kynnysarvot[l]=arvot[katkot[l]-i1+1][0];
	   i1--;
	   if ((katkot[l]-i1)>=arvot.length){break;}
	  }
	 }
	 var i1=2;	 
 	 if ((katkot[l]-i1)>=0){
	  while((luokTunnusluvut[l]-arvot[katkot[l]-i1][0])<(arvot[katkot[l]-i1][0]-luokTunnusluvut[l-1])){
  	   kynnysarvot[l]=arvot[katkot[l]-i1][0];
	   i1++;
	   if ((katkot[l]-i1)<0){break;}
      }
     }
    }
    }
	}

    // Keskiarvo
	else	if (valLuokat=='NM')  {
	kynnysarvot[0] = arvot[0][0] - 0.01;
	kynnysarvot[2] = average;
	kynnysarvot[4] = arvot[arvot.length-1][0];
	var luokkienLkm = 4;
    document.getElementById("luokkia").value = luokkienLkm;
	var lowArray = new Array();
	lowArray[0] = kynnysarvot[0];
    var hiArray = new Array();
	for (var i = 1; i < arvot.length; i++) {
		if (arvot[i][0] <= average) lowArray[lowArray.length]=arvot[i][0];
		else hiArray[hiArray.length]=arvot[i][0];
	}
	var tlL=tunnusluvut(lowArray);
    kynnysarvot[1] = tlL[0];
	var tlH=tunnusluvut(hiArray);
    kynnysarvot[3] = tlH[0];
	}

	//keskihajonta		
	else if (valLuokat=='SD')  {
	kynnysarvot[0] = arvot[0][0] - 0.01;
    kynnysarvot[1] = average-standardDeviation;
	kynnysarvot[2] = average;
    kynnysarvot[3] = average+standardDeviation;
	kynnysarvot[4] = arvot[arvot.length-1][0];
	var luokkienLkm = 4;
    document.getElementById("luokkia").value = luokkienLkm;
	}

	//vertailu
	else if (valLuokat=='NC' && document.getElementById('Vert').checked)  {
    kynnysarvot[0] = arvot[0][0] - 0.01;

	  varienVahvuus = new Array();
	  tayttoVarit = new Array();
	  varienVahvuus[0] = 0.1;
	  var luokkienLkm = -1;
	  var nollakohta=document.getElementById('VertValue').value;
	  if (nollakohta>maxV) {
		 nollakohta=maxV;
		 document.getElementById('VertValue').value=nollakohta;
		}
 	  if (nollakohta<minV) {
		 nollakohta=minV;
		 document.getElementById('VertValue').value=nollakohta;
		}
	  if (document.getElementById('VertSuunt1').checked){
	   var alavari=HEXvaritRGBksi('#CC0000');
	   var ylavari=HEXvaritRGBksi('#003580');
	  }
	 else {
	  var alavari=HEXvaritRGBksi('#003580');
	  var ylavari=HEXvaritRGBksi('#CC0000');
	 }
	 for (var i = arvot.length-1; i >= 0 ; i--) {
	 	kynnysarvot[i] = arvot[i][0];
	  if (kynnysarvot[i]<nollakohta){ 
	   varienVahvuus[i] = 1.1-Math.round((0.9*(arvot[i][0] - minV)/(nollakohta-minV)+0.1)*1000)/1000;
		 tayttoVarit[i] = laskeVari(varienVahvuus[i],alavari);
		}
	  else if (kynnysarvot[i]>nollakohta){ 
	   varienVahvuus[i] = Math.round((0.9*(arvot[i][0] - nollakohta)/(maxV-nollakohta)+0.1)*1000)/1000;
  	 tayttoVarit[i] = laskeVari(varienVahvuus[i],ylavari);
		}
	  else { varienVahvuus[i] = 0;
	   tayttoVarit[i] = laskeVari(varienVahvuus[i],ylavari)
	  }
	 }
	}

	// tasaluokat
	else if (valLuokat=='QU'){
	kynnysarvo = arvot.length / luokkienLkm;
	nykyKynnysarvo = kynnysarvo;
	kynnysarvot[0] = arvot[0][0] - 0.01;
	for (var i = 1; i < luokkienLkm; i++) {
		kynnysarvot[i] = arvot[Math.round(nykyKynnysarvo)][0];
		nykyKynnysarvo = nykyKynnysarvo + kynnysarvo;
	}
	kynnysarvot[i] = arvot[arvot.length - 1][0];
	}

    //tasavälit
	else if (valLuokat=='EQ')  {
	kynnysarvo = (arvot[arvot.length - 1][0]-arvot[0][0]) / luokkienLkm;
	nykyKynnysarvo = kynnysarvo;
	kynnysarvot[0] = arvot[0][0] - 0.01;
	for (var i = 1; i < luokkienLkm; i++) {
		kynnysarvot[i] = kynnysarvot[0] + nykyKynnysarvo;
		nykyKynnysarvo = nykyKynnysarvo + kynnysarvo;
	}
	kynnysarvot[i] = arvot[arvot.length - 1][0];
	}


    // Aritmeettinen
    else if (valLuokat=='AR'){
	var jakaja=0;
	for(i=1;i<=luokkienLkm;i++){
	 jakaja+=i;
	}
	kynnysarvo= (arvot[arvot.length - 1][0]-arvot[0][0])/jakaja;
	kynnysarvot[0] = arvot[0][0] - 0.01;
	for (var i = 1; i < luokkienLkm; i++) {
		kynnysarvot[i] = kynnysarvot[i-1] + i*kynnysarvo;
    }
	kynnysarvot[i] = arvot[arvot.length - 1][0];
	}

    // Aritmeettinen, laskeva
	else if (valLuokat=='AD'){
	var jakaja=0;
	for(i=1;i<=luokkienLkm;i++){
	 jakaja+=i;
	}
	kynnysarvo= (arvot[arvot.length - 1][0]-arvot[0][0])/jakaja;
	kynnysarvot[0] = arvot[0][0] - 0.01;
	for (var i = 1; i < luokkienLkm; i++) {
		kynnysarvot[i] = kynnysarvot[i-1] + (luokkienLkm-i+1)*kynnysarvo;
    }
	kynnysarvot[i] = arvot[arvot.length - 1][0];
	}

    // oma luokitus
	else if (valLuokat=='OW')  {
	kynnysarvot[0] = arvot[0][0] - 0.01;
	for (var i = 1; i < luokkienLkm; i++) {
    cVal="cValue"+i;
		kynnysarvot[i] = parseFloat(eval("document.getElementById(\""+cVal+"\").value"));
	}
	kynnysarvot[i] = arvot[arvot.length - 1][0];
	}

}	
}

// jos tehdään muuta kuin vaihdetaan tunnuslukujen näkyvyyttä, lasketaan värit uusiksi
if (arg!='tilastot'){
	// asetetaan värit paikalleen
	latausStatus("määritellään värejä...");

    var minV = arvot[0][0];
    var maxV = arvot[arvot.length -1][0];

	var suhtKontr=document.getElementById('maksKontr').checked;


	if (suhtKontr==true && luokkienLkm >1){
	// suhteellinen kontrasti, lasketaan väriarvot luokkavälien keskipisteiden mukaan
	varienVahvuus = new Array();
	for (i=0;i<luokkienLkm;i++) {
  	 varienVahvuus[i] = Math.round((0.9*((kynnysarvot[i] + kynnysarvot[i+1])/2 - minV)/(maxV-minV)+0.1)*1000)/1000;
	   }
	}
	else
	{
	// maksimi-kontrasti, eli perinteinen tapa
	 if (luokkienLkm == 2) {
			varienVahvuus = new Array(0.1,1);
     }
	 else if (luokkienLkm == 3) {
			varienVahvuus = new Array(0.1,0.55,1);
	 }
	 else if (luokkienLkm == 4) {
			varienVahvuus = new Array(0.1,0.4,0.7,1);
	 }
	 else if (luokkienLkm == 5) {
			varienVahvuus = new Array(0.1,0.325,0.55,0.775,1);
	 }
	 else if (luokkienLkm == 6) {
			varienVahvuus = new Array(0.1,0.28,0.46,0.64,0.82,1);
 	 }
 	 else if (luokkienLkm == 7) {
			varienVahvuus = new Array(0.1,0.25,0.4,0.55,0.7,0.85,1);
	 }
	}



	// lasketaan täyttövärit, jollei luokittelematon	
	  if (valLuokat=='NC' && document.getElementById('Vert').checked){
 		}
	  else {
		  tayttoVarit = laskeVarit(varienVahvuus,nykVari);
		}

	// asetetaan värit paikoilleen
	latausStatus("väritetään...");

	for (var i = arvot.length-1; i >=0; i--) {
		tamaId = arvot[i][1];
		var varVahvLen=varienVahvuus.length -1;

		alueenJSKoodi = "A"+tamaId;
		nykArvo = arvot[i][0];
        try {
	      var karttaObjStyle=karttaDoc.getElementById(tamaId).style;
		  // jos luokittelematon
		  if (luokkienLkm<0){
				 karttaObjStyle.setProperty('fill',tayttoVarit[i],'');
				 arvot[i][2] = i;
				 thisArray[alueenJSKoodi][1] = i;
		  }
		  else {
			if (nykArvo >= kynnysarvot[varVahvLen]) {
  		        karttaObjStyle.setProperty('fill',tayttoVarit[varVahvLen],'');
				arvot[i][2] = varVahvLen;
				thisArray[alueenJSKoodi][1] = varVahvLen;
			}
			else {
		  	 for (var j = 0; j < varVahvLen; j++) {
			 	if ((nykArvo >= kynnysarvot[j]) && (nykArvo < kynnysarvot[j+1])) {
				  karttaObjStyle.setProperty('fill',tayttoVarit[j],'');
		  		  arvot[i][2] = j;
				  thisArray[alueenJSKoodi][1] = j;
				}
		 	 }
			}	
          }
        }
	    catch(er){}
	}
}	
	


	// tehdään selite
	latausStatus("tehdään selite...");

	// tehdään otsikko
   	seliteObj = karttaDoc.getElementById("otsikko").childNodes.item(0);
    seliteObj.data=document.getElementById("YAINVAL").options[document.getElementById("YAINVAL").selectedIndex].text+' ' + valaika;
				
		nykSeliteGroup = karttaDoc.getElementById("selite");
		nykSeliteBox=nykSeliteGroup.childNodes.item(0);
		nykSeliteBox.setAttributeNS(null,"height",(6+4*(luokkienLkm-1)+1)+"%");

		// jos selite on olemassa, poistetaan se	
		while (nykSeliteGroup.childNodes.length > 2) {
  	 		 nykSeliteGroup.removeChild(nykSeliteGroup.childNodes.item(nykSeliteGroup.childNodes.length-1));
		}
    // jos ei luokittelematon...
	if (luokkienLkm > 0){
		nykSeliteBox=nykSeliteGroup.childNodes.item(0);
		nykSeliteBox.setAttributeNS(null,"height",(6+4*(luokkienLkm-1)+1)+"%");
		var j=0;
  	for (var i = luokkienLkm-1; i >= 0; i--) {
		  nykSeliteGroup = karttaDoc.getElementById("selite");
	 		nykSeliteG=karttaDoc.createElementNS(svgNS,"g");
			nykSeliteG.setAttributeNS(null,"id","lval"+i);
			nykSeliteG.setAttributeNS(null,"style","visibility:visible");
			
			nykSeliteV=karttaDoc.createElementNS(svgNS,"rect");
			nykSeliteV.setAttributeNS(null,"x","2%");
			var ycoor=4+4*j;
			nykSeliteV.setAttributeNS(null,"y",ycoor+"%");
			nykSeliteV.setAttributeNS(null,"width","5%");
			nykSeliteV.setAttributeNS(null,"height","3%");
			nykSeliteV.setAttributeNS(null,"id","val"+i);
			nykSeliteV.setAttributeNS(null,"style","fill:"+tayttoVarit[i]+";stroke:black;stroke-width:0.5;");
			nykSeliteG.appendChild(nykSeliteV);

  		nykSeliteG2=karttaDoc.createElementNS(svgNS,"g");
			nykSelite=karttaDoc.createElementNS(svgNS,"text");
			nykSelite.setAttributeNS(null,"x","9%");
			ycoor=ycoor+2;
			nykSelite.setAttributeNS(null,"y",ycoor+"%");
			nykSelite.setAttributeNS(null,"startOffset","0");
			nykSelite.setAttributeNS(null,"id","textVal"+i);
			nykSelite.setAttributeNS(null,"class","selitefontti");
    	texte=karttaDoc.createTextNode(Math.round((kynnysarvot[i])*10)/10 +" - "+Math.round((kynnysarvot[i+1])*10)/10);
	  	nykSelite.appendChild(texte);
    	nykSeliteG2.appendChild(nykSelite);
			nykSeliteG.appendChild(nykSeliteG2);
			nykSeliteGroup.appendChild(nykSeliteG);
			j++;
			}
	}
	// jos luokittelematon...
	else {
		nykSeliteBox=nykSeliteGroup.childNodes.item(0);
		nykSeliteBox.setAttributeNS(null,"height",(6+4*(7-1)+2)+"%");
		var j=0;
		var tayttoVaritLength=tayttoVarit.length;
		if (tayttoVaritLength > 7) {var montaAluetta=true;}
		else {var montaAluetta=false;}
  	for (var i = tayttoVaritLength-1; i >=0; i--) {
			nykSeliteGroup = karttaDoc.getElementById("selite");
	 		nykSeliteG=karttaDoc.createElementNS(svgNS,"g");
			nykSeliteG.setAttributeNS(null,"id","lval"+i);
			nykSeliteG.setAttributeNS(null,"style","visibility:visible");
			
			nykSeliteV=karttaDoc.createElementNS(svgNS,"rect");
			nykSeliteV.setAttributeNS(null,"x","2%");
			var ycoor=4+4*7*j/tayttoVaritLength;
			j++;
			nykSeliteV.setAttributeNS(null,"y",ycoor+"%");
			nykSeliteV.setAttributeNS(null,"width","5%");

		 if (montaAluetta) nykSeliteV.setAttributeNS(null,"height",28/tayttoVaritLength+0.1+"%");
		 else nykSeliteV.setAttributeNS(null,"height","3%");

			nykSeliteV.setAttributeNS(null,"id","val"+i);
			nykSeliteV.setAttributeNS(null,"style","fill:"+tayttoVarit[i]+";stroke:none;");
			nykSeliteG.appendChild(nykSeliteV);
			if (i==0 || i==Math.round((tayttoVaritLength-1)/4) || i==Math.round((tayttoVaritLength-1)/4*3) || i==Math.round((tayttoVaritLength-1)/2) || i==tayttoVaritLength-1 || tayttoVaritLength <= 7){
  		  nykSeliteG2=karttaDoc.createElementNS(svgNS,"g");
			  nykSelite=karttaDoc.createElementNS(svgNS,"text");
			  nykSelite.setAttributeNS(null,"x","9%");
			  ycoor2=ycoor+1;

			  nykSelite.setAttributeNS(null,"y",ycoor2+"%");
			  nykSelite.setAttributeNS(null,"startOffset","0");
			  nykSelite.setAttributeNS(null,"id","textVal"+i);
		  	nykSelite.setAttributeNS(null,"class","selitefontti");
    	  texte=karttaDoc.createTextNode(Math.round((kynnysarvot[i])*10)/10 );
	  	  nykSelite.appendChild(texte);
  			nykSeliteG2.appendChild(nykSelite);
				nykSeliteG.appendChild(nykSeliteG2);
			}   		
			nykSeliteGroup.appendChild(nykSeliteG);
			}
	
	}

// Piirretään histogrammi	
	latausStatus("piirretään histogrammia...");

	
	nykMin = arvot[0][0];
	nykMax = arvot[arvot.length-1][0];

	// minimikorkeus
	nykProsKorkeus = (histoKorkeus - histoAloitusY) / (nykMax - nykMin); 
	yhdenElementinLeveys = histoLeveys / arvot.length;
	// Yhteys histo-dokkarin grouppeihin
	nykHistoGroup = histoDoc.getElementById("histoGroup");
	nykHilaLineGroup = histoDoc.getElementById("histoGridLineGroup");

	// jos histogrammi on olemassa, poistetaan vanha	
	if (nykHistoGroup.childNodes.length > 1) {
		nykHistGroup = histoDoc.getElementById("nykHistoGroup");
		nykHistoGroup.removeChild(nykHistGroup);
		nykHilaLine = histoDoc.getElementById("nykHilaGroup");
		nykHilaLineGroup.removeChild(nykHilaLine);
	}
	histoX = histoAloitusX+3;
	nykHistGroup = histoDoc.createElementNS(svgNS,"g");
	nykHistGroup.setAttributeNS(null,"id","nykHistoGroup");
	    nykHistoGroup.appendChild(nykHistGroup);

	nykIntervalli = 50;
	if ((nykMax - nykMin) < 80) {
		nykIntervalli = 20;	
	}	
	if ((nykMax - nykMin) < 60) {
		nykIntervalli = 10;	
	}
	if ((nykMax - nykMin) < 40) {
		nykIntervalli = 5;	
	}
	if ((nykMax - nykMin) < 20) {
		nykIntervalli = 2.5;	
	}
	nykYval = Math.ceil(nykMin / nykIntervalli) * nykIntervalli;
    nykArvo = 0;
	if (luokkienLkm < 0) {var luokittelematon=true;}
		else {var luokittelematon=false;}

	origHistoBar=histoDoc.createElementNS(svgNS,"rect");
    origHistoBar.setAttributeNS(null,"width",yhdenElementinLeveys);
    origHistoBar.setAttributeNS(null,"onmouseout","top.tyhjennaAlue(1)");
	
	for (var i = 0; i < arvot.length; i++) {
		nykArvo = arvot[i][0];
        if (luokittelematon){nykLuokka = i;}
		else {nykLuokka = arvot[i][2];}
		
		nykVari2 = tayttoVarit[nykLuokka];
    	

		nykHistoKorkeus = histoAloitusY + (nykArvo - nykMin) * nykProsKorkeus;
		nykHistoBar=origHistoBar.cloneNode(true);

		nykHistoBar.setAttributeNS(null,"x",histoX);
		nykHistoBar.setAttributeNS(null,"y",lowerY-nykHistoKorkeus);
	
		nykHistoBar.setAttributeNS(null,"height",nykHistoKorkeus);
		nykHistoBar.setAttributeNS(null,"id","histoBar"+ arvot[i][1]);
		
		nykHistoBar.setAttributeNS(null,"style","fill:"+nykVari2+";stroke:none;");
		//add events
		nykHistoBar.setAttributeNS(null,"onmouseover","top.naytaAlue('"+arvot[i][1]+"',1)");
		
		nykHistGroup.appendChild(nykHistoBar);
		histoX = histoX + yhdenElementinLeveys;
	}


    //Histogrammin hilaviivat
	nykHilaGroup = histoDoc.createElementNS(svgNS,"g");
	nykHilaGroup.setAttributeNS(null,"id","nykHilaGroup");
	
	var i = 0;
	while(nykYval < nykMax) {
		myYcoor = lowerY - (histoAloitusY + (nykYval - nykMin) * nykProsKorkeus);
  
		nykHilaLine=histoDoc.createElementNS(svgNS,"line");
		nykHilaLine.setAttributeNS(null,"x1",histoAloitusX);
		nykHilaLine.setAttributeNS(null,"y1",myYcoor);
		nykHilaLine.setAttributeNS(null,"x2",histoAloitusX+histoLeveys+3);
		nykHilaLine.setAttributeNS(null,"y2",myYcoor);
		nykHilaLine.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
		nykHilaLine.setAttributeNS(null,"id","gridLine"+i);
		nykHilaLine.setAttributeNS(null,"pointer-events","none");
		nykHilaGroup.appendChild(nykHilaLine);
		
        //Asteikkoteksti
		nykHilaText=histoDoc.createElementNS(svgNS,"text");
		nykHilaText.setAttributeNS(null,"x",histoAloitusX-20);
		nykHilaText.setAttributeNS(null,"y",myYcoor+3);
		nykHilaText.setAttributeNS(null,"style","font-size:30px;text-anchor:end;font-family:Helvetica;fill:black;");
		nykHilaTextChild=histoDoc.createTextNode(nykYval);
		nykHilaText.appendChild(nykHilaTextChild);
		nykHilaText.setAttributeNS(null,"id","gridLineTextLeft"+i);
		nykHilaGroup.appendChild(nykHilaText);

		nykYval = nykYval + nykIntervalli;
		i = i + 1;
	}
		
    // Vasemman laidan akseli
	nykHilaLine=histoDoc.createElementNS(svgNS,"line");
	nykHilaLine.setAttributeNS(null,"x1",histoAloitusX);
	nykHilaLine.setAttributeNS(null,"y1",lowerY);
	nykHilaLine.setAttributeNS(null,"x2",histoAloitusX);
	nykHilaLine.setAttributeNS(null,"y2",lowerY-histoKorkeus);
	nykHilaLine.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
	nykHilaLine.setAttributeNS(null,"id","gridLineLeft");
	nykHilaGroup.appendChild(nykHilaLine);
    // Oikean laidan akseli
	nykHilaLine=histoDoc.createElementNS(svgNS,"line");
	nykHilaLine.setAttributeNS(null,"x1",histoAloitusX+histoLeveys+3);
	nykHilaLine.setAttributeNS(null,"y1",lowerY);
	nykHilaLine.setAttributeNS(null,"x2",histoAloitusX+histoLeveys+3);
	nykHilaLine.setAttributeNS(null,"y2",lowerY-histoKorkeus);
	nykHilaLine.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
	nykHilaLine.setAttributeNS(null,"id","gridLineRight");
	nykHilaGroup.appendChild(nykHilaLine);
    nykHilaLineGroup.appendChild(nykHilaGroup);
 
    // varmistetaan että pikkukartan näkyvyys on oikein
	vaihdaTaso('pikkuKartta');
	vaihdaTaso('suurennuslasit');

	latausStatus(0);

	var SDCM=0;

	// Jos näytetään tunnusluvut ja ei ole luokittelematon aineisto, kutustaan tunnuslukufunktiota
	if (valLuokat!='NC' && tilastot){
	 var luokTunnusluvut = new Array();
	 for (var l = 0; l < tayttoVarit.length;  l++) {
		luokTunnusluvut[l] = new Array();
		var pelkatArvot = new Array();
		j=0;
		for (var i = 0; i < arvot.length;  i++) {
			if (arvot[i][2]==l){	
			pelkatArvot[j] = arvot[i][0];
			j++;
			}
		}
		var tl = tunnusluvut(pelkatArvot);
 		SDCM += tl[3];
		luokTunnusluvut[l][0]=Math.round(tl[0]*10)/10;
		luokTunnusluvut[l][1]=Math.round(tl[2]*10)/10;
		luokTunnusluvut[l][2]=tl[4];
 	 }	
	}
 
 	// jos halutaan tunnusluvut näkyviin, levennetään laatikkoa
		if (tilastot){
  		nykSeliteBox=nykSeliteGroup.childNodes.item(0);
	  	nykSeliteBox.setAttributeNS(null,"width","38%");
		if (luokkienLkm<0){
		  seliteKorkeus=6;
		}
		else{
		 seliteKorkeus=luokkienLkm-1;
		}
		 nykSeliteBox.setAttributeNS(null,"height",(11+4*(seliteKorkeus)+2)+"%");
		var j=0;
    	nykSeliteG2=karttaDoc.createElementNS(svgNS,"g");
	 	nykSelite=karttaDoc.createElementNS(svgNS,"text");
   	    nykSelite.setAttributeNS(null,"x","24%");
 		var ycoor=3;
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");			
		nykSelite.setAttributeNS(null,"class","selitefontti");
        texte=karttaDoc.createTextNode('n');
	    nykSelite.appendChild(texte);
        nykSeliteG2.appendChild(nykSelite);
			
		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","31%");
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");
		nykSelite.setAttributeNS(null,"class","selitefontti");
   	    texte=karttaDoc.createTextNode('ka');
     	nykSelite.appendChild(texte);
    	nykSeliteG2.appendChild(nykSelite);

		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","37%");
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");			
		nykSelite.setAttributeNS(null,"class","selitefontti");
		texte=karttaDoc.createTextNode('k-haj');
	  	nykSelite.appendChild(texte);
   		nykSeliteG2.appendChild(nykSelite);
		nykSeliteGroup.appendChild(nykSeliteG2);
			
	  	for (var i = luokkienLkm-1; i >= 0; i--) {
			ycoor=4+4*j;
  			nykSeliteG2=karttaDoc.createElementNS(svgNS,"g");
			nykSelite=karttaDoc.createElementNS(svgNS,"text");
			nykSelite.setAttributeNS(null,"x","25%");
			ycoor=ycoor+2;
			nykSelite.setAttributeNS(null,"y",ycoor+"%");
			nykSelite.setAttributeNS(null,"text-anchor","end");			
			nykSelite.setAttributeNS(null,"class","selitefontti");
    		texte=karttaDoc.createTextNode(luokTunnusluvut[i][2]);
		  	nykSelite.appendChild(texte);
	    	nykSeliteG2.appendChild(nykSelite);
			
			nykSelite=karttaDoc.createElementNS(svgNS,"text");
			nykSelite.setAttributeNS(null,"x","32%");
			nykSelite.setAttributeNS(null,"y",ycoor+"%");
			nykSelite.setAttributeNS(null,"text-anchor","end");
			nykSelite.setAttributeNS(null,"class","selitefontti");
    		texte=karttaDoc.createTextNode(luokTunnusluvut[i][0]);
	  		nykSelite.appendChild(texte);
	    	nykSeliteG2.appendChild(nykSelite);

			nykSelite=karttaDoc.createElementNS(svgNS,"text");
			nykSelite.setAttributeNS(null,"x","37%");
			nykSelite.setAttributeNS(null,"y",ycoor+"%");
			nykSelite.setAttributeNS(null,"text-anchor","end");			
			nykSelite.setAttributeNS(null,"class","selitefontti");
    		texte=karttaDoc.createTextNode(luokTunnusluvut[i][1]);
	  		nykSelite.appendChild(texte);
	    	nykSeliteG2.appendChild(nykSelite);
			nykSeliteGroup.appendChild(nykSeliteG2);
			j++;
		}
		nykSeliteG2=karttaDoc.createElementNS(svgNS,"g");
		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","25%");
		ycoor=4+4*seliteKorkeus+6;
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");			
		nykSelite.setAttributeNS(null,"class","selitefontti");
	    texte=karttaDoc.createTextNode(arvot.length);
		nykSelite.appendChild(texte);
    	nykSeliteG2.appendChild(nykSelite);
			
		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","32%");
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");
		nykSelite.setAttributeNS(null,"class","selitefontti");
	   	texte=karttaDoc.createTextNode(Math.round(average*10)/10);
  		nykSelite.appendChild(texte);
	   	nykSeliteG2.appendChild(nykSelite);

		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","37%");
		nykSelite.setAttributeNS(null,"y",ycoor+"%");
		nykSelite.setAttributeNS(null,"text-anchor","end");			
		nykSelite.setAttributeNS(null,"class","selitefontti");
	   	texte=karttaDoc.createTextNode(Math.round(standardDeviation*10)/10);
  		nykSelite.appendChild(texte);
	   	nykSeliteG2.appendChild(nykSelite);
		
		nykSelite=karttaDoc.createElementNS(svgNS,"text");
		nykSelite.setAttributeNS(null,"x","9%");
		nykSelite.setAttributeNS(null,"y",ycoor+3+"%");
		nykSelite.setAttributeNS(null,"class","selitefontti");
	   	texte=karttaDoc.createTextNode("GVF:"+Math.round(((SDAM-SDCM)/SDAM)*1000)/1000);
  		nykSelite.appendChild(texte);
	   	nykSeliteG2.appendChild(nykSelite);
		
		nykSeliteGroup.appendChild(nykSeliteG2);
	}
	else{
		nykSeliteBox=nykSeliteGroup.childNodes.item(0);
		nykSeliteBox.setAttributeNS(null,"width","22%");
	}
}



function aloitaLiike(evt) {
	painettu = 1;
	width = parseFloat(svgNelio.getAttributeNS(null,"width"));
	height = parseFloat(svgNelio.getAttributeNS(null,"height"));
	evtX = parseFloat(evt.clientX);
	evtY = parseFloat(evt.clientY);
	rectUlXCorner = parseFloat(svgNelio.getAttributeNS(null,"x"));
	rectUlYCorner = parseFloat(svgNelio.getAttributeNS(null,"y"));	
}

function teeLiike(evt) {
	if (painettu == 1) {
		newEvtX = parseFloat(evt.clientX);
		newEvtY = parseFloat(evt.clientY);
		toMoveX = rectUlXCorner + (newEvtX - evtX);
		toMoveY = rectUlYCorner + (newEvtY - evtY);
		
		// pikkukartan rajojen sisällä pysyminen
		if (toMoveX < oletusViewBoxX) {
			svgNelio.setAttributeNS(null,"x",oletusViewBoxX);
		}
		else if ((toMoveX + width) > (oletusViewBoxX + oletusViewBoxWidth)) {
			svgNelio.setAttributeNS(null,"x",oletusViewBoxX + oletusViewBoxWidth - width);				
		}
		else {
			svgNelio.setAttributeNS(null,"x",toMoveX);			
		}
		if (toMoveY < oletusViewBoxY) {
			svgNelio.setAttributeNS(null,"y",oletusViewBoxY);
		}
		else if ((toMoveY + height) > (oletusViewBoxY + oletusViewBoxHeight)) {
			svgNelio.setAttributeNS(null,"y",oletusViewBoxY + oletusViewBoxHeight - height);
		}				
		else {
			svgNelio.setAttributeNS(null,"y",toMoveY);
		}
		
		evtX = newEvtX;
		evtY = newEvtY;
		rectUlXCorner = parseFloat(svgNelio.getAttributeNS(null,"x"));
		rectUlYCorner = parseFloat(svgNelio.getAttributeNS(null,"y"));	
	}	
}

/* Kartan liikuttamisen lopetus */
function lopetaLiike(evt) {
	painettu = 0;
	// asetetaan viewportti
	xulcorner = parseFloat(svgNelio.getAttributeNS(null,"x"));
	yulcorner = parseFloat(svgNelio.getAttributeNS(null,"y"));
	width = parseFloat(svgNelio.getAttributeNS(null,"width"));
	height = parseFloat(svgNelio.getAttributeNS(null,"height"));
	uusiViewport = xulcorner + " " + yulcorner + " " + width + " " + height;
	svgPaaViewport.setAttributeNS(null,"viewBox",uusiViewport);
    kartanKeskusX=xulcorner + (width / 2 );
    kartanKeskusY=yulcorner + (height / 2 );
}

/* Värien HEX-arvon muuttaminen RGB:ksi */
function HEXvaritRGBksi(HexVari) {
	var num = new Array(HexVari.substr(1,2),HexVari.substr(3,2),HexVari.substr(5,2));
	var base = 16;
	var ret = new Array(parseInt(num[0],base),parseInt(num[1],base),parseInt(num[2],base));
	return(ret);	
}

/* Yksittäisen värin laskenta */
function laskeVari(opVal,retcol){
		 var laskeVari='rgb('+Math.round(retcol[0]*opVal+255*(1-opVal))+','+Math.round(retcol[1]*opVal+255*(1-opVal))+','+Math.round(retcol[2]*opVal+255*(1-opVal))+')';
  	 return laskeVari; 
}

/* Värien laskenta */
function laskeVarit(opArray,fill){
			var laskeVarit = new Array(opArray.length);
			var retcol = HEXvaritRGBksi(fill)
			for (var i=0;i<opArray.length;i++){
			 laskeVarit[i] = laskeVari(opArray[i],retcol);
			}
			return laskeVarit; 
}

/* Tunnuslukujen laskenta */
function tunnusluvut(inArray){
	sum = 0;
	sqrTotal = 0;
	n= inArray.length; 
	for (var x = 0; x < inArray.length; x++){
			var val =	inArray[x];
			sqrTotal += val * val;
			sum += val;
  }
  var	average = sum/n;
	var variance =  ( sqrTotal - ((sum * sum)/n) ) / n;
	var SDAM =  ( sqrTotal - ((sum * sum)/n) ) ;
 	var standardDeviation = Math.sqrt(variance);
	var tulosMatr = new Array(average,variance,standardDeviation,SDAM,n);
	return(tulosMatr)
}

/* Aika-valintalistan looppaus */
function animoiKartta(){
  if (formi.anim1.checked==false) return false;
	else {
	 if (formi.YAIKAVALI.options.selectedIndex > 0) 
	   formi.YAIKAVALI.options.selectedIndex=formi.YAIKAVALI.options.selectedIndex-1;
	 else 
	   formi.YAIKAVALI.options.selectedIndex=formi.YAIKAVALI.options.length-1;
   vaihdaAika();
	 setTimeout(animoiKartta,3500);
	}
}

/* Vertailun animointi */
function animoiVertailu(){
  var VertTPVal = parseFloat(document.getElementById('VertValue').value);
  var max = Math.abs(arvot[arvot.length-1][0]);
  var min = Math.abs(arvot[0][0]);
  var VertTPHyppy = (max-min)/20;
  if (document.getElementById('Vert').checked==false){ 
    document.getElementById('anim2').checked=false;
	return false;
  }
  if (document.getElementById('anim2').checked==false) return false;
	else {
	 if (max < (VertTPVal+VertTPHyppy)) 
	   document.getElementById('VertValue').value = min;
	 else document.getElementById('VertValue').value = VertTPVal+VertTPHyppy;
     vaihdaNaytto();tarkVarita();
	 setTimeout(animoiVertailu,1000);
	}
}


/* Kartan päällä klikattaessa käynnistyvä funktio */
function teeJotain(alue){
   var alueenJSKoodi = "A" + alue;
   // jos ollaan vertailutilassa, vaihdetaan nollakohtaa ja päivitetään kartta
   if (document.getElementById('Vert').checked){
    try  {
 	 	 var ind = Number(document.getElementById("YAIKAVALI").selectedIndex) + 2;
		 var alueenArvo = thisArray[alueenJSKoodi][ind];
         document.getElementById('VertValue').value=alueenArvo;
		 tarkVarita();
		 naytaAlue(alue,1);
    } catch(e){}
   }
   // jos ei olla vertailussa, lasketaan muuttujan minimi ja maksimi sekä piirretään kaavio svg-dokumenttiin
   else {
    try  {
	vaihdaTaso('aikasarjaKaavio');
	var teksti='';
	var alueenArvo = thisArray[alueenJSKoodi];
	var minim=999999;
	var maxim=-999999;
	for (var i=2;i<alueenArvo.length-1;i++){
	  if (alueenArvo[i]<minim) minim=alueenArvo[i];
	  if (alueenArvo[i]>maxim) maxim=alueenArvo[i];
	}
	minim=Math.floor(0.95*minim);
	maxim=Math.ceil(1.05*maxim);
	kaavioObj=karttaDoc.getElementById("kaavio");
	while (kaavioObj.childNodes.length > 11) {
  		kaavioObj.removeChild(kaavioObj.childNodes.item(kaavioObj.childNodes.length-1));
    }
    kaavioOtsObj = karttaDoc.getElementById("kaavioOtsikko").childNodes.item(0);
    kaavioOtsObj.data=document.getElementById("YAINVAL").options[document.getElementById("YAINVAL").selectedIndex].text+', '+ alueenArvo[0];
    var maxAika=document.getElementById("YAIKAVALI").options[0].value;
	maxAika=maxAika.substring(2,6);
    for (var i=alueenArvo.length-2;i>=2;i--){
	  teksti+=1200-1120/(alueenArvo.length-2)*i+','+(650-550/(maxim-minim)*(alueenArvo[i]-minim))+' ';
	  if (!(alueenArvo.length-2 > 20 && i%2)) {
		var data = karttaDoc.createTextNode(''+maxAika-i+2);
   		var vuosiTeksti = karttaDoc.createElementNS(svgNS,"text");
		vuosiTeksti.setAttributeNS(null,"x", 1185-1120/(alueenArvo.length-2)*i);
       	vuosiTeksti.setAttributeNS(null,"y", 700);
       	vuosiTeksti.setAttributeNS(null,"style", "font-family:verdana,arial,Helvetica;font-size:20px;");
		vuosiTeksti.appendChild(data);
       	kaavioObj.appendChild(vuosiTeksti);   
	  }
    }
    var viiva = karttaDoc.createElementNS(svgNS,"polyline");
    viiva.setAttributeNS(null,"points", teksti);
    viiva.setAttributeNS(null,"fill", "none");
    viiva.setAttributeNS(null,"stroke", "#003580");
    viiva.setAttributeNS(null,"stroke-width", "3");
    kaavioObj.appendChild(viiva);
				
	// asteikkoviivat
	kaavioViivaRyhma = karttaDoc.createElementNS(svgNS,"g");
	kaavioViivaRyhma.setAttributeNS(null,"id","kaavioViivaRyhma");
	kaavioObj.appendChild(kaavioViivaRyhma);
			
    // lasketaan intervallit kaavion asteikoille
	if ((maxim - minim) < 1) {
	kaavioIntervalli = 0.1;	
	}
	else if ((maxim - minim) < 10) {
	kaavioIntervalli = 1.0;	
	}
	else if ((maxim - minim) < 25) {
	kaavioIntervalli = 2.5;	
	}
	else if ((maxim - minim) < 50) {
	kaavioIntervalli = 5;	
	}
	else if ((maxim - minim) < 100) {
	kaavioIntervalli = 10;	
	}
	else if ((maxim - minim) < 200) {
	kaavioIntervalli = 20;	
	}	
    else kaavioIntervalli = 50;

	kaavioYarvo = minim;
	var i = 0;
	var kierra=1;
	while(kaavioYarvo <= maxim && kierra) {
	 kaavioYkoord = 650-550/(maxim-minim)*(kaavioYarvo - minim);
	 kaavioViiva=karttaDoc.createElementNS(svgNS,"line");
	 kaavioViiva.setAttributeNS(null,"x1",80);
	 kaavioViiva.setAttributeNS(null,"y1",kaavioYkoord);
	 kaavioViiva.setAttributeNS(null,"x2",1200-2240/(alueenArvo.length-2));
	 kaavioViiva.setAttributeNS(null,"y2",kaavioYkoord);
	 kaavioViiva.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
	 kaavioViiva.setAttributeNS(null,"id","kaavioViiva"+i);
	 kaavioViivaRyhma.appendChild(kaavioViiva);
	 // vasemman reunan teksti
	 kaavioArvoTeksti=karttaDoc.createElementNS(svgNS,"text");
	 kaavioArvoTeksti.setAttributeNS(null,"x",60);
	 kaavioArvoTeksti.setAttributeNS(null,"y",kaavioYkoord+3);
	 kaavioArvoTeksti.setAttributeNS(null,"style","font-size:20px;text-anchor:end;font-family:Helvetica;fill:black;");
	 kaavioArvoTekstiChild=karttaDoc.createTextNode(kaavioYarvo);
	 kaavioArvoTeksti.appendChild(kaavioArvoTekstiChild);
	 kaavioArvoTeksti.setAttributeNS(null,"id","kaavioArvoTeksti"+i);
	 kaavioViivaRyhma.appendChild(kaavioArvoTeksti);
	 if (kaavioYarvo==maxim) { kierra=0; }
	 kaavioYarvo = kaavioYarvo + kaavioIntervalli;
	 if (kaavioYarvo>maxim-kaavioIntervalli) { kaavioYarvo=maxim; }
	 i = i + 1;
	}
		
	// vasen reuna
	kaavioViiva=karttaDoc.createElementNS(svgNS,"line");
	kaavioViiva.setAttributeNS(null,"x1",80);
	kaavioViiva.setAttributeNS(null,"y1",650);
	kaavioViiva.setAttributeNS(null,"x2",80);
	kaavioViiva.setAttributeNS(null,"y2",100);
	kaavioViiva.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
	kaavioViiva.setAttributeNS(null,"id","kaavioVasReuna");
	kaavioObj.appendChild(kaavioViiva);
	// oikea reuna
	kaavioViiva=karttaDoc.createElementNS(svgNS,"line");
	kaavioViiva.setAttributeNS(null,"x1",1200-2240/(alueenArvo.length-2));
	kaavioViiva.setAttributeNS(null,"y1",650);
	kaavioViiva.setAttributeNS(null,"x2",1200-2240/(alueenArvo.length-2));
	kaavioViiva.setAttributeNS(null,"y2",100);
	kaavioViiva.setAttributeNS(null,"style","stroke:black;stroke-width:0.5;");
	kaavioViiva.setAttributeNS(null,"id","kaavioOikReuna");
	kaavioObj.appendChild(kaavioViiva);
  } 
 catch(e){
  suljeKaavio();
  }
  }
}

/* Suljetaan aikasarjakaavio */
function suljeKaavio(){
	    var layer=karttaDoc.getElementById('aikasarjaKaavio');
        if (layer.getAttribute("visibility")=="hidden")
		{
		 layer.setAttributeNS(null,"visibility","visible");
		 }
        else {
		 layer.setAttributeNS(null,"visibility","hidden");
		 }
}

/* Lasketaan Fisher-Jenks -katkot aineistosta */
function JenksKatkot(list, numclass) {
        var numdata = list.length;
        var mat1 = new Array(numdata);
        var mat2 = new Array(numdata);
		for (var i = mat1.length-1; i >=0 ; i--) {
			mat1[i] = new Array(numdata);
			mat2[i] = new Array(numdata);
		}	
             
        for (var i = numclass-1; i >=0 ; i--) {
            mat1[0][i] = 1;
            mat2[0][i] = 0;
            for (var j = numdata-1; j >0; j--)
                mat2[j][i] = 999999999;
        }
        var v = 0;

        for (var l = 1; l < numdata; l++) {
            var summa = 0;
            var neliosumma = 0;
            var n = 0;
            for (var m = 0; m <= l; m++) {
              var i3 = l - m + 1;
              var val = list[i3-1];
		  
			  neliosumma += val * val;
              summa += val;
              n++;
              varianssi = neliosumma - (summa * summa)/n;
              var i4 = i3 - 1;
              if (i4 != 0) {
               for (var j = 1; j < numclass; j++) {
                if (mat2[l][j] >= (varianssi + mat2[i4][j-1])) {
                 mat1[l][j] = i4;
                 mat2[l][j] = varianssi + mat2[i4][j-1];
                }
               }
              }
            }
            mat1[l][0] = 1;
            mat2[l][0] = varianssi;	
        }
        var k = numdata-1;        
        var kclass = new Array(numclass+1);        
        kclass[0] = 0;    
        kclass[numclass] = list.length - 1;
        
        for (var j = numclass-1; j > 0; j--) {
            var id =  (mat1[k][j]) ;

            kclass[j] = id;
            k = mat1[k][j] ;			
			
        }	
			return kclass;

}


/* Upotetaan SVG html-sivulle */
function kirjoitaSVGDom(svgid,urli, korkeus, leveys,paikka){
				 upotusPaikka=document.getElementById(paikka);
				 while ( upotusPaikka.hasChildNodes() ) {
				 			 upotusPaikka.removeChild(upotusPaikka.firstChild);
							 }
				if (navigator.userAgent.toLowerCase().indexOf('opera') + 1 || navigator.product == 'Gecko'){		
				 upotettava=document.createElement("object");
				 upotettava.setAttribute("id",svgid);
				 upotettava.setAttribute("name",svgid);
				 upotettava.setAttribute("data",urli);
				 upotettava.setAttribute("height",korkeus);
				 upotettava.setAttribute("width",leveys);		
				 upotettava.setAttribute("type","image/svg+xml");
				 objectDet=true;
			  }
				 else {
	 			 upotettava=document.createElement("embed");
				 upotettava.setAttribute("id",svgid);
				 upotettava.setAttribute("name",svgid);				 
				 upotettava.setAttribute("pluginspage","http://www.adobe.com/svg/viewer/install/");
				 upotettava.setAttribute("src",urli);
				 upotettava.setAttribute("height",korkeus);
				 upotettava.setAttribute("width",leveys);		
				 upotettava.setAttribute("type","image/svg+xml");
 				 objectDet=false;

  			 }
			 
				 upotusPaikka.appendChild(upotettava);	
}
