var DATA_FILTERING_FUNCTION = null;

var JID_FOR_SB_CONTENT = "#dfContent";
var JID_FOR_DFSC_BY_CLASS = JID_FOR_SB_CONTENT + " .dfsc";

var JID_FOR_DFSC_BY_ID = "#dfsc";
var JID_FOR_DF_BY_ID = "#df";
var JID_FOR_DFC_BY_CLASS = "#dfContent .dfc[id!='dfckw']";
var JID_FOR_DF_BY_CLASS = JID_FOR_SB_CONTENT + " table.df";
var JID_FOR_DFC_BY_ID = "#dfc";
var JID_FOR_DF_CONTAINER = JID_FOR_SB_CONTENT + " table.df[id!='dftkw']";

var JID_FOR_FOCUS_AREA_OPT = "#dfFocusArea input[name='focusArea']";

//var JID_FOR_FOCUS_AREA_CONTAINER = "#dfFocusArea";
//var JID_FOR_DFC_KW = "#dfkwtext";
//var JID_FOR_CLEAR_DF_CONTROL = "#outerLayout a.clearDF";

// jQuery Object Instances:
var JOI =
{
	CLEAR_DF:$("#outerLayout a.clearDF")
	,DFC_KW:$("#dfkwtext")	
	,DF_CONTROL_TABLE:$("#df table.df")
	,FOCUS_AREA_OPTS:$("#dfFocusArea input[name='focusArea']")
	,EVENT_TARGET:$("#eventTarget")
}

var DF_ATTRIBUTE_NAMES = ["","","",""];

var DF_VALUES_JIDS =
[
	"input[name='dfsc0']:checked",
	"input[name='dfsc1']:checked",
	"input[name='dfsc2']:checked",
	"input[name='dfsc3']:checked"		
]

var DF_UPDATED_EVENT = "DF_UPDATED";

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Purpose:  Creates the <dataFilter> XML elements for
// the currently selected data filters.
// Last Revision Date:  12/10/2008
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function GetDataFiltersDefinitions()
{
	try
	{
		var dfs = [];
		
		// Calculate the length of the current # of filter elements.
		var i = DF_VALUES_JIDS.length;
		
		// Numbers are considered false if and only if they are zero. 
		while (i--)
		{
			if (DF_ATTRIBUTE_NAMES[i].length > 0) 
			{
				dfs[i] = ('<dataFilter attributeName="' + DF_ATTRIBUTE_NAMES[i] + '" attributeValue="' + ($(DF_VALUES_JIDS[i]).val().replace("&", "~|~")) + '" />');
			}
		}
	
		// Add the keyword filter.
		if (JOI.DFC_KW.length === 1)
		{
			var kw = JOI.DFC_KW.val();
			
			if (kw.length > 0)
			{
				var suffix = kw.replace("&", "~|~") + '" />';
				
				dfs[dfs.length] = ('<dataFilter attributeName="mediaFileAbstract" attributeValue="' + suffix);		
				dfs[dfs.length] = ('<dataFilter attributeName="mediaFileTitle" attributeValue="' + suffix);
			}			
		}
		
		// The join method join two or more array objects element together with a specified separator.
		// The join method returns a String object that contains each element converted to a string and concatenated together.
		return dfs.join('');
	}
	catch (e)
	{
		alert("There was an exception during the GetDataFiltersDefinitions() function:\n\n" + e);
	}
}

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Purpose:  Retrieves the currently selected focus area.
// Last Revision Date:  12/10/2008
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function GetDataFilterFocusAreaValue()
{
	try
	{
		return ($(JID_FOR_FOCUS_AREA_OPT + ":checked").val());
	}
	catch (e)
	{
		alert("There was an exception during the GetDataFilterFocusAreaValue() function:\n\n" + e);
	}
}

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Purpose:  Performs the AJAX request to retrieve data filtering options.
// Last Revision Date:  12/10/2008
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function GetDataFilteringOptions()
{
	try
	{
		if (_DFServiceProxy != null) 
		{
			_DFServiceProxy.invoke("GetFilterOptionsForFilterFocusArea", 
			{
				"filterFocusArea":GetDataFilterFocusAreaValue()
			}, 
			function(dataFilter)
			{
				// Hide all of the dataFilter controls.
				JOI.DF_CONTROL_TABLE.hide();
				
				// Clear all captions.
				$(JID_FOR_DFC_BY_CLASS).html("");
								
				if (dataFilter != null) 
				{		
					// Clear the attribute names.
					DF_ATTRIBUTE_NAMES = ['','','',''];
						
					// Set the captions.
					var countCaptions = dataFilter.DataFilterCaptions.length;
					
					for (var i=0; i < countCaptions; i++)					
					{
						$(JID_FOR_DFC_BY_ID + i.toString()).html(dataFilter.DataFilterCaptions[i]);
					}
					
					// Set the attribute names.
					var countAttributes = dataFilter.DataFilterAttributeNames.length;
					
					for (var i=0; i < countAttributes; i++)					
					{
						DF_ATTRIBUTE_NAMES[i] = dataFilter.DataFilterAttributeNames[i];
					}
					
					// Set the options.
					var countOptions = dataFilter.DataFilterOptions.length;
										
					for (var i=0; i < countOptions; i++)					
					{
						var options = [];

						var values = dataFilter.DataFilterOptions[i];
						
						var countValues = values.length;
						
						// Build the option container rows.
						for (var j = 0; j < countValues; j++)						
						{
							options[options.length] = '<tr class="df"><td class="dfo"><input class="dfcb" type="radio" name="dfsc' + i + '" value="' + values[j] + '" checked="" /></td><td class="dft">' + values[j] + '</td></tr>';		
						}

						// Add the "Show All" option, and set this radio option as "checked".
						options[options.length] = '<tr class="df"><td class="dfo"><input class="dfcb" type="radio" name="dfsc' + i + '" value="" checked="checked" /></td><td class="dft">Show All</td></tr>';		
						
						$(JID_FOR_DF_BY_ID + i.toString()).html(options.join(''));	
						
						//$(JID_FOR_DF_BY_CLASS + ":eq(" + (i + 1) + ")").show();
					}					
					
					try
					{
						JOI.EVENT_TARGET.trigger(DF_UPDATED_EVENT);
					}
					catch (e)
					{
						$("#eventTarget").trigger(DF_UPDATED_EVENT);
					}			
				}
			}, 
			function(errorMessage)
			{
				alert(errorMessage);
			});
		}
	}
	catch (e)
	{
		alert("There was an exception during the GetDataFilteringOptions() function:\n\n" + e);
	}	
}

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
// Purpose:  Retrieves the current value for the keyword filter textbox control.
// Last Revision Date:  12/10/2008
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
function GetKeywordFilterText()
{
	try
	{
		return (jQuery.trim(JOI.DFC_KW.val()));
	}
	catch (e)
	{
		return ("");
	}
}

$(document).ready(function()
{	
	// Was a keyword text value specified in the querystring?
	JOI.DFC_KW.val($.queryStringParameter('kw'));

    GetDataFilteringOptions();
		
	JOI.DFC_KW.blur(function()
	{
		JOI.EVENT_TARGET.trigger(DF_UPDATED_EVENT);
	});
	
	JOI.DFC_KW.bind("keypress", function(e) 
	{
		  var code = (e.charCode || e.keyCode);
		  
		  // Enter key was pressed:
		  if (code == 13)
		  {
		  	 JOI.EVENT_TARGET.trigger(DF_UPDATED_EVENT);
		  }
	});
	
    JOI.FOCUS_AREA_OPTS.click(function() {GetDataFilteringOptions();});	

	// Clear all selections by forcing the selection of the "Show All" option.
    JOI.CLEAR_DF.click(function()
    {
		JOI.DFC_KW.val("");
        $(JID_FOR_SB_CONTENT + " input.dfcb[value='']").attr("checked", "checked");
		JOI.EVENT_TARGET.trigger(DF_UPDATED_EVENT);
    });    
});
