
var snows;
var nSnows;

var mark;
var notmark;

function fillSnow(i)
{
    snows[i][0]=Math.floor(Math.random()*(gridW-1));
    snows[i][1]=0;       
}

function drawMountain(x,y,size)
{
    for(var i=0;i<size;i++)
    {
        buffers[curBuffer][y+i][x+size-1]=mark;
        for(var j=1;j<=i;j++)
        {
            buffers[curBuffer][y+i][x+size-1-j]=mark;
            buffers[curBuffer][y+i][x+size-1+j]=mark;
        }
    }
}

function drawMountains(n)
{
    for(var i=0;i<n;i++)
    {
        msize=Math.floor(Math.random()*8);
        x=Math.floor(Math.random()*(gridW-msize-1));
        y=Math.floor(Math.random()*(gridH-msize-1));
        drawMountain(x,y,msize);
    }
}

function setMark(newvalue)
{
    mark=newvalue%2;
    notmark=(mark+1)%2;
}

function snowInit()
{
    setMark(1);
    drawMountains(20);
    
    nSnows=gridW/2;
    snows=new Array();
    for(var i=0;i<nSnows;i++)
    {
        snows[i]=new Array();
        fillSnow(i);
        snows[i][1]=Math.floor(Math.random()*(gridH-1)); 
    }       
}

function snowLoop()
{
    for(var i=0;i<nSnows;i++)
    {    
        buffers[curBuffer][snows[i][1]][snows[i][0]]=notmark;                
                
        var newBlock=false;
        
        if((snows[i][1]+1)>=gridH) newBlock=true;
        else if(buffers[curBuffer][snows[i][1]+1][snows[i][0]]==mark)
        {
           bools=[snows[i][0]>0,snows[i][0]<gridW-2];           
           sid=Math.floor(Math.random()*1000)%2;
           noid=(sid+1)%2;
           if(bools[sid] && buffers[curBuffer][snows[i][1]+1][snows[i][0]+(sid*2-1)]!=mark) snows[i][0]=snows[i][0]+(sid*2-1);
           else if(bools[noid] && buffers[curBuffer][snows[i][1]+1][snows[i][0]+(noid*2-1)]!=mark) snows[i][0]=snows[i][0]+(noid*2-1);
           else newBlock=true;
           
        }
                        
        if(newBlock)
        {
            buffers[curBuffer][snows[i][1]][snows[i][0]]=mark;  
            fillSnow(i);
        }
        else 
        {
            snows[i][1]++;        
           /* drift=Math.floor(Math.random()*1000)%20;
            if(drift==0 && snows[i][0]>0 && buffers[curBuffer][snows[i][1]][snows[i][0]-1]!=1) snows[i][0]--;    
            if(drift==19 && snows[i][0]<gridW-2 && buffers[curBuffer][snows[i][1]][snows[i][0]+1]!=1) snows[i][0]++;    */
        }
        
        buffers[curBuffer][snows[i][1]][snows[i][0]]=mark;                
    }
    
    letsSwitch=true;
    for(var i=0;i<gridW-1;i++)
        if(buffers[curBuffer][0][i]!=mark)
        {
            letsSwitch=false;
            break;
        }        
        
    if(letsSwitch) 
    {
        setMark(mark+1);
        drawMountains(10);
    }
    
    
}


