function Metal_Main (obDiv)
{
	this.strategyCache = [];
	this.mainDiv = obDiv;
	this.generateTables(getMetalFamilies());
	this.generateDimensionsFields();
	$(this.mainDiv).append('<div id="mass_result" class="mass_result"></div>');
	this.generateTables(getMetalMaterials());
	
	var obMain = this;
	this.mainDiv.find('input[@type=text]').bind('change', function() { obMain.calculate()});
	this.mainDiv.find('input[@item_type=family]').bind('click', function() {obMain.setStrategy()});
	this.mainDiv.find('input[@type=radio]').bind('click', function() {obMain.calculate()});
	this.strategy = this.getStrategy('blank');
	this.calculate();
	
}

Metal_Main.prototype.generateTables = function (obCollection)
{
	$(this.mainDiv).append('<table class="mass_value" cellspacing="0" cellpadding="0"></table>');
	var obTable = $(this.mainDiv).children('table:last');
	obTable.append("<tr>"+obCollection.getCaption()+"</tr>");
	var text = "";
	for(var i=0;i<obCollection.getTotalColumns();i++)
		text+='<td class="mass_value">&nbsp;</td>';
	text = "<tr>"+text+"</tr>";
	for(var i=0;i<obCollection.getTotalRows();i++)
	{
		obTable.append(text);
	}
	var metalCollection;
	var obCell;
	for(i=0; i<obCollection.data.length; i++)
	{
		metalCollection=obCollection.data[i].items;
		for(var j=0;j<metalCollection.length;j++)
		{
			obCell=obTable.find('tr:eq('+(j+1)+')>td:eq('+i+')');
			obCell.html(metalCollection[j].getCellData());
			metalCollection[j].setAttributes(obCell.find('input[@type=radio]'));
		}
	}
}

Metal_Main.prototype.generateDimensionsFields = function()
{
	$(this.mainDiv).append('<table class="dimensions" cellspacing="0" cellpadding="0"><tr></tr></table>');
	var obTable = $(this.mainDiv).children('table:last')
	var obRow = obTable.find('tr');
	var dimensions = [
	                  {name:'width',	caption: 'Ширина, мм'},
	                  {name:'height',	caption: 'Толщина, мм'},
	                  {name:'diametr',	caption: 'Диаметр, мм'},
	                  {name:'length',	caption: 'Длина, мм'}
	                  ];
	for(var i=0; i<dimensions.length;i++)
	{
		obRow.append('<td id="mass_'+dimensions[i].name+'_td" class="dimensions">'+dimensions[i].caption
				+'<br/><input type="text" id="mass_'+dimensions[i].name+'" class="dimensions">'
				+'</td>');
	}
	obRow.append('<td class="dimensions"><br/><input type="button" value="Посчитать"></td>');
	var obMain = this;
	obRow.find('input[@type=button]').bind('click', function() {obMain.calculate();})

}
Metal_Main.prototype.calculate = function()
{
	$('#mass_result').html(this.strategy.getValue());
}

Metal_Main.prototype.setStrategy = function()
{
	this.strategy = this.getStrategy($('input[@type=radio][@name=rad_family][@checked=1]').attr('strategy'));
	this.strategy.changeVisisbility();
}

Metal_Main.prototype.getStrategy = function (name)
{
	var strategyList = [
	                    	{name: 'blank',				cls: new Metal_Strategy_Blank()},
	                    	{name: 'square',			cls: new Metal_Strategy_Square()},
	                    	{name: 'circle',			cls: new Metal_Strategy_Circle()},
	                    	{name: 'sixAnglesPoligon',	cls: new Metal_Strategy_Poligon()},
	                    	{name: 'sheet',				cls: new Metal_Strategy_Sheet()},
	                    	{name: 'angle',				cls: new Metal_Strategy_Angle()},
	                    	{name: 'tube',				cls: new Metal_Strategy_Tube()},
	                    	{name: 'rectangle',			cls: new Metal_Strategy_Rectangle()}
	                    ];
	if(!this.strategyCache[name])
	{
		for(var i=0;i<strategyList.length;i++)
			if(strategyList[i].name==name)
			{
				this.strategyCache[name] = strategyList[i].cls;
				break;
			}
	}
	return this.strategyCache[name];
}

jQuery.fn.createMassCalculatingTable = function() // DO NOT CHANGE THIS NAME!!!
{
	return new Metal_Main(this);
};

function extend(Child, Parent) {
    var F = function() { }
    F.prototype = Parent.prototype
    Child.prototype = new F()
    Child.prototype.constructor = Child
    Child.superclass = Parent.prototype    
}