
var Sorts = Class.create({
		
	/**
	*	Retrieves and examines data from House Industries' layout files.
	*/
		
	initialize: function(layoutData) {
		this.layoutObj;
		this.ready = false;
		this._loadLayout(layoutData);
	},
	
// KIT
//	
	// Returns a list of kit names.
	getKitNames: function() {
		var layoutNames = [];
		this.layoutObj.layouts.each(function(kit){
			layoutNames.push(kit.kitname);
		});
		return layoutNames;
	},
	
	/**
	 * Returns a kit object based on a kit name.
	 *
	 * normalize  A boolean that will lowercase and remove spaces from kit.kitname before comparison.
	 */
	getKit: function(kitName, normalize) {
		for(var i=0; i<this.layoutObj.layouts.length; i++) {
			var kit = this.layoutObj.layouts[i];
			var kitname_to_compare = kit.kitname;
			if(normalize) kitname_to_compare = kitname_to_compare.toLowerCase().sub(" ", "");
			if(kitname_to_compare == kitName)
				return kit;
		}
		return false;
	},
	
	// Returns a kit object based on a sales id.
	getKitBySalesID: function(salesID) {
		for(var i=0; i<this.layoutObj.layouts.length; i++) {
			var kit = this.layoutObj.layouts[i];
			if(kit.salesid == salesID)
				return kit;
		}
		return false;
	},
	
	// Returns parent kit object based on a font name.
	// If 'useLayoutName' is true, fontName is looking for a font.layoutname instead of menuname
	getKitByFontName: function(fontName, useLayoutName) {
		for(var i=0; i<this.layoutObj.layouts.length; i++) {
			var kit = this.layoutObj.layouts[i];
			var hasFont = kit.fonts.find(function(f){
				var fn = (!useLayoutName)?f.menuname:f.layoutname;
				return fn == fontName;
			});
			if(hasFont != undefined)
				return kit;
		}
		return false;
	},
	
// FONT
//	
	// Returns an array of font objects for a kit.
	getFonts: function(kitName) {
		for(var i=0; i<this.layoutObj.layouts.length; i++) {
			var kit = this.layoutObj.layouts[i];
			if(kit.kitname == kitName)
				return kit.fonts;
		}
		return false;
	},
	
	// Gets a font object based on a font.menuname and kit name.
	// If 'useLayoutName' is true, fontName is looking for a font.layoutname instead of menuname
	getFont: function(fontName, kitName, useLayoutName) {
		var fonts = this.getFonts(kitName);
		for(var i=0; i<fonts.length; i++){
			var font = fonts[i];
			var fn = (!useLayoutName)?font.menuname:font.layoutname;
			if(fn == fontName)
				return font;
		}
		return false;
	},
		
	// Returns the features hash.
	getLayoutFeatures: function() {
		return this.layoutObj.features;
	},
	
	// Returns true if the layout file has been processed.
	isReady: function() {
		return this.ready;
	},
	
	// Requests a layout JSON file.
	_loadLayout: function(layoutData) {
		new Ajax.Request (layoutData, {
			method: "get",
			onSuccess: this._onLayoutLoadSuccess.bindAsEventListener(this)
		});
	},
	
	// Fires if the layout file was successfully loaded.
	_onLayoutLoadSuccess: function(ev) {
		// Creates a layout object from the layout data.
		this.layoutObj = ev.responseText.evalJSON(true);
		this.ready = true;
	}
	
});