function AJaXTable(newTable)
{
	this.table = newTable;
	this.table_http_request = null;
	
	this.skirtGroups = new Array();
	this.skirtGroups[0] = [2,0];
	this.skirtGroups[1] = [2,1];
	
	this.skirtDesc = ['No Skirt','1.5" Skirt', 'Full Skirt'];

	
// SETTERS
	this.setDesign = 
		function (selectVal)
		{
			this.table.style = getSelectValue(selectVal);
			this.updateValue('style',false);
		}
		
	this.setLength = 
		function (length) 
		{ 
			//this.checkLimits("length", length, this.minSide, this.table.maxLength);
			this.table.length = Number(length.value);
			this.updateValue('length',false);
		};
		
	this.setWidth = 
		function (width) 
		{ 
			//this.checkLimits("width", width, this.minSide, this.table.maxWidth);
			this.table.width = Number(width.value);
			this.updateValue('width',false);
		};
		
	this.setHeight = 
		function (height) 
		{ 
			//this.checkLimits("height", height, this.minHeight, this.table.maxHeight);
			this.table.height = Number(height.value);
			this.updateValue('height',false);
		};
	
	this.setWoodType = 
		function(wood)
		{
			this.table.woodType = getSelectValue(wood);		
			this.updateValue('woodType',false);
		};
	
	this.setFinish = 
		function(finish)
		{
			this.table.finish = getSelectValue(finish);		
			this.updateValue('finish',false);
		};
		
	this.setThickness = 
		function(thickSelect)
		{
			this.table.thickness = getSelectValue(thickSelect);		
			this.updateValue('thickness',false);
		};
		
	this.setLeaves = 
		function(leafCount,size)
		{
			var count = Number(leafCount.value);
			if (this.table.leaves == null || this.table.leaves == "null") 
				this.table.leaves = new Array();
			this.table.leaves[size] = Number(leafCount.value);	
			var json = JSON.stringify(this.table.leaves);
			this.updateValue('leaves',false, json);
		}

	this.setDropLegs = 
		function(value)
		{
			this.table.dropLegs = Number(value);
			this.updateValue('dropLegs',false);
		}

	this.setWireGuides = 
		function(value)
		{
			this.table.wireGuides = value;
			this.updateValue('wireGuides',false);
		}

	this.setFluting = 
		function(value)
		{
			this.table.fluting = Number(value);
			this.updateValue('fluting',false);
		}
		
	this.setSkirt = 
		function(value)
		{
			this.table.skirt = Number(getSelectValue(value));
			this.updateValue('skirt',false);
		}
		
	this.setEdge = 
		function(edgeSelect)
		{
			this.table.edge = getSelectValue(edgeSelect);
			this.updateValue('edge', false);
		}
		
	this.setTableTop = 
		function(tabletopSelect)
		{
			this.table.tableTop = getSelectValue(tabletopSelect);
			//alert(this.table.tableTop);
			this.updateValue('tableTop', false);
		}
		
	this.setZipCode = 
		function(zip)
		{
			this.table.zipCode = zip.value;
			this.updateValue('zipCode', false);
		}
		
	this.setDistance = 
		function(distance)
		{
			this.table.distance = Number(distance);
			this.updateValue('distance', false);
		}
		
	this.setShippingType =
		function(shippingSelect)
		{
			this.table.shippingType = getSelectValue(shippingSelect);
			this.updateValue('shippingType',false);
		}
		
// GETTERS		
	this.getDesigns = 
		function()
		{
			var designs = new Array();
			designs[0] = 'Please choose a style';
			var k = 1;
			for (var i=0; i < this.table.styleOptions.length; i++)
			{
				designs[k++] = this.table.styleOptions[i];
			}
			return designs;
		}
		
	this.getStyle = 
		function ()
		{
			return this.table.style;
		}
		
	this.getTableTop = 
		function()
		{
			return this.table.tableTop;
		}
	

	this.getTableTops = 
		function()
		{
			return this.table.tableTopOptions;
		}
	
	this.getThickness = 
		function()
		{
			return this.table.thickness;
		}
	
	this.getThicknesses = 
		function()
		{
			return this.table.thicknessOptions;
		}
		
	this.getSkirt = 
		function ()
		{
			return this.table.skirt;
		}
		
	this.getSkirts = 
		function ()
		{
			//farmhouse || shaker =1 else 0
			if (this.styleGroup == 'Farmhouse' || this.styleGroup == 'Shaker')
			{
				return this.skirtGroups[1];
			}
			return this.skirtGroups[0];
		}

	this.getSkirtDescriptions =
		function ()
		{
			var desc = new Array(2);
			var skirts = this.getSkirts();
			desc[0] = this.skirtDesc[skirts[0]];
			desc[1] = this.skirtDesc[skirts[1]];
			return desc;
		}

	this.getCost =
		function()
		{
			var c = new Number(this.table.cost);
			return c.toFixed(2);
		}
	
	this.getWoodTypeOptions = 
		function()
		{
			return this.table.woodTypeOptions;
		}
		
	this.getWoodType = 
		function()
		{
			return this.table.woodType;
		}
	
	this.getEdgeOptions = 
		function()
		{
			return this.table.edgeOptions;
		}
		
	this.getFinish = 
		function()
		{
			return this.table.finish;
		}
	
	this.getFinishOptions = 
		function()
		{
			return this.table.finishOptions;
		}
		
	this.getEdge = 
		function()
		{
			return this.table.edge;
		}
		
	this.getDescription = 
		function()
		{
			return this.table.description;
		}
		
	this.getShippingType =
		function()
		{
			return this.table.shippingType;
		}
		
	this.getShippingTypeOptions =
		function()
		{
			return this.table.shippingTypeOptions;
		}
		
	this.getShippingCost = 
		function()
		{
			var s = new Number( this.table.shippingCost);
			return s.toFixed(2);
		}
		
	this.getShippingDescription = 
		function()
		{
			return this.table.shippingDescription;
		}
		
	this.getCostDescription = 
		function()
		{
			return this.table.costDescription;
		}
		
	this.isComplete = 
		function()
		{
			return this.table.complete;
		}
//object functions other than setters


	this.checkLimits = 
		function (sideDesc, side, min, max)
		{
			if (side.value > max)
			{
				alert ('Maximum table ' + sideDesc + ' is ' + max + '".');	
				side.value = max;
			}
			else if (side.value < min)
			{
				alert ('Minimum table ' + sideDesc + ' is ' + min + '".');	
				side.value = min;
			}
			eval ('this.table.' + sideDesc + ' = side.value');
			this.updateValue(sideDesc, false);
			
			//return side.value;
		
		}
	
	this.getWeight = 
		function()
		{
			return this.table.weight;
		}
	
	function getSelectValue(select)
	{
		var ind = select.options.selectedIndex;
		var opt = select.options[ind];
		return opt.value;		
	}
	
	
	function calcArea()
	{
		return this.table.length * this.table.width;
	}
		
//	function getWeight() = function()
//	{
//		var a = calcArea();
//		var la = calcLeafArea();
//		var baseWeight = a * this.tableWeightPSQ;
//		var leafWeigth = la * this.leafWeightPSQ;
//		var thick_mult = (this.leafWeightPSQ * (a + la)) * (this.thickness - 1.5)/1.5;
		
//		return baseWeight + leafWeight + thick_mult;
//	}
	
	this.getArea = calcArea;
	this.getCode = getCode;
	this.calcLeafArea = calcLeafArea;
	this.updateValue = updateValue;
	
	function getCode()
	{
		return "Unsupported abstract method";
	}

	function calcLeafArea()
	{
		return 0;
	}
	
	function updateValue(prop, async, json)
	{
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			table_http_request = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			table_http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
	
		
		var propVal = encodeURIComponent(eval("this.table." + prop));
		if (json != null) propVal = json;
		var url = "http://www.erikorganic.com/eoservice/Tables.do?ACTION=set&BEAN_PROPERTY=" + prop + "&BEAN_VALUE=" + propVal;
		
		
		//Use SYNCHRONOUS Javascript for this!!
		table_http_request.open('POST', url, async);
		table_http_request.send(null);
		//alert( table_http_request.responseText );
		this.table = eval("(" + table_http_request.responseText + ")");
    }		
}
