var columnSizeIgnore 	= new Array();
var freeformSizeIgnore 	= new Array('100');

function LayoutResize(contentId)
{
	if(contentId == undefined)
	return false;

	var content = document.getElementById(contentId);
	if(content == undefined)
		return false;

	/***********************************************/
	/* Columns
	/***********************************************/
	var columns = new Array();
	columns = populate(content.childNodes, columnSizeIgnore);

	/***********************************************/
	/* Freeforms
	/***********************************************/
	var freeforms = new Array();
	
	for(var i = 0; i < columns.length; i++)
	{
		freeforms[i] = populate(columns[i]['element'].childNodes, freeformSizeIgnore);
	}
	
	/***********************************************/
	/* Pairs
	/***********************************************/
	var pairs = new Array();
	var height;
	var column;
	var freeform;

	for(var i = 0; i < freeforms.length; i++)
	{
		column = freeforms[i];

		for(var j = 0; j < column.length; j++)
		{
			freeform = column[j];

			if(freeform != undefined && freeform['element'] != undefined)
			{
				pair = getPairs(freeform, column);

				if(pair)
				{
					pairs[pairs.length] = pair;
					column = subtractArray([pair[0]['id'], pair[1]['id']], column);
				}
			}
		}
	}

	/***********************************************/
	/* Set equal height
	/***********************************************/
	var height;
	
	for(var i = 0; i < pairs.length; i++)
	{
		freeform1 = pairs[i][0];
		freeform2 = pairs[i][1];

		if(freeform1['element'].offsetHeight > freeform2['element'].offsetHeight)
		{
			height = getHeight(getInnerContentElement(freeform1['element']));
			getInnerContentElement(freeform2['element']).style.height = height;
		}
		else
		{
			height = getHeight(getInnerContentElement(freeform2['element']));
			getInnerContentElement(freeform1['element']).style.height = height;
		}
	}
}

function getHeight(element)
{
	var paddingTop 		= (document.deepCss(element, 'padding-top')).match(/\d+/);
	var paddingBottom 	= (document.deepCss(element, 'padding-bottom')).match(/\d+/);

	return (element.offsetHeight - paddingTop - paddingBottom) + "px";
}

document.deepCss = function(who, css)
{
    var val= '', str= '';
    
	if(!who || who.style== undefined) return '';
    
	if(/\-/.test(css))
	{
        str= css.replace(/\-[a-z]/g, function(w)
		{
            return w.charAt(1).toUpperCase() + w.substring(2);
        });
    }

    val= who.style[str];

	if(!val)
	{ 
        if(who.currentStyle) val= who.currentStyle[str];
        else
		{	
            var dv= document.defaultView || window;
            if(dv && dv.getComputedStyle)
			{
                val= dv.getComputedStyle(who,'').getPropertyValue(css);
            }
        }
    }
    
	return (val)? val: '';
}

function getInnerContentElement(e)
{
	var elements = e.getElementsByTagName('DIV');
	
	for(var i = 0; i < elements.length; i++)
	{
		if(elements[i].className == 'innerContent')
		{
			return elements[i];
		}
	}
}

function subtractArray(elements, array)
{
	for(var i = 0; i < array.length; i++)
	{
		if(in_array(array[i]['id'], elements))
		{
			array[i] = new Array();
		}
	}
	
	return array;
}

function getPairs(freeform, column)
{
	var tmpPairs = new Array();
	var y = getY(freeform['element']);

	for(var i = 0; i < column.length; i++)
	{
		otherform = column[i];

		if(freeform['id'] != otherform['id'])
		{
			if(y == getY(otherform['element']) && y != -1)
			{
				return [freeform, otherform];
			}
		}
	}

	return false;
}

function getY(element)
{
	if(element != undefined)
		return element.offsetTop;
}

function populate(tmp, ignoreList)
{
	var array = new Array();

	for(var i = 0; i < tmp.length; i++)
	{
		if(tmp[i].className != undefined)
		{
			if(tmp[i].className.search('layout') != -1)
			{
				var className = tmp[i].className;
				var size = className.match(/\d+/);

				if(!in_array(size, ignoreList))
				{
					var length = array.length;
					array[length] = new Array();
					array[length]['id'] = i;
					array[length]['element'] = tmp[i];
					array[length]['size'] = size;
				}
			}
		}
	}

	return array;
}

function in_array (needle, haystack, argStrict)
{
    var key = '', strict = !!argStrict;
 
    if (strict)
	{
        for (key in haystack)
		{
            if (haystack[key] === needle)
                return true;
        }
    }
	else
	{
        for (key in haystack)
		{
            if (haystack[key] == needle)
                return true;
        }
    }
    return false;
}