var result = new Array ();   // pole % vysledku
var num_bars = 20           // pocet vysouvacich sloupecku
var timerID = new Array();
var speed = 1;
var is_bday_m;               // je zadano "moje" datum narozeni (?)
var is_bday_f;               // je zadano "pritelovo" datum narozeni (?)
var was_bday_m = 0;          // jiz bylo zadano "moje" datum narozeni (?) - aktivovano
var Pi = Math.PI;
var last_tip = new Array ();

function init_bars ()
{
        for (i = 0; i < num_bars; i++) {
                result[i] = new Array ();
                result[i]["x1"] = 0;
                result[i]["x2"] = 0;
                document.getElementById("result"+i).style.clip = "rect(0, "+result[i]["x1"]+"px, 10px, 0)";
        }
}

function refresh_bars ()
{       
        
        bday_m = document.bday_my;
        is_bday_m  = (bday_m.d.value > 0) ? 1 : 0;
        is_bday_m *= (bday_m.m.value > 0) ? 1 : 0;
        is_bday_m *= (bday_m.y.value.length > 3) ? 1 : 0;
                		
        bday_f = document.bday_fr;
        was_bday_f = 0;
		is_bday_f  = (bday_f.d.value > 0) ? 1 : 0;
        is_bday_f *= (bday_f.m.value > 0) ? 1 : 0;
        is_bday_f *= (bday_f.y.value.length > 3) ? 1 : 0;
        if (is_bday_f)        was_bday_f = 1;	
		
		if (is_bday_m &&  was_bday_f) {  // ZOBRAZIT GRAFY JEN KDYZ JSOU VYPLNENI OBA (=> m a f )
		     was_bday_m = 1;
		     is_bday_m = 1;
			 is_bday_f = 1;
		} else{
		    was_bday_m = 0;
			is_bday_m = 0;
			is_bday_f = 0;
		}

         //
        count_results ();                                        // Prepocet vysledku

        for (i = 0; i < num_bars; i++) {        // Hejbani se sloupeckama
                clearInterval (timerID[i]);
                timerID[i] = setInterval ("change_bar("+i+")", speed);
        }

        setTimeout("show_tips (); set_celebrity(); star_visibility(); show_send_but (); refresh_send_form ();", 1000);

}

function count_results ()
{
        
        var na_den, d, dd, m, r, birth, t_m, t_f, t_c;
        var soucinitel = new Array ();
        var den_v_ms = 86400000;     // Pocet dnu v milisec.
        var now = new Date ();       // Nynejsi datum
        var cyklus  = new Array ();
        cyklus["m"] = new Array ();  // Moje cykly
        cyklus["f"] = new Array ();  // Cykly pritele   (friend)
        cyklus["c"] = new Array ();  // Cykly osobnosti (celebrita)

        // Urceni data, na ktery se ma Shoda spocitat ::
        // na Dnes
        if (document.shoda.na[0].checked) {
                na_den = now;

        } else {
                r = now.getFullYear();
                m = now.getMonth();

                // na Zitra
                if (document.shoda.na[1].checked) { d = now.getDate() + 1; }

                // na Vikend
                if (document.shoda.na[2].checked) {
                        dd = now.getDay();

                        if (dd > 0 && dd < 6)                // Dnes neni vikend
                                d = now.getDate() + (6 - dd);
                        if (dd == 6 || dd == 0)        {        // Dnes je vikend
                                d  = now.getDate();
                                d += (dd == 6) ? 7 : 6;
                        }
                }
                na_den = new Date (r, m, d);
        }

        // Urceni vlivu jednotlivych parametru = kriterii na "Celkovou shodu"
        for (j = 0; j < 3; j++) {
                for (i = 0; i < document.forms["krit"+j].koef.length; i++) {
                        if (document.forms["krit"+j].koef[i].checked) {
                                soucinitel[j] = Number(document.forms["krit"+j].koef[i].value);
                        }
                }
        }
//        soucinitel[3] = (soucinitel[1] + soucinitel[2])/2; // Vzajemne ovlivneni kriterii "Pritel"
        soucinitel[3] = soucinitel[1] * soucinitel[2]; // Vzajemne ovlivneni kriterii "Pritel"

        // Urceni poctu dni od data narozeni
        t_m = 0;        // Ja
        if (is_bday_m) {
                birth = new Date (bday_m.y.value, bday_m.m.value-1, bday_m.d.value);
                t_m   = (na_den.getTime() - birth.getTime()) / den_v_ms;
        }
        t_f = 0;        // Pritel
        if (is_bday_f) {
                birth = new Date (bday_f.y.value, bday_f.m.value-1, bday_f.d.value)
                t_f   = (na_den.getTime() - birth.getTime()) / den_v_ms;
        }
        t_c = 0;        // Osobnost
/*
        if (was_bday_m) {
                bday_c = document.forms["bday_cel_"+osobnost];
                birth  = new Date (bday_c.y.value, bday_c.m.value-1, bday_c.d.value);
                t_c    = (na_den.getTime() - birth.getTime ()) / den_v_ms;
        }
*/
        // Vypocet dilcich cyklu
        cyklus["m"] = spocitej_cykly(t_m, soucinitel[0]); // Moje cykly - zadavatelka
        cyklus["f"] = spocitej_cykly(t_f, soucinitel[3]); // Cykly pritele
        cyklus["c"] = spocitej_cykly(t_c, 1);                          // Cykly osobnosti

        // Prirazeni novych hodnot velikosti sloupecku
        // Celkova shoda - pritel
        if (is_bday_m && is_bday_f) { result[0]["x2"] = spocitej_shodu (cyklus["m"], cyklus["f"]); }
        else                        { result[0]["x2"] = 0; }
        // Celkova shoda - osobnost
        if (is_bday_m )                                 { result[1]["x2"] = spocitej_shodu (cyklus["m"], cyklus["c"]); }
        else                        { result[1]["x2"] = 0; }
        // Dilci vysledky "moje"
        for (i=0, j=2; i<6; i++, j++)         { result[j]["x2"] = cyklus["m"][i]; }
        // Dilci vysledky "pritel"
        for (i=0, j=8; i<6; i++, j++)        { result[j]["x2"] = cyklus["f"][i]; }
        // Dilci vysledky "osobnost"
        for (i=0, j=14; i<6; i++, j++)         { result[j]["x2"] = cyklus["c"][i]; }
		
}

function change_bar (index)
{      
        
        var bar_length = 275;
        var scale = bar_length / 100; /* bar_length / 100% (100% - max. mozny vysledek) */
        var step = 1;
        var k = (result[index]["x2"] - result[index]["x1"]);

        if (k < 0) k = -1;
        if (k > 0) k = 1;

        result[index]["x1"] += k * step;
        
		document.getElementById("result"+index).style.clip = "rect(0, "+scale*result[index]["x1"]+"px, 10px, 0)";

        // Zmena ciselneho vyjadreni vysledku :
        if (index == 0)
                if (is_bday_m && is_bday_f) { document.procenta0.procenta0.value = result[0]["x1"]+" %"; }
                else  
                                                               { document.procenta0.procenta0.value = ""; }
/*
        if (index == 1)
		        if (is_bday_m)                                { document.procenta1.procenta1.value = result[1]["x1"]+" %"; }
                else                                                { document.procenta1.procenta1.value = ""; }
*/
        if (k == 0)  { clearInterval (timerID[index]); }
        if (k == -1) { if (result[index]["x1"] <= result[index]["x2"])        clearInterval (timerID[index]); }
        if (k == 1)  { if (result[index]["x1"] >= result[index]["x2"])        clearInterval (timerID[index]);        }
}

function spocitej_cykly (t, k)
{
        var cyklus  = new Array ();
        var perioda = new Array (23,28,33,38,43,53); // Periody cyklu dle poradi :: Fyzicky, Emocni, Intelektualni, Intuitivni, Esteticky, Duchovni

        for (i = 0; i < 6; i++)        {
                cyklus[i] = Math.ceil (100 * Math.abs (k * Math.sin (2*Pi/perioda[i] * t)));
                if (cyklus[i] > 100)  cyklus[i] = 100;   // Osetreni pro pripad, kdyby nekdo zadaval koef. > 1
        }

        return cyklus;
}

function spocitej_shodu (c1, c2)
{
        var celk_shoda;
        var suma = 0;
        var shoda = new Array ();

        for (i = 0; i < c1.length; i++) {
                shoda[i] = c1[i] / c2[i];
                if (shoda[i] > 1) shoda[i] = 1 / shoda[i];
                suma += shoda[i];
        }
        celk_shoda = Math.ceil (100 * (suma / shoda.length));

        return celk_shoda;
}

function show_tips ()
{
/*
        var a, b, index;

        for (i = 0; i < 4; i++) {
                if (last_tip[i])        { document.getElementById("tip"+last_tip[i]).style.display = "none"; }

                a = vyber_tip_dle_vysledku (result[i]["x2"]);
           //   b = a / 20 - 1;
                b = a / 10 - 1;
                index       = nahoda (pocet_tipu[i][b] - 1);
                last_tip[i] = i+"_"+a+"_"+index;

        }

        if (is_bday_m && is_bday_f)
                document.getElementById("tip"+last_tip[0]).style.display = "block";
        if (is_bday_m) {
		        
     //           document.getElementById("tip"+last_tip[1]).style.display = "block";
     //           document.getElementById("tip"+last_tip[2]).style.display = "block";
     //           document.getElementById("tip"+last_tip[3]).style.display = "block";
        }
      */
}

function show_send_but ()
{
/*
        if (is_bday_m)        document.getElementById("odeslat").style.visibility = "visible";
        else                  document.getElementById("odeslat").style.visibility = "hidden";
*/
}

function refresh_send_form ()
{
return false;
/*
        var elm = document.data_email;
        elm.shoda_pritel.value   = result[0]["x1"];
        elm.shoda_osobnost.value = result[1]["x1"];
        elm.nick_my.value        = document.forms["nick_my"].nick.value;
        elm.nick_fr.value        = document.forms["nick_fr"].nick.value;
        //elm.osobnost_id.value    = document.forms["bday_cel_"+osobnost].id.value;

        if (is_bday_f)         elm.is_bday_fr.value = 1;
        else                          elm.is_bday_fr.value = 0;
*/
}

function vyber_tip_dle_vysledku (a)
{
//      var interval = 20;
//      ;-)
//      interval += (a > 20) ? 20 : 0;
//      interval += (a > 40) ? 20 : 0;
//      interval += (a > 60) ? 20 : 0;
//      interval += (a > 80) ? 20 : 0;

        var interval = 10;

        while(interval < a) {
          interval += 10;
        }

        return interval;
}

function nahoda (max_n)
{
        return Math.round (Math.random () * max_n);
}


// This function take care about input text field content to only be of digits and jumps to next input field
// done by Rastislav Bostik on 11th April 2004
//
// siref -- source input reference
// dfref -- destination form reference
// len   -- maximal count of number digits
// num   -- destination input field number[numbered from 0 per each form]
// max   -- maximal possible value of input field
function jump_next(siref, dfref, len, num, max) {

    // this part takes care about input text field content using REGEXP
    var re = /^\d+$/;
    if((siref.value.length != 0) && (re.exec(siref.value) == null)) {
      if(siref.value.length == 1) {
        siref.value = "";
      }
      else {
        siref.value = siref.value.substring(0,(siref.value.length-1));
      }
      return false;
    }

    // taking care about max. possible value
    if((siref.value.length == len) && (siref.value > max)) {
      siref.value = siref.value.substring(0,(len-1));
      return false;
    }

    // possible jump to next field
    if(siref.value.length == len) {
      dfref.elements[num].focus();
      refresh_bars ();
      return true;
    }

    // no error or speciat stutus occured.. refreshing!
    refresh_bars();
    return true;
}

// Function takes very special effect on small part of this site.. it makes visible or
// invisible some <div> fields listed bellow ;-)
function star_visibility() {
/*
   if(!document.s_v.s_v1.checked) {
    
//     document.getElementById("s_osobnosti").style.visibility = "hidden";
     document.getElementById("s_osobnosti").style.display = "none";
     document.getElementById("proc_1").style.visibility = "hidden";
     document.getElementById("result1").style.visibility = "hidden";
     document.getElementById("cover").style.visibility = "visible";
     document.getElementById("result14").style.visibility = "hidden";
     document.getElementById("result15").style.visibility = "hidden";
     document.getElementById("result16").style.visibility = "hidden";
     document.getElementById("result17").style.visibility = "hidden";
     document.getElementById("result18").style.visibility = "hidden";
     document.getElementById("result19").style.visibility = "hidden";
     if("tip"+last_tip[1] != 0) {
        if (document.getElementById("tip"+last_tip[1]))
//         document.getElementById("tip"+last_tip[1]).style.visibility = "hidden";
           document.getElementById("tip"+last_tip[1]).style.display = "none";
     }
   }
   else {
//     document.getElementById("s_osobnosti").style.visibility = "visible";
     document.getElementById("s_osobnosti").style.display = "block";
     document.getElementById("proc_1").style.visibility = "visible";
     document.getElementById("result1").style.visibility = "visible";
     document.getElementById("cover").style.visibility = "hidden";
     document.getElementById("result14").style.visibility = "visible";
     document.getElementById("result15").style.visibility = "visible";
     document.getElementById("result16").style.visibility = "visible";
     document.getElementById("result17").style.visibility = "visible";
     document.getElementById("result18").style.visibility = "visible";
     document.getElementById("result19").style.visibility = "visible";
     if("tip"+last_tip[1] != 0) {
        if (document.getElementById("tip"+last_tip[1]))
//         document.getElementById("tip"+last_tip[1]).style.visibility = "visible";
           document.getElementById("tip"+last_tip[1]).style.display = "block";
	 }
   }
   */
   return;
}

// Function sets value of celebrity in tip texts
function set_celebrity() {
/*
        var replaceWhat = (prevOsobnost != null) ? document.forms["bday_cel_"+prevOsobnost].name.value : "(#celebrita)";
        var replaceWith = document.forms["bday_cel_"+osobnost].name.value;

        for (m = 0; m < 10; m++) {
                for (n = 0; n < pocet_tipu[1][m]; n++) {
                        t = document.getElementById("tip1_" + (m*10 + 10) + "_" + n).firstChild;
                        if (t.nodeType == 3) // TEXT_NODE
                                t.nodeValue = t.nodeValue.replace (replaceWhat, replaceWith);
                }
        }
*/
}


