var SC_SAME_WIDTH	 	= 1;
var SC_SHIFTED_LEFT 	= 2;
var SC_SHIFTED_RIGHT	= 3;
var SC_SHIFTED_WIDTH	= 4;

function placeHolder( srcId )
{
	var o = findObject( srcId );
	if( !o )
		return null;

	this.id = srcId;
	this.obj = o;
	this.w = o.offsetWidth;
	this.h = o.offsetHeight;
	this.x = anchorPosX( o );
	this.y = anchorPosY( o );
}

function lookingObject( srcId, lookFor, lookingKind, extraData )
{
	var o = findObject( srcId );
	if( !o )
		return null;

	this.id = srcId;
	this.obj = o;
	this.target = lookFor;
	this.kind = lookingKind;
	this.extra = extraData;
}

function Scaler()
{
	var phs = new Array();
	var lfs = new Array();

	var src_onload = window.onload;
	var src_onresize = window.onresize;

    function applySizes()
    {
	for( i=0; i<lfs.length; i++ )
	    if( lfs[i] && (lfs[i].target != -1) && phs[lfs[i].target] )
		switch( lfs[i].kind )
		    {
		    case SC_SHIFTED_LEFT:
			lfs[i].obj.style.left = 
			    (phs[lfs[i].target].x + lfs[i].extra) + 'px';
			lfs[i].obj.style.top = 
			    phs[lfs[i].target].y + 'px';
			break;
		    case SC_SHIFTED_RIGHT:
			break;
		    case SC_SHIFTED_WIDTH:
			lfs[i].obj.style.width = 
			    (phs[lfs[i].target].w + lfs[i].extra) + 'px';
			break;
		    case SC_SAME_WIDTH:
		    default:
			lfs[i].obj.style.width = phs[lfs[i].target].w + 'px';
		    }
    }

	function updateSizes()
	{
		for( i=0; i<phs.length; i++ )
			if( phs[i] )
				{
				phs[i].w = phs[i].obj.offsetWidth;
				phs[i].h = phs[i].obj.offsetHeight;
				phs[i].x = anchorPosX( phs[i].obj );
				phs[i].y = anchorPosY( phs[i].obj );
				}
	}

	function addLookingObject( srcObject, targetObject, kind, extra )
	{
		found = false; lookingIdx = -1;
		for( i=0; i<phs.length && !found; i++ )
			if( phs[i].id == srcObject )
				{
				found = true;
				lookingIdx = i;
				}
		if( !found )
			{
			phs.push( new placeHolder( srcObject ) );
			lookingIdx = phs.length-1;
			}

		found = false;
		for( i=0; i<lfs.length && !found; i++ )
			if( lfs[i].id == targetObject )
				{
				lfs[i].target = lookingIdx;
				found = false;
				}
		if( !found )
			lfs.push( new lookingObject( targetObject, lookingIdx, kind, extra ) );
	}

	this.addSameWidth = function( srcObject, targetObject )
		{ addLookingObject( srcObject, targetObject, SC_SAME_WIDTH ); }
	
	this.addWidthAdd = function( srcObject, targetObject, add )
		{ addLookingObject( srcObject, targetObject, SC_SHIFTED_WIDTH, add ); }
		
	this.addLeftAdd = function( srcObject, targetObject, add )
	{ 
	    addLookingObject( srcObject, targetObject, SC_SHIFTED_LEFT, add ); 
	}

	this.initd = function()
	{
		if( src_onload )
			src_onload();
		updateSizes();
		applySizes();
	}

	this.resized = function()
	{
		if( src_onresize )
			src_onresize();

		updateSizes();
		applySizes();
	}
}

mSc = new Scaler();

window.onload = mSc.initd;
window.onresize = mSc.resized;
