// ZSite widget library -- resizer widget routines
// (c) Zagorodnikov Anton 2007-2008

var zsite_canvas_scrollx = Array();
var zsite_canvas_scrolly = Array();

var zsite_canvas_objects = Array();

function zsite_control_canvas_init(id, width, height)
{
	zsite_canvas_objects[id] = Array();
	zsite_control_widths[id] = width;
	zsite_control_heights[id] = height;

	disableSelection(dojo.byId(id+'_container'));
	disableSelection(dojo.byId(id));
	disableSelection(dojo.byId('body'));

	zsite_canvas_scrollx[id] = 0;
	zsite_canvas_scrolly[id] = 0;
}

function zsite_control_canvas_goto(id, framesource)
{
	var cframe = dojo.byId(id+"_frame");
	if(cframe != null)
	{
		dojo.byId(id+"_frame").onload=function(){
		        var frame = dojo.byId(id+'_frame');
		        var frameDoc = (frame.contentDocument)?frame.contentDocument:document.frames[aID].document;

			zsite_control_scrollbar_setwidth(id, (frameDoc.width != null) ? frameDoc.width : frameDoc.body.scrollWidth);
			zsite_control_scrollbar_setheight(id, (frameDoc.height != null) ? frameDoc.height : frameDoc.body.scrollHeight);
			zsite_control_canvas_resize(id, 0, 0);
			};
		cframe.src = framesource;
	}
}

function zsite_control_canvas_getobjects(id)
{
	return zsite_canvas_objects[id];
}

function zsite_control_canvas_getoffsetleft(id)
{
	return zsite_canvas_scrollx[id];
}

function zsite_control_canvas_getoffsettop(id)
{
	return zsite_canvas_scrolly[id];
}


function zsite_control_canvas_getwidth()
{
	return 1024;
}

function zsite_control_canvas_getheight()
{
	return 768;
}

function zsite_control_canvas_add(id, object)
{
	var canvas_objects = zsite_canvas_objects[id];
	canvas_objects[canvas_objects.length] = object;
	zsite_canvas_objects[id] = canvas_objects;
	zsite_control_canvas_draw(id);
}

function zsite_control_canvas_delete(id, objectid)
{
	var canvas_objects = zsite_canvas_objects[id];
	for(var a = 0; a < canvas_objects.length; a++)
	{
		var cobject = canvas_objects[a];
		if(cobject['id'] == objectid)
		{
			var new_objects = Array();
			for(var b = 0; b < a; b++)
			{
				new_objects[b] = canvas_objects[b];
			}
			for(var b = a+1; b < canvas_objects.length; b++)
			{
				new_objects[b-1] = canvas_objects[b];
			}
			zsite_canvas_objects[id] = new_objects;	
			zsite_control_canvas_draw(id);
			return true;
		}
	}
	return false;
}

// canvas object format
// obj[id] -- object ID;
// obj[top] -- top offset;
// obj[left] -- left offset;
// obj[width] -- width; (if has one)
// obj[height] -- height (if has one)
// obj[content] -- content if to be drawn
// obj[handler] -- function that returns object drawing construct
// handler(width, height, offsetleft, offsettop);

function zsite_control_canvas_draw(id)
{
	var cframe = dojo.byId(id+"_frame");
	if(cframe == null)
	{
		var canvas_objects = zsite_canvas_objects[id];
		var objectshtml = "";
		for(var a = 0; a < canvas_objects.length; a++)
		{
			var cobject = canvas_objects[a];
			objectshtml += cobject["handler"](cobject, zsite_control_widths[id], zsite_control_heights[id], zsite_canvas_scrollx[id], zsite_canvas_scrolly[id]);
		}
		dojo.byId(id+"_objects").innerHTML = objectshtml;
	}
}

function zsite_control_canvas_scroll(id, valx, valy)
{
	var canvas_objects = zsite_canvas_objects[id];
//return;
//	var scr_width = canvas_control_width - parth;
	var canvas_height = zsite_control_heights[id];
	var canvas_width = zsite_control_widths[id];

//	var canvas_control_width = dojo.html.getContentWidth(id);
//	var canvas_control_height = dojo.html.getContentHeight(id);

//    alert(id);
//	alert(valy);

	zsite_canvas_scrollx[id] = valx;
	zsite_canvas_scrolly[id] = valy;

//	var scr_width = zsite_control_widths[id] - 32 -16 - ((zsite_control_widths[id]-32) * (zsite_control_widths[id]-32) / canvas_width);
//	var scr_height = zsite_control_heights[id] - 32 -16 - ((zsite_control_heights[id]-32) * (zsite_control_heights[id]-32) / canvas_height);

	//draw in status bar information
//	dojo.byId("debug").innerHTML = "Scroll to L:"+Math.ceil((0-((canvas_scroll_h_pos-15)*(canvas_width-canvas_control_width+18)/scr_width)))+"px H:"+Math.ceil(0-((canvas_scroll_v_pos-15)*(canvas_height-canvas_control_height+18)/scr_height))+"px";

//    alert(valy);
	var cframe = dojo.byId(id+"_frame");
	if(cframe != null)
	{
//	    alert(window.frames[id+"_frame"]);
		//zsite_lazyscroll("window.frames[\""+id+"_frame\"].scrollBy",-valx,-valy);
		eval("window.frames[\""+id+"_frame\"].scrollTo(valx,valy);");
	}
	zsite_lazyexec("zsite_control_canvas_draw('"+id+"');");

	//reposition objects
//	for(var a = 0; a < canvas_objects.length; a++)
//	{
//		var cobject = canvas_objects[a];
//		cobject['top'] += valy;
//		cobject['left'] += valx;
//	}


//	dojo.byId("object1").style.background="url(shot.png) "+Math.ceil(0-((canvas_scroll_h_pos-15)*(canvas_width-canvas_control_width+18)/scr_width))+"px "+Math.ceil(0-((canvas_scroll_v_pos-15)*(canvas_height-canvas_control_height+18)/scr_height))+"px no-repeat";

	return false;
}

function zsite_control_canvas_resize(id, valx, valy)
{
	zsite_control_widths[id] = zsite_control_widths[id] + valx;
	zsite_control_heights[id] = zsite_control_heights[id] + valy;

	if(zsite_control_widths[id] < 200) zsite_control_widths[id] = 200;
	if(zsite_control_heights[id] < 200) zsite_control_heights[id] = 200;

	//now resize all corresponding HTML constructions

	//statusbar

	//dojo.byId("debug").innerHTML = canvas_control_width;

	dojo.byId(id+"_container").style.width = (zsite_control_widths[id]+ 2) + "px";
	dojo.byId(id+"_container").style.height = (zsite_control_heights[id]+ 2) + "px";

	dojo.byId(id).style.width = zsite_control_widths[id] + "px";
	dojo.byId(id).style.height = zsite_control_heights[id] + "px";

	//scrollbars resize
	
	zsite_control_scrollbars_v_resize(id, valx, valy)
	zsite_control_scrollbars_h_resize(id, valx, valy)

	//resizer resize event

	//reposition objects
	var cframe = dojo.byId(id+"_frame");
	if(cframe != null)
	{
		cframe.style.width = (zsite_control_widths[id]-16) + "px";
		cframe.style.height = (zsite_control_heights[id]-16) + "px";
	}

	//dojo.byId("object1").style.width = (zsite_control_widths[id]-16) + "px";
	//dojo.byId("object1").style.height = (zsite_control_heights[id]-16) + "px";
}


