
/*global All, Math, OptItem, OptionCombo, ParameterDef, Product, ProductConfiguration, ProductSystem, ProductType, _clone, _copyfields, _each, _extend, _isProperty, _keys, _merge, _revkeys, _select, _set, _unlink, _values, fieldname, flatten, getArray, getinputname, round2dp, Request*/

var serveurl="options/serveoptions.asp";

Debug.write=function(string) {
	alert(string);
}
Debug.toJSON=function(obj) {
	return JSON.encode(obj);
}

ProductSystem.clientside=true;
ProductSystem.loadData=function() {
	var dataToLoad=false;
	var list;
	for (list in ProductSystem.dataToLoad) {
		if (ProductSystem.dataToLoad[list].length>0) {dataToLoad=true;}
	}
	if (!dataToLoad) {return;}
	var rqdata={
			action:"loadData",
			data:JSON.encode(ProductSystem.dataToLoad)
		};
	var data=new Request.JSON({
							  	url: serveurl,
								async:false,
								data:rqdata
							  }).get().response.json;
	
	ProductSystem.mergeall(data);
	

};

ProductSystem.mergeall=function(data) {
	ProductSystem.mergedata(data,"parameters",ParameterDef);
	ProductSystem.mergedata(data,"producttypes",ProductType);
	ProductSystem.mergedata(data,"optionitems",OptItem);
	ProductSystem.mergedata(data,"products",Product);
	ProductSystem.mergedata(data,"productconfigs",ProductConfiguration);
	ProductSystem.mergecombos(data.productoptions);

};


ProductSystem.mergedata=function(obj,section,Constructor) {
	if (ProductSystem.dataToLoad[section]) {
		ProductSystem.dataToLoad[section]=[];
	}
	_each(obj[section],function(itemdata,key) {
		if (itemdata) {
			var itemobj=ProductSystem.data[section][key];
	
			if (itemobj) {
				itemobj.data=_merge(itemobj.data,itemdata);
			} else {
				itemobj=new Constructor(itemdata);
				ProductSystem.data[section][key]=itemobj;
			}
		}
	});
	_each(obj[section],function(itemdata,key) {
		itemobj=ProductSystem.data[section][key];
		if (itemobj.init) {
			itemobj.init();
		}
	});
};

ProductSystem.mergecombos=function(productoptions) {
	_each(productoptions,function(c,productid) {
		ProductSystem.getProduct(productid).addCombos(c.combodata);
	});
};


function count(obj) {
	var n=0;
	if (typeof(obj)=="array") {
		return obj.length;
	} else {
		for (var x in obj) {
			if (_isProperty(obj,x)) {
				n++;
			}
		}
		return n;
	}
}
function first(obj) {
	if (typeof(obj)=="array") {
		if (obj.length>0) {
			return obj[0];
		} else {
			return null;
		}
	} else {
		for (var x in obj) {
			if (_isProperty(obj,x)) {
				return obj[x];
			}
		}
	}
}
