// sdc Feb 2007
var ie=document.all;
var nn6=document.getElementById&&!document.all;

var isdrag=false;
var x,y;
var dobj;
var lw = 0;
var rw = 0;

//var base = document.getElementById("00");
var fly;
var flying = 0;
var row_max=1; //number of rows - 1
var col_max=1; //number of columns - 1

var sum_x = new Array();
var sum_y = new Array();


// initialize hits array
// hits array element = 1 when puzzle element in place; otherwise 0
var hits = new Array(row_max);
	for (var i = 0;i<=row_max;i++){
		hits[i] = new Array(col_max);
		for (var j=0;j<=col_max;j++){
			hits[i][j]=0; // initialize array rows
//			alert(i.toString()+j.toString()+ " = "+hits[i][j]);
		}
	}
	hits[0][0]=1; // reference element is always in place so not processed
//	alert("initialized hits array");


function getx(o){
        var x =0;
	//o=dobj;
        while(o){
                x += o.offsetLeft;
                o = o.offsetParent;
        }
        return x;
}
function gety(o){
        var y =0;
//	o = dobj;
        while(o){
                y += o.offsetTop;
                o= o.offsetParent;
        }
        return y;
}

function fly(){
	var m,n;
	fly = 1;
	for (m=0;m<hits.length;m++){
		for (n=0;n<hits[m].length;n++){
			if (hits[n] == 0) return 0; 
		}
	}
}

function checkbase(){
        base = document.getElementById("00");
	DoSums();
//alert("base width="+base.width);
		
}

function getyy(element){
        var y =0;
        for (var e=element;e;e=e.offsetParent)
                y += element.offsetTop;

        for (e=element.parentNode;e && e!= document.body;e=e.parentNode)
                if (e.scrollTop) y -=e.scrollTop;

        return y;
}

//function snow(){
//      document.write('<scr' + 'ipt type="text/javascript" 
		//src="/holiday/christmas/images/snow.js">');
//}

function DoSums(){
	// sum_x array contains cumulative offset width for each element in a row
	// sum_y array contains cumulative offset height for each element in a column
//alert("DoSums");
	var i; // column counter
	var j; // row counter
	sum_x[0]=0;
	sum_y[0]=0;	
	
	// calculate column offsets for each element
	i=0;
	for(j=1;j<=row_max;j++){
		var ob = document.getElementById(i.toString()+(j-1).toString());
		sum_x[j]= sum_x[j-1]+ob.offsetWidth; 
//alert("sum_x["+j+"]="+sum_x[j]);
	}
	// calculate row offsets for each element
	j=0;
	for(i=1;i<=col_max;i++){
		var ob = document.getElementById((i-1).toString()+j.toString());
		sum_y[i]= sum_y[i-1]+ob.offsetHeight; 
//alert("sum_y["+i+"]="+sum_y[i]);
	}
}

function checkpos(){
	isdrag=false;
//checkbase();
	//var sobj = dobj.style;

	var x_base = getx(base);
	var y_base = gety(base);

	
	//var dx_dobj = parseInt(sobj.left)- x_base;
	//var dy_dobj = parseInt(sobj.top)- y_base;
	
	//var dx_dobj = getx(dobj) - x_base;
	//var dy_dobj = gety(dobj) - y_base;


	//var q = getx(dobj);
	//var v = gety(dobj);

//alert(x_base);
//alert(y_base);

//alert("wid="+wid);


//alert("dx_dobj="+dx_dobj);
//alert("dy_dobj="+dy_dobj);

//alert(base.offsetWidth);

//alert(q);
//alert(v);
 	
//alert(parseInt(dobj.left));
//alert(parseInt(dobj.top));
	
	var i; // column counter
	var j; // row counter
	var err_x = 10; // max x offset for snapping puzzle piece
	var err_y = 10; // max y offset for snapping puzzle piece

//alert("ViewportWidth="+ getViewportWidth);
//alert("ViewportHeight="+ getViewportHeight);

	for(i=0;i<=row_max;i++){
		for(j=0;j<=col_max;j++){
//alert("i="+i);
//alert("j="+j);
//alert("ij="+i.toString()+j.toString());

			var ob = document.getElementById(i.toString()+j.toString());
			if(i==0 && j==0) {
				//var x_ref = parseInt(ob.style.left);
				//var y_ref = parseInt(ob.style.top);

//alert(parseInt(ob.style.left));
//alert("x_ref="+x_ref);
//alert("y_ref="+y_ref);
				continue; // skip the base element [0,0]
			}


//alert("hello");
//alert(i.toString()+j.toString());

			var dx = getx(ob) - x_base - sum_x[j]; // x position error
			var dy = gety(ob) - y_base - sum_y[i]; // y position error
//alert(dx+"  "+ dy);
			if (dx == 0 && dy ==0){
				hits[i][j] = 1; // puzzle piece in place
			}else if(Math.abs(dx) <= err_x && Math.abs(dy) <= err_y){
				// snap puzzle element
//alert("snap "+i.toString()+j.toString());
//alert(parseInt(ob.style.left));
				ob.style.left = (parseInt(ob.style.left) - dx) + "px";
//alert(parseInt(ob.style.left));
				ob.style.top =  (parseInt(ob.style.top) - dy) + "px";
				hits[i][j] = 1; // puzzle piece in place
//alert("hits "+i.toString()+j.toString() + " = " +hits[i][j]);
			}else{
//alert("hits "+i.toString()+j.toString() + " = " + hits[i][j]);
				hits[i][j] = 0; // puzzle piece not in place
			}
			//if (dx == 0 && dy ==0){
			//	hits[i][j] = 1; // puzzle piece in place
			//}else{
//alert("hits "+i.toString()+j.toString() + " = " + hits[i][j]);
				//hits[i][j] = 0; // puzzle piece not in place
			//}
							
		}

	}

	
	// fly = 1 if all puzzle pieces in place
	var m,n;
	fly = 1;
	for (m=0;m<hits.length;m++){
		for (n=0;n<hits[m].length;n++){
			if (hits[m][n] == 0) {
				fly = 0;
				break; // quit if a piece is not in place 
			}
		}
	}
	//for (d=0;d<hits.length;d++){
//alert("rows="+hits.length);
//alert("cols="+hits[0].length);
		//for (g=0;g<hits[d].length;g++){
//alert("cols="+hits[0].length);
		//	alert(d.toString()+g.toString()+ " = " + hits[d][g]);
		//}
	//}

//alert("fly="+fly);
	if(fly){
		//alert("hits");
		if (flying) return;
//		SmokeRing();		
		if (document.all) SmokeRing();
		flycupid=setInterval('Animate()',30);
		//setTimeout("dismisscupid()",dismissafter*1000);
		flying = 1;
	}
//alert("end checkpos");	

}

function movemouse(e){
  if (isdrag){
    dobj.style.left = nn6 ? tx + e.clientX - x : tx + event.clientX - x;
    dobj.style.top  = nn6 ? ty + e.clientY - y : ty + event.clientY - y;
    return false;
  }
}

function selectmouse(e)
{
  var fobj       = nn6 ? e.target : event.srcElement;
  var topelement = nn6 ? "HTML" : "BODY";

  while (fobj.tagName != topelement && fobj.className != "dragme")
  {
    fobj = nn6 ? fobj.parentNode : fobj.parentElement;
  }

  if (fobj.className=="dragme")
  {
    isdrag = true;
    dobj = fobj;
    tx = parseInt(dobj.style.left+0);
    ty = parseInt(dobj.style.top+0);
    x = nn6 ? e.clientX : event.clientX;
    y = nn6 ? e.clientY : event.clientY;
    document.onmousemove=movemouse;
    return false;
  }
}
window.onload=checkbase;

document.onmousedown=selectmouse;
//document.onmouseup=new Function("isdrag=false");
document.onmouseup= checkpos;


