MW.namespace("modules.guides");

(function(){
	
	var logging = true;
	var Event = YAHOO.util.Event;
	var Dom = YAHOO.util.Dom;
	var Con = YAHOO.util.Connect;
	var Json = YAHOO.lang.JSON; //
	
	MW.modules.guides.Select = {
		"getCategories": function(location,callback)
		{
			if (!location) {return;}
			if (!callback) {return;}
			var url = "/apps/gateway/location/get-categories?format=json&location_id="+parseInt(location,10);
			Con.asyncRequest("GET",url,callback,null);
		},
		"populateSelect": function(sel,objArray,value,label)
		{
			// first option may have a label with no value
			if (!sel.options[0].getAttribute("value") && sel.options[0].text != "")
			{
				sel.options.length = 1;
			}
			else
			{
				sel.options.length = 0;
			}
			for(var i = 0; i < objArray.length; i++)
			{
				obj = objArray[i];
				if (typeof(obj.group) != "undefined")
				{
					var g = document.createElement("OPTGROUP");
					g.label = obj.group;
					for(var j =0; j < obj.results.length; j++)
					{
						var item = obj.results[j];
						var o = document.createElement("OPTION");
						o.label = item[label];
						o.value = item[value];
						o.text = item[label];
						g.appendChild(o);
					}
					sel.appendChild(g);
				}
				else
				{
					var o = document.createElement("OPTION");
					o.label = obj[label];
					o.value = obj[value];
					o.text = obj[label];
					sel.appendChild(o)
				}
			}
		},
		"callback" : function(objectArgument)
		{
			this.success = function(o)
			{
				var trigger = o.argument.trigger;
				var target = o.argument.target;
				var response = Json.parse(o.responseText);
				if (response.valid && response.results.length > 0)
				{
					MW.modules.guides.Select.populateSelect(target,response.results,"id","name");
				}
				target.disabled = false;
			};
			this.failure = function(o)
			{
				var trigger = o.argument.trigger;
				var target = o.argument.target;
				target.disabled = false;
			};
			this.cache = false;
			this.argument = (objectArgument !== undefined) ? objectArgument : {target: null, trigger: null};
		},
		"initGetCategoriesOnChange": function(trigger,target)
		{
			var trigger = Dom.get(trigger);
			var target = Dom.get(target);
			
			var callback = new MW.modules.guides.Select.callback({"target": target, "trigger": trigger});
			
			Event.addListener(
					trigger,
					"change",
					function(e)
					{
						if (this.value)
						{
							target.disabled = true;
							MW.modules.guides.Select.getCategories(this.value, callback);
						}
					},
					trigger,
					true
			);
		}
	};
	
}());
