var Bugs = new Array;
var maxBug = 2;
var gLoop;
var timer1;
var max_loop = 300;

var my_pi = Math.PI / 180;
var x_center = 250;
var y_center = 230;
var g_min_fade = 20;
var g_max_fade = 70;
var g_fade_step = 1;

var bugsFile = new Array;
bugsFile[0] = 'bits/bug1.png';
bugsFile[1] = 'bits/bug2.png';
bugsFile[2] = 'bits/bug3.png';
bugsFile[3] = 'bits/bug4.png';
bugsFile[4] = 'bits/bug5.png';
bugsFile[5] = 'bits/bug6.png';
bugsFile[6] = 'bits/bug7.png';
bugsFile[7] = 'bits/bug8.png';
var bugsUsed;


 function mange() {
//    alert(">>> mange()");
    var nameEQ = 'bugs' + "=";
    var value = "";

    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0)
            value = c.substring(nameEQ.length,c.length);
    }

    if (value != '') {
        clearTimeout(timer1);
        ca = value.split('|');
        gLoop = ca[0];
        var a = 2;
        for (idx=0; idx<2;idx++) {
            delete Bugs[idx];
            Bugs[idx] = new Object;
            Bugs[idx].pos_x = eval(ca[a++]);
            Bugs[idx].pos_y = eval(ca[a++]);
            Bugs[idx].speed = eval(ca[a++]);
            Bugs[idx].clock = eval(ca[a++]);
            Bugs[idx].i = eval(ca[a++]);
            Bugs[idx].j = eval(ca[a++]);
            Bugs[idx].fact = eval(ca[a++]);
            Bugs[idx].fade = eval(ca[a++]);
            Bugs[idx].fade_step = eval(ca[a++]);
            Bugs[idx].fade_m = eval(ca[a++]);
//            if (isNaN(Bugs[idx].fade)) {
//                alert("mange() NaN for [" + Bugs[idx].fade + "] force to 100");
//                Bugs[idx].fade = 100;
//}
            Bugs[idx].fade_M = eval(ca[a++]);
            Bugs[idx].imgIdx = eval(ca[a++]);
//            dumpBugs(idx);
        }
        load_bugs_img();
        spiral(gLoop);
        return(1);
    }
    return(0);
}
function gateau() {
    var retStr, retStr2;

    if  (BrowserDetect.browser != 'Explorer') {
        retStr = gLoop + "|spiral|";  
        for (idx=0; idx<2;idx++) {
            retStr2  = Bugs[idx].pos_x + "|";
            retStr2 += Bugs[idx].pos_y + "|";
            retStr2 += Bugs[idx].speed + "|";
            retStr2 += Bugs[idx].clock + "|";
            retStr2 += Bugs[idx].i + "|";
            retStr2 += Bugs[idx].j + "|";
            retStr2 += Bugs[idx].fact + "|";
            retStr2 += Bugs[idx].fade + "|";
            retStr2 += Bugs[idx].fade_step + "|";
            retStr2 += Bugs[idx].fade_m + "|";
            retStr2 += Bugs[idx].fade_M + "|";
            retStr2 += Bugs[idx].imgIdx + "|";

            retStr += retStr2;
        }
        createCookie('bugs', retStr, 1);
}
}
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
    
function spiral(loop) {

    var b;
    clearTimeout(timer1);
    
    for (b=0; b < maxBug; b++) {
        i = Bugs[b].i;
        if ( Bugs[b].clock) {
            (i > 0) ? (i--) : (i=360);
        }
        else {
            (i < 360) ? (i++) : (i=0);
        }
        Bugs[b].i = i;;

        if (Bugs[b].j > 90 || Bugs[b].j < -90) {Bugs[b].fact= Bugs[b].fact * -1;}
        Bugs[b].j += Bugs[b].fact;
        x = Math.sin(i*Bugs[b].speed * my_pi) * Bugs[b].j + x_center;
        y = Math.cos(i*Bugs[b].speed * my_pi) * Bugs[b].j + y_center;

        x_pos = Math.floor(x) + Bugs[b].pos_x;
        y_pos = Math.floor(y) + Bugs[b].pos_y;
        oImg = document.getElementById('imgbugs'+b);
        oImg.style.left = x_pos + "px";
        oImg.style.top = y_pos + "px";

        Bugs[b].fade = Bugs[b].fade + Bugs[b].fade_step;
        if ( Bugs[b].fade < Bugs[b].fade_m || Bugs[b].fade > Bugs[b].fade_M) Bugs[b].fade_step = Bugs[b].fade_step * -1;
        setOpacity(oImg, Bugs[b].fade);

//        deb = document.getElementById('lol');
//        deb.innerHTML = x_pos + " ---> " + y_pos;
//            dumpBugs(b);

    }
    if ( loop++ <= max_loop) {
            gLoop = loop;
            timer1 = window.setTimeout("spiral("+loop+")", 100);
    }
    else {
        fadeOut();
    }
}

        
function dumpBugs(idx) {
    retStr = "pos_x=" + Bugs[idx].pos_x + "<br>";
    retStr += "pos_y=" + Bugs[idx].pos_y + "<br>";
    retStr += "speed=" + Bugs[idx].speed + "<br>";
    retStr += "clock=" + Bugs[idx].clock + "<br>";
    retStr += "i=" + Bugs[idx].i + "<br>";
    retStr += "j=" + Bugs[idx].j + "<br>";
    retStr += "fact=" + Bugs[idx].fact + "<br>";
    retStr += "fade=" + Bugs[idx].fade + "<br>";
    retStr += "fade step=" + Bugs[idx].fade_step + "<br>";
    retStr += "fade_m=" + Bugs[idx].fade_m + "<br>";
    retStr += "fade_M=" + Bugs[idx].fade_M + "<br>";
    retStr += "speed=" + Bugs[idx].speed + "<br>";
    retStr += "imgIdx=" + Bugs[idx].imgIdx + "<br>";
    var deb = "debug"+idx;
    oDivDeb = document.getElementById(deb);

    oDivDeb.innerHTML = retStr;
}
// ------------------------------------------------------------
// ------------------------------------------------------------
function makeBug(idx) {
    var retStr;
    var retStr2;
    Bugs[idx]= new Object;

    Bugs[idx].pos_x = get_random((x_center *2)) - x_center;
    Bugs[idx].pos_y = get_random((y_center *2)) - y_center;
    Bugs[idx].speed = get_random(10);
    Bugs[idx].clock = Math.floor(get_random(2)); // clock = 1, counterclock = 0;
    Bugs[idx].i = ((Bugs[idx].clock) ? 360 : 0); 
    Bugs[idx].j = 0;

    Bugs[idx].fact = -1;

    Bugs[idx].fade_m = get_random(g_min_fade);
    Bugs[idx].fade_M = get_random(g_max_fade);
    Bugs[idx].fade_step = ( (get_random(2) < 1) ? -1 : 1);
    if (Bugs[idx].fade_M < Bugs[idx].fade_m) {
        tmp =  Bugs[idx].fade_m;
        Bugs[idx].fade_m = Bugs[idx].fade_M;
        Bugs[idx].fade_M = tmp;
    }
    Bugs[idx].fade = Bugs[idx].fade_m;
    Bugs[idx].imgIdx = getBugImg();

//    dumpBugs(idx);

}

// ------------------------------------------------------------
// ------------------------------------------------------------
function load_bugs_img() {
//alert(">> load_bugs_img fade[0]=" + Bugs[0].fade+ "\n fade[1]="+ Bugs[1].fade);
    var oImg = document.getElementById('imgbugs0');
    oImg.src = bugsFile[Bugs[0].imgIdx];
    setOpacity(oImg, Bugs[0].fade);
//alert("Bugs0 ==> idx=" + Bugs[0].imgIdx + "   fade=[" + Bugs[0].fade);
//    setOpacity(oImg, 100);
    oImg.style.visibility = 'visible';

    var oImg = document.getElementById('imgbugs1');
    oImg.src = bugsFile[Bugs[1].imgIdx];
    setOpacity(oImg, Bugs[1].fade);
//    setOpacity(oImg, 100);
    oImg.style.visibility = 'visible';
}
function load_bugs() {
    resetBugsUsed();
    makeBug(0);
    makeBug(1);
    load_bugs_img();
    spiral(0);
}
// ------------------------------------------------------------
// ------------------------------------------------------------
function setOpacity(obj, opacity) {
// thanks http://clagnut.com/sandbox/imagefades/
  opacity = (opacity == 100)?99.999:opacity;
  // IE/Win
  obj.style.filter = "alpha(opacity:"+opacity+")";
  // Safari<1.2, Konqueror
  obj.style.KHTMLOpacity = opacity/100;
  // Older Mozilla and Firefox
  obj.style.MozOpacity = opacity/100;
  // Safari 1.2, newer Firefox and Mozilla, CSS3
  obj.style.opacity = opacity/100;
}
// ------------------------------------------------------------
// ------------------------------------------------------------
function fadeOut() {
    var b;
    var c=0;
    clearTimeout(timer1);
    for (b=0; b < maxBug; b++) {
        if (Bugs[b].fade > 0) {
            Bugs[b].fade = Bugs[b].fade - 1;
            oImg = document.getElementById('imgbugs'+b);
            setOpacity(oImg, Bugs[b].fade);
            c=1;
        }
    }
    if (c ==1) {
        timer1 = window.setTimeout("fadeOut()", 100);
    }
    else {
        reStartBugs();
    }
}

function resetBugsUsed() {
    bugsUsed = new Array;
}

function getBugImg() {
    var ok, cont;
    ok = false;
    while (!ok) {
        i = get_random(8);
        cont = false;
        for (j=0; j < bugsUsed.length; j++) {
            if (bugsUsed[j] == i)
                cont = true;
        }
        if ( cont == false) {
            bugsUsed[bugsUsed.length] = i;
            return i;
        }
    }
}
