/*
	Roku.DialogSavePreset
*/

if(typeof(Roku) == "undefined")
    Roku = { classes : [] };

Roku.DialogSavePreset =
{
	id						: "dlgSavePreset",
	
	devicesId				: "devices",
	tab_presets_id			: "presets",
	
	presetNameId			: "preset_name",
	presetEntryId			: "preset_",
	presetClassName			: "preset",
	presetTitleClassName	: "name",
	presetRadioClassName	: "radio",
	presetRadioName			: "preset_radio",
	fullEntryClassName		: "entry",
	
	okId					: "ok",
	cancelId				: "cancel",

	me						: null,
	dialog					: null,
	station					: null,
	combo_devices			: null,
	devices					: null,
	tab_presets				: null,
	sel_preset_data			: null
};

Roku.classes.push(Roku.DialogSavePreset);

Roku.DialogSavePreset.can_display = function()
{
	return (0 < this.devices.length);
}

Roku.DialogSavePreset.do_modal = function(station, ev)
{
	if(Roku.MySB)
		this.select_device(Roku.MySB.cur_sb_mac);
	var sel_device = this.selected_device();
	if(!sel_device)
		return;

	var name = Roku.Util.childIdElement(this.me, this.presetNameId);
	name.value = Roku.Station.getTitle(station);

	this.station = station;
	this.sel_preset_data = null;
	
	this.on_device_changed();
	
	Roku.Dialog.show(this.dialog, ev);
}

Roku.DialogSavePreset.select_device = function(mac)
{
	var option = Roku.Util.childIdElement(this.combo_devices, mac);
	if(option)
		option.selected = true;
}

Roku.DialogSavePreset.selected_device = function()
{
	var devices_count = this.devices.length;
	for(var index = 0; index < devices_count; index++)
	{
		var device = this.devices[index];
		if(device.selected)
			return device.id; 
	}
}

Roku.DialogSavePreset.on_device_changed = function()
{
	var cur_mac = this.selected_device();

	var queryParam = "gather_dlg_presets=" + cur_mac;
	Roku.Query.invoke(queryParam, function (content) { Roku.DialogSavePreset.fill_presets(content); } );
}

Roku.DialogSavePreset.fill_presets = function(content)
{
	this.sel_preset_data = null;

	var sel_page_id = Roku.Tab.selected(this.tab_presets);
	
	var tab_pages_list = Roku.Util.childClassElement(this.tab_presets, Roku.Tab.tabPagesListClassName);
	if(tab_pages_list)
	{
		tab_pages_list.innerHTML = content;
		this.handle_presets_change();
	}

	Roku.Tab.select(this.tab_presets, sel_page_id);

	
}

Roku.DialogSavePreset.on_ok = function()
{
	if(!this.sel_preset_data)
	{
		alert("Please select a preset.");
		return;
	}
	
	var sel_device = this.selected_device();
	var sel_preset_data = this.sel_preset_data;
	var station = this.station;
	Roku.Dialog.hide();
	
	var element = sel_preset_data.element;
	var element_id = element ? element.id : "";
	var pos = element_id.indexOf(this.presetEntryId);
	var preset_id = (0 <= pos) ? parseInt(element_id.substr(pos + this.presetEntryId.length, element_id.length - this.presetEntryId.length)) : 0;
	var station_id = Roku.Station.getId(station);

	var queryParam = "update_preset=" + sel_device + "&id=" + preset_id + "&station_id=" + station_id;
	Roku.Query.invoke(queryParam,
		function()
		{
			if(Roku.MySB)
			{
				Roku.MySB.update_presets();
				if(Roku.MySB.Radio)
					Roku.MySB.Radio.do_sb_command("UpdateFromRokuRadioServer");
			}
		}
	);
}

Roku.DialogSavePreset.on_cancel = function()
{
	Roku.Dialog.hide();
}

Roku.DialogSavePreset.on_dialog_closed = function()
{
	this.station = null;
	this.sel_preset_data = null;
}

Roku.DialogSavePreset.on_preset_radio_clicked = function(ev)
{
	var element = Roku.Util.srcEventElement(ev);
	var preset_element = Roku.Util.parentClassElement(element, this.presetClassName);
	
	if(this.sel_preset_data)
	{
		var preset_title_entry = Roku.Util.childClassElement(this.sel_preset_data.element, this.presetTitleClassName);
		preset_title_entry.innerHTML = this.sel_preset_data.innerHTML;    
		var preset_title_parent = Roku.Util.parentTagElement(preset_title_entry, "td");
		preset_title_parent.className = this.sel_preset_data.className;
	}
	
	var preset_title_entry = Roku.Util.childClassElement(preset_element, this.presetTitleClassName);
	var preset_title_parent = Roku.Util.parentTagElement(preset_title_entry, "td");
	
	if(this.station)
	{
		this.sel_preset_data =
		{
			element		: preset_element,
			innerHTML	: preset_title_entry.innerHTML,
			className	: preset_title_parent.className
		};    
		
		var preset_title = Roku.Station.getTitle(this.station); 
		preset_title_parent.className = preset_title ? this.fullEntryClassName : "";
		preset_title_entry.innerHTML = preset_title ? preset_title : "";    
	}
	
	this.me.focus(); 
}

Roku.DialogSavePreset.handle_presets_change = function()
{
	var presets = Roku.Util.childrenClassElements(this.tab_presets, this.presetClassName);
	var presets_count = presets.length;
	for(var iPreset = 0; iPreset < presets_count; iPreset++)
	{
		var preset = presets[iPreset];
		var preset_radio = Roku.Util.childClassElement(preset, this.presetRadioClassName);
		Roku.Util.eventHandler(preset_radio, "click", function(ev) { Roku.DialogSavePreset.on_preset_radio_clicked(ev); } );
	}
}

Roku.DialogSavePreset.initialize = function()
{
	this.me = document.getElementById(this.id);
	
	this.dialog = Roku.Util.parentClassElement(this.me, Roku.Dialog.className);
	if(this.dialog)
		this.dialog[Roku.Dialog.closeEventName] = function() { Roku.DialogSavePreset.on_dialog_closed(); };
		
	this.combo_devices = Roku.Util.childIdElement(this.me, this.devicesId);
	this.devices = Roku.Util.childrenTagElements(this.combo_devices, "option");
	if(1 < this.devices.length)
		Roku.Util.eventHandler(this.combo_devices, "change", function(ev) { Roku.DialogSavePreset.on_device_changed(ev);});
	else
		this.combo_devices.parentNode.parentNode.style.display = "none";
		
	this.tab_presets = Roku.Util.childIdElement(this.me, this.tab_presets_id);
	this.handle_presets_change();
	
	var cancel = Roku.Util.childIdElement(this.me, this.cancelId);
	if(cancel)
		cancel[Roku.Button.buttonClickPropName] = function() { Roku.DialogSavePreset.on_cancel(); };
	
	var ok = Roku.Util.childIdElement(this.me, this.okId);
	if(ok)
		ok[Roku.Button.buttonClickPropName] = function() { Roku.DialogSavePreset.on_ok(); };
}

Roku.DialogSavePreset.onBodyLoad = function()
{
	var tab = Roku.Util.childClassElement(this.me, Roku.Tab.tabClassName);
	Roku.Tab.select(tab, Roku.Tab.item(tab, 0));
}

