var canvas;
var shotcount=0;
var skullx=0;
var skully=0;
var holequeue=[];
var sound;
var unmuteimg=new Image();
unmuteimg.src='/images/unmute.jpg';
var muteimg=new Image();
muteimg.src='/images/mute.jpg';
var soundtries=0;
var holediv=[];
var linkclick=false;
var shooting=false;
var soundOffset=500;

function shiftholes() {
    if(holequeue.length==0)
        return;
    var temp=holequeue.shift();
    var hcan=temp[0];
    var hdiv=temp[1];
    hcan.clear();
    document.body.removeChild(hdiv);
}

function clear() {
    if(canvas!=null)
        canvas.clear();
}
function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}
function shootpt(e) {
    if(!e)
        e=window.event;
    if(linkclick)
        return;
    var inputs = document.getElementsByTagName('INPUT');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        if(elem.isFocused)
            return;
    }
    inputs = document.getElementsByTagName('TEXTAREA');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        if(elem.isFocused)
            return;
    }
    inputs = document.getElementsByTagName('SELECT');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        if(elem.isFocused)
            return;
    }
    var x=e.pageX;
    var y=e.pageY;
    var scroll=getScrollXY();
    if(!x)
        x=e.clientX+scroll[0];
    if(!y)
        y=e.clientY+scroll[1];
    var mutebtn=document.getElementById('mutebtn');
    if(mutebtn!=null) {
        var mx=GetElX(mutebtn);
        var my=GetElY(mutebtn);
        var mw=mutebtn.width;
        var mh=mutebtn.height;
        if(x>mx && x<mx+mw && y>my && y<my+mh)
            return;
    }
    if(shooting) {
        return;
    }
    var newdiv = document.createElement('div');
    document.body.appendChild(newdiv);
    var newcan = new jsGraphics(newdiv);
    var size=20;
    var cx=x;
    var cy=y;
    x=cx-Math.floor(size/2);
    y=cy-Math.floor(size/2);
    newcan.setColor("#000000");
    var l=(size/2)+6;
    var a1=Math.floor(Math.random()*360);
    var a2=a1+72;
    var a3=a2+72;
    var a4=a3+72;
    var pt1=getcoords(cx,cy,a1,l);
    var pt2=getcoords(cx,cy,a2,l);
    var pt3=getcoords(cx,cy,a3,l);
    var pt4=getcoords(cx,cy,a4,l);
    var xpts=[pt1[0],pt2[0],pt3[0],pt4[0]];
    var ypts=[pt1[1],pt2[1],pt3[1],pt4[1]];
    newcan.fillPolygon(xpts,ypts);
    newcan.fillEllipse(x-2,y-2,size+4,size+4);
    newcan.setColor("#ffffff");
    newcan.fillEllipse(x,y,size,size);
    var index=holequeue.length;
    holequeue[index]=[newcan,newdiv];
    if(sound!=null && !mute)
        sound.play();
    shooting=true;
    setTimeout('if(holequeue.length>0) holequeue[holequeue.length-1][0].paint();shooting=false;',soundOffset);
    setTimeout('shiftholes();',2000);    
    var skullcell=document.getElementById('skullcell');
    if(skullcell!=null) {
        var cellx=GetElX(skullcell);
        var celly=GetElY(skullcell);
        var cellw=skullcell.offsetWidth;
        var cellh=skullcell.offsetHeight;
        if(cx>cellx && cx-cellx<cellw && cy>celly && cy-celly<cellh)
            setTimeout('shoot();',1000);
    }
}

function GetElX(el) {
    var ret = 0;
    while( el != null ) {
        ret += el.offsetLeft;
        el = el.offsetParent;
    }
    return ret;
}
function GetElY(el) {
    var ret = 0;
    while( el != null ) {
        ret += el.offsetTop;
        el = el.offsetParent;
    }
    return ret;
}
function getcoords(x1,y1,a,l) {
    var xmult=-1;
    var ymult=1;
    if(a<0)
        a+=360;
    a=a%360;
    var temp=a;
    if(a>90 && a<=180) {
        temp=180-a;
        xmult=1;
    }
    else if(a>180 && a<=270) {
        temp=a-180;
        ymult=-1;
        xmult=1;
    }
    else if(a>270) {
        temp=360-a;
        ymult=-1;
    }
    xlen=l*Math.sin(temp*(Math.PI/180));
    ylen=Math.sqrt(Math.pow(l,2)-Math.pow(xlen,2));
    var ret=[];
    ret[0]=Math.floor(x1+(xmult*xlen));
    ret[1]=Math.floor(y1+(ymult*ylen));
    return ret;
}
function togglemute() {
    var mutebtn=document.getElementById('mutebtn');
    mute=!mute;
    if(mute)
        mutebtn.src=unmuteimg.src;
    else
        mutebtn.src=muteimg.src;
    makePOSTRequest('/setmute.php','mute='+mute);
}
function makePOSTRequest(url, parameters) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType)
            http_request.overrideMimeType('text/html');
    }
    else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    http_request.open('POST', url, true);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(parameters);
}
function shoot() {
    if(shotcount>7) {
        setTimeout('clear();shootbutton(0);',2000);
        shotcount=0;
        return;
    }
    if(sound!=null && !mute)
    {
        if(sound.getState()=='loading' && soundtries<4) {
            soundtries++;
            setTimeout('shoot();',1000);
            return;
        }
    }
    soundtries=0;
    var x=Math.floor(Math.random()*120)+skullx+5;
    var y=Math.floor(Math.random()*120)+skully+5;
    var size=10;
    canvas.setColor("#ffffff");
    canvas.fillEllipse(x-2,y-2,size+4,size+4);
    canvas.setColor("#000000");
    canvas.fillEllipse(x,y,size,size);
    for(var a=0;a<3;a++) {
        var x1=x+size/2;
        var y1=y+size/2;
        var l=size/2+Math.floor(Math.random()*6);
        var angle=Math.floor(Math.random()*360);
        var c=getcoords(x1,y1,angle,l);
        canvas.drawLine(x1,y1,c[0],c[1]);
        for(var b=0;b<3;b++) {
            var inc=Math.random()*20+20;
            if(b%2)
                inc=inc*-1;
            var newangle=angle+inc;
            var newl=Math.floor(Math.random()*6);
            var newc=getcoords(c[0],c[1],newangle,newl);
            canvas.drawLine(newc[0],newc[1],newc[0],newc[1]);
        }
    }
    if(sound!=null && !mute)
        sound.play();
    setTimeout('canvas.paint();',soundOffset);
    shotcount++;
    setTimeout('shoot();',500);
}
function shootbutton(index) {
    var img=document.getElementById('roll'+index);
    if(img==null) {
        setTimeout('clear();',2000);
        return;
    }
    var xpos=GetElX(img);
    var ypos=GetElY(img);
    if(sound!=null && !mute)
    {
        if(sound.getState()=='loading' && soundtries<4) {
            soundtries++;
            setTimeout('shootbutton('+index+');',1000);
            return;
        }
    }
    soundtries=0;
    var x=Math.floor(Math.random()*90)+xpos+20;
    var y=Math.floor(Math.random()*20)+ypos+15;
    var size=10;
    var cx=x+size/2;
    var cy=y+size/2;
    canvas.setColor("#000000");
    for(var a=0;a<3;a++) {
        var x1=x+size/2;
        var y1=y+size/2;
        var l=size/2+Math.floor(Math.random()*6);
        var angle=Math.floor(Math.random()*360);
        var c=getcoords(x1,y1,angle,l);
        canvas.drawLine(x1,y1,c[0],c[1]);
        for(var b=0;b<3;b++) {
            var inc=Math.random()*20+20;
            if(b%2)
                inc=inc*-1;
            var newangle=angle+inc;
            var newl=Math.floor(Math.random()*6);
            var newc=getcoords(c[0],c[1],newangle,newl);
            canvas.drawLine(c[0],c[1],newc[0],newc[1]);
        }
    }
    var l=(size/2)+2;
    var a1=Math.floor(Math.random()*360);
    var a2=a1+72;
    var a3=a2+72;
    var a4=a3+72;
    var pt1=getcoords(cx,cy,a1,l);
    var pt2=getcoords(cx,cy,a2,l);
    var pt3=getcoords(cx,cy,a3,l);
    var pt4=getcoords(cx,cy,a4,l);
    var xpts=[pt1[0],pt2[0],pt3[0],pt4[0]];
    var ypts=[pt1[1],pt2[1],pt3[1],pt4[1]];
    canvas.setColor("#d7a700");
    canvas.fillPolygon(xpts,ypts);
    canvas.setColor("#ffffff");
    canvas.fillEllipse(x,y,size,size);
    if(sound!=null && !mute)
        sound.play();
    setTimeout('canvas.paint();',soundOffset);
    setTimeout('shootbutton('+(index+1)+');',800);
}
function shootinit(autostart,mp3file) {
    if(mp3file!=null && mp3file!='')
        sound=niftyplayer('soundfx');
    if(sound==null) {
        if(soundtries<2) {
            soundtries++;
            setTimeout('shootinit('+autostart+',\''+mp3file+'\');',1000);
            return;
        }
        //alert('failed to start sound player');
    }
    else
        sound.load(mp3file);
    soundtries=0;
    var inputs = document.getElementsByTagName('INPUT');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        elem.isFocused=false;
        elem.onfocus=function(){this.isFocused=true}
        elem.onblur=function(){this.isFocused=false}
    }
    inputs = document.getElementsByTagName('TEXTAREA');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        elem.isFocused=false;
        elem.onfocus=function(){this.isFocused=true}
        elem.onblur=function(){this.isFocused=false}
    }
    inputs = document.getElementsByTagName('SELECT');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        elem.isFocused=false;
        elem.onfocus=function(){this.isFocused=true}
        elem.onblur=function(){this.isFocused=false}
    }
    var currenturl=location.href;
    var index=currenturl.indexOf('#');
    if(index>-1)
        currenturl=currenturl.substring(0,index);
    inputs = document.getElementsByTagName('A');
    for(var i = 0; i < inputs.length; i++) {
        var elem = inputs[i];
        elem.onclick=function(){linkclick=true;setTimeout('linkclick=false;',1000);}
    }
    var el=document.getElementById('canvas');
    skullx=GetElX(el);
    skully=GetElY(el);
    canvas=new jsGraphics('canvas');
    document.body.onclick = shootpt;
    if(autostart)
        setTimeout('shoot();',1000);
}

