//========================================================================
// Description: MemberSearchHelper: Provides Client Side UI 
//				management for center search controls 
//							
//========================================================================

var MEMBERSEARCH_TYPE_BYNAME = "ByName";
var MEMBERSEARCH_TYPE_BYMEMBERID = "ByMemberID";
var ActiveMemberSearchHelper;

function MemberSearchHelper(searchButtonID,firstNameBoxID,lastNameBoxID,zipBoxID,prefixBoxID,suffixBoxID)
{	
	// Initialize supplied asp.net generated client ids
	this.mSearchButton_ClientID = searchButtonID;
	this.mFirstNameBox_ClientID = firstNameBoxID;
	this.mLastNameBox_ClientID = lastNameBoxID;
	this.mZipBox_ClientID = zipBoxID;
	this.mPrefixBox_ClientID = prefixBoxID;
	this.mSuffixBox_ClientID = suffixBoxID;

	// Initialize non asp.net generated client ids
	this.mSearchingMessage_ClientID = "SearchingMessage";
	this.mSearchFieldsTable_ClientID = "SearchFieldsTable";
	this.mByMemberIDTable_ClientID = "ByMemberIDTable";
	this.mByNameTable_ClientID = "ByNameTable";
	this.mSearchTypeSelector_ClientID = "SearchTypeSelector";
	this.mValidationLabel_ClientID = "ValidationLabel";
	
	// Intialize misc member vars
	this.mSearchInProgress = false;	
	this.mCurrentSearchType = "";
	
	// initialize table visibility (prevents issues with firefox back button)
	document.getElementById(this.mSearchingMessage_ClientID).style.display = "none";
	document.getElementById(this.mSearchFieldsTable_ClientID).style.visibility = "visible";
	
	// Subscribe to control events
	document.getElementById(this.mSearchButton_ClientID).onclick = function(){return ActiveMemberSearchHelper.StartSearching(this); };
	document.getElementById(this.mFirstNameBox_ClientID).onkeypress = function(event){return ActiveMemberSearchHelper.NameFieldKeyPress(this,event); }; 
	document.getElementById(this.mLastNameBox_ClientID).onkeypress = function(event){return ActiveMemberSearchHelper.NameFieldKeyPress(this,event); };



	document.getElementById(this.mZipBox_ClientID).onkeypress = function(event){return ActiveMemberSearchHelper.NameFieldKeyPress(this,event); };
	document.getElementById(this.mPrefixBox_ClientID).onkeypress = function(event){return ActiveMemberSearchHelper.MemberIDFieldKeyPress(this,event); };
	document.getElementById(this.mSuffixBox_ClientID).onkeypress = function(event){return ActiveMemberSearchHelper.MemberIDFieldKeyPress(this,event); };
    
}

//========================================================================
// VolunteerSearchHelper.ToggleSearchFields
// Description: Toggles controls based on users search type selection.
//				Also handles clearing of hidden control values
//
//========================================================================
MemberSearchHelper.prototype.ToggleSearchFields = function(searchType) 
{
	this.mCurrentSearchType = searchType;
	this.ResetValidation();
	
	if (searchType == MEMBERSEARCH_TYPE_BYNAME)
	{
		// Display and hide field tables
		document.getElementById(this.mByMemberIDTable_ClientID).style.display = "none";
		document.getElementById(this.mByNameTable_ClientID).style.display = "block";
	
		// Reset values in hidden fields
		document.getElementById(this.mPrefixBox_ClientID).value  = "";
		document.getElementById(this.mSuffixBox_ClientID).value = "";

        // Set focus to the first field
        document.getElementById(this.mFirstNameBox_ClientID).focus();
		
	}
	else if (searchType == MEMBERSEARCH_TYPE_BYMEMBERID)
	{        
		// Display and hide field tables
		document.getElementById(this.mByMemberIDTable_ClientID).style.display = "block";
		document.getElementById(this.mByNameTable_ClientID).style.display = "none";

        
		// Reset values in hidden fields
		document.getElementById(this.mFirstNameBox_ClientID).value  = "";
		document.getElementById(this.mLastNameBox_ClientID).value  = "";
		document.getElementById(this.mZipBox_ClientID).value  = "";

        document.getElementById(this.mPrefixBox_ClientID).focus();        
	}	
}

//========================================================================
// VolunteerSearchHelper.ToggleSearchTypeSelector
// Description: Toggles the search type selector based on the supplied value
//
//========================================================================
MemberSearchHelper.prototype.ToggleSearchTypeSelector = function(searchType) 
{
	Common_SetFormElementValue(this.mSearchTypeSelector_ClientID,searchType);
}


//========================================================================
// VolunteerSearchHelper.MemberIDFieldKeyPress
// Description: Filters characters for member id field.
//				Will also handle enter keypress.
//
//========================================================================
MemberSearchHelper.prototype.MemberIDFieldKeyPress = function(source,e) 
{
	//If enter key is pressed, initiate search request
	if (Common_IsEnterKey(e) )
	{
		return this.StartSearching(source);
	}
	
	// only allow AlphaNumeric chars
	return Common_IsNumeric(e,null);
}

//========================================================================
// VolunteerSearchHelper.NameFieldKeyPress
// Description: Filters characters for name field.
//				Will also handle enter keypress.
//
//========================================================================
MemberSearchHelper.prototype.NameFieldKeyPress = function(source,e) 
{
	//If enter key is pressed, initiate search request
	if (Common_IsEnterKey(e) )
	{
		return this.StartSearching(source);
	}
	
	// only allow AlphaNumeric chars
	return Common_IsAlphaNumeric(e,new Array(39,45,32,46));
}


//========================================================================
// VolunteerSearchHelper.StartSearching
// Description: Initiates the search post back (if fields are validated).
//				Will also click the SearchButton if the search was 
//				initiated by another control.
//
//========================================================================
MemberSearchHelper.prototype.StartSearching = function(source) 
{
	// If search is already in progress, ignore
	if(this.mSearchInProgress)
	{
		return false;
	}

	// Validate the fields before continuing
	if (this.ValidateFields() == false)
	{
		return false;
	}
	
	// If the source of the request is not the image button, click the image button
	// to initiate the postback
	if (source.id != this.mSearchButton_ClientID)
	{
		document.getElementById(this.mSearchButton_ClientID).click();
	}
	else
	{
		//The source calling is the submit button, so disable 
		this.mSearchInProgress = true;
	}
		
	//Hide search fields and show "Searching message"
	document.getElementById(this.mSearchingMessage_ClientID).style.display = "block";
	document.getElementById(this.mSearchFieldsTable_ClientID).style.visibility = "hidden"; //Use visibility to support FireFox postback bug
}

//========================================================================
// VolunteerSearchHelper.ValidateFields
// Description: Determines is the search postback can be initiated
//
//========================================================================
MemberSearchHelper.prototype.ValidateFields = function() 
{
this.ResetValidation();
	
	if (this.mCurrentSearchType == MEMBERSEARCH_TYPE_BYNAME)
	{
		if(document.getElementById(this.mFirstNameBox_ClientID).value.length < 1 )
		{
			this.SetValidationMessage("You must specify at least a letter of the first name. ");
			return false;
		}
		
		if(document.getElementById(this.mLastNameBox_ClientID).value.length < 2 )
		{
			this.SetValidationMessage("You must specify at least two letters of the last name. ");
			return false;
		}	
	}
	else
	{
		if(document.getElementById(this.mPrefixBox_ClientID).value == "") 
		{
			this.SetValidationMessage("You must specify a prefix");
			return false;
		}
		
		if(document.getElementById(this.mSuffixBox_ClientID).value == "")
		{
			this.SetValidationMessage("You must specify a suffix");
			return false;
		}
	}
	
	return true;
}

//========================================================================
// VolunteerSearchHelper.ResetValidation
// Description: Clears Validation Messages
//
//========================================================================
MemberSearchHelper.prototype.ResetValidation = function() 
{
	document.getElementById(this.mValidationLabel_ClientID).innerHTML  = "";
	document.getElementById(this.mValidationLabel_ClientID).style.display  = "none";
}

//========================================================================
// VolunteerSearchHelper.SetValidationMessage
// Description: Sets the validation message
//
//========================================================================
MemberSearchHelper.prototype.SetValidationMessage = function(value) 
{
	document.getElementById(this.mValidationLabel_ClientID).style.display  = "block";
	document.getElementById(this.mValidationLabel_ClientID).innerHTML = value ;
}


