jQuery(document).ready(function()
{
	//base dialog object
	var d = jQuery('#dialog').dialog({
		modal: true,
		bgiframe: true,
		autoOpen: false,
		height: 300,
		width: 400,
		resizable: false,
		closeOnEscape: false,
		overlay: {opacity: 0.5, background: "black"},
		close: function(event, ui){jQuery(this).text('').html('').dialog({buttons: {}})}
	});

	//general ajax settings
	jQuery.ajaxSetup(
	{
		type: 'POST',
		error: function(XMLHttpRequest, textStatus, errorThrown)
		{
			d.text('').html('<p>We are sorry there was an error processing your request. Please email <a href="mailto:support@rballiance.com">support@rballiance.com</a> or call 585-256-4605 and provide as much information as possible so we can try to prevent this error in the future.</p><p>Thank you-<br/>Rochester Business Alliance Web Support Team</p>');
			setOKButton();
			d.dialog('open');
		}
	});
	
	var pageMin, currentPage, totalPages, pageSize, rowMin, rowMax, numRecords, linkElement, numArray;
	
	jQuery('#btnSubmit').bind('click', function(){fetchResults()});
	jQuery('#keywordBox').bind('keypress', function(e)
	{
		if (e.which == 13)
		{
			fetchResults();
			return false; //fixes bug where page submits to itself
		}
	});
	
	function fetchResults()
	{
		var keywordVal = jQuery('#keywordBox').val();
		numArray = null;
		if (keywordVal == '')
		{
			d.text('Please enter keywords in the textbox').dialog('open');
			setOKButton();
		}
		else
		{
			var healthExp = /health/;
			var staffingExp = /staffing/;
			var insuranceExp = /insurance/;
			var featuredString = '';
			jQuery('#searchDesc, #searchResults, #navigation').empty();
			d.text('Fetching results...').dialog('open');
			jQuery.ajax(
			{
				url: 'getDirectoryResults.ashx',
				data: jQuery('#memberSearch').serialize(),
				dataType: 'json',
				success: function(data)
				{
					jQuery('#searchDesc, #searchResults, #navigation').empty();
					buildTable(data);
					setPagination();
					if (keywordVal.match(healthExp) || keywordVal.match(insuranceExp))
					{
						featuredString = featuredString + '<p>Did you know...<br/>The Rochester Business Alliance offers quality health insurance programs. <a href="/healthinsurance.aspx" title="Find out more about the Rochester Business Alliance&rsquo;s health insurance programs">Click here</a> to find out more</p>';
					}
					if (keywordVal.match(staffingExp))
					{
						featuredString = featuredString + '<p>Did you know...<br/>The Rochester Business Alliance Staffing Solutions can provide you with top-caliber employment candidates. <a href="/staffingsolutions.aspx" title="Find out more about Rochester Business Alliance Staffing Solutions">Click here</a> to find out more</div>';
					}
					jQuery('#featuredResult').html(featuredString);
					d.dialog('close');
				}
			});
		}
	}
	
	function buildTable(data)
	{
		var currentRow = 0;
		var ulElement, spanElement, itemElement, className, idValue, websiteValue;
		
		currentPage = data.searchInfo[0].currentPage;
		totalPages = data.searchInfo[0].totalPages;
		numRecords = data.searchInfo[0].totalRows;
		pageSize = data.searchInfo[0].pageSize;
		rowMin = data.searchInfo[0].minNumber;
		rowMax = data.searchInfo[0].maxNumber;
		jQuery('#searchDesc').append(rowMin + ' - ' + rowMax + ' of ' + numRecords + '<br/>Current search term: ' + jQuery('#keywordBox').val());
		jQuery.each(data.resultData, function()
		{
			idValue = this.id
			websiteValue = this.website;
			ulElement = document.createElement('ul');
			ulElement.className = currentRow % 2 == 0 ? 'blueRow' : 'greyRow';
			spanElement = document.createElement('span');
			spanElement.setAttribute('style', 'font-weight: bold; font-size: larger');
			spanElement.appendChild(document.createTextNode(this.company));
			ulElement.appendChild(spanElement);
			spanElement = null;
			ulElement.appendChild(document.createTextNode(' - '));
			linkElement = document.createElement('a');
			linkElement.setAttribute('id', 'rollout' + idValue);
			linkElement.setAttribute('href', '#');
			linkElement.appendChild(document.createTextNode('Click for more info'));
			ulElement.appendChild(linkElement);
			linkElement = null;
			if (this.onlineContact == '0')
			{
				itemElement = document.createElement('li');
				itemElement.appendChild(document.createTextNode('Contact: ' + this.firstName + ' ' + this.middleName + ' ' + this.lastName));
				if (this.email != '')
				{
					itemElement.appendChild(document.createTextNode(' - '));
					linkElement = document.createElement('a');
					linkElement.setAttribute('href', 'membersearch_contact.aspx?companyID=' + idValue);
					linkElement.appendChild(document.createTextNode('Email this company'));
					itemElement.appendChild(linkElement);
					linkElement = null
				}
				ulElement.appendChild(itemElement);
				itemElement = null;
			}
			if (websiteValue != '')
			{
				itemElement = document.createElement('li');
				itemElement.appendChild(document.createTextNode('Website: '));
				linkElement = document.createElement('a');
				linkElement.setAttribute('href', 'http://' + websiteValue);
				linkElement.setAttribute('target', '_blank');
				linkElement.appendChild(document.createTextNode(websiteValue));
				itemElement.appendChild(linkElement);
				linkElement = null;
				ulElement.appendChild(itemElement);
				itemElement = null;
			}
			document.getElementById('searchResults').appendChild(ulElement);
			ulElement = null;
			currentRow++;
		});
		
		//retrieve company information and display in dialog
		jQuery('a[id*=rollout]').bind('click', function()
		{
			d.parent().children().children('.ui-dialog-titlebar-close').hide();
			d.text('Please wait').dialog({closeOnEscape: 'false'}).dialog('open');
			var companyID = jQuery(this).attr('id');
			companyID = companyID.substring(7, companyID.length);
			jQuery.ajax(
			{
				url: 'getRolloutInfo.ashx',
				data: 'id=' + companyID,
				dataType: 'json',
				success: function(json)
				{
					var outputString;
					outputString = '<p><span style="font-weight: bold; font-size: larger">' + json.company + '</span><br/>';
					outputString = outputString + json.address1 + '<br/>';
					if (json.address2 != 'None')
					{
						outputString = outputString + json.address2 + '<br/>';
					}
					outputString = outputString + json.city + ', ' + json.state + '&nbsp;&nbsp;' + json.zip + '</p>';
					if (json.contactFlag == 'False')
					{
						outputString = outputString + '<p><span style="font-weight: bold">Contact: </span>' + json.firstName + ' ';
						if (json.middleName != 'None')
						{
							outputString = outputString + json.middleName + ' ';
						}
						outputString = outputString + json.lastName;
						if (json.email != 'None')
						{
							outputString = outputString + '<br/><span style="font-weight: bold">Email: </span><a href="/custom/membersearch/membersearch_contact.aspx?companyID=' + companyID + '" style="position: relative; z-index: 10000">Email This Company</a>';
						}
					}
					if (json.workPhone != 'None')
					{
						outputString = outputString + '<br/><span style="font-weight: bold">Phone: </span>' + json.workPhone + '';
					}
					if (json.fax != 'None')
					{
						outputString = outputString + '<br/><span style="font-weight: bold">Fax: </span>' + json.fax + '';
					}
					if (json.website != 'None')
					{
						outputString = outputString + '<br/><span style="font-weight: bold">Website: </span><a href="http://' + json.website + '" style="position: relative; z-index: 10000">' + json.website + '</a>';
					}
					outputString = outputString + "</p>";
					outputString = outputString + "<p>";
					if (json.naicsDesc != 'None')
					{
						outputString = outputString + '<span style="font-weight: bold">NAICS Description: </span><br/>' + json.naicsDesc + '<br/>';
					}
					if (json.busCat != '0')
					{
						outputString = outputString + '<span style="font-weight: bold">Business Category: </span>' + json.busCat; + '<br/>';
					}
					if (json.briefDesc != 'None')
					{
						outputString = outputString + '<span style="font-weight: bold">Company Description: </span>' + json.briefDesc;
					}
					outputString = outputString.replace(/<br\/>$/, '');
					outputString = outputString + "</p>";
					d.parent().children().children('.ui-dialog-titlebar-close').show();
					d.html(outputString).dialog({closeOnEscape: 'true', buttons: {'Back': function(){d.dialog('close')}}});
				}
			});
			return false;
		});
	}
	
	function setPagination()
	{
		var navElement = document.getElementById('navigation');
		var listElement = document.createElement('ul');
		var itemElement, rangeMin, rangeMax;
		
		if (Number(currentPage) > 1)
		{
			itemElement = document.createElement('li');
			linkElement = document.createElement('a');
			linkElement.setAttribute('href', '#');
			linkElement.appendChild(document.createTextNode('Previous'));
			itemElement.appendChild(linkElement);
			listElement.appendChild(itemElement);
			linkElement = null;
			itemElement = null;
		}
		if (totalPages > 9)
		{
			if (numArray == null)
			{
				numArray = new Array(1,2,3,4,5,6,7,8,9);	
			}
			//since the array will always have an odd number of indexes,
			//the median will always be the value of the middle index
			var pageMedian = numArray[((Number(numArray.length) + 1) / 2) - 1];
			var iterationNum = Math.abs(currentPage - pageMedian);
			if ((currentPage > 4 && Number(totalPages) - Number(currentPage) >= 4))
			{
				if (currentPage > pageMedian)
				{
					for (var n = 0; n < iterationNum; n++)
					{
						numArray.shift();
						numArray.push(Number(numArray[numArray.length - 1]) + 1);
					}
				}
				else if (currentPage < pageMedian)
				{
					for (var n = 0; n < iterationNum; n++)
					{
						numArray.pop();
						numArray.unshift(numArray[0] - 1);
					}
				}
			}
			else if (Number(iterationNum) - 1 < 4 || Number(totalPages) - Number(iterationNum) < 4)
			{
				if (currentPage > pageMedian)
				{
					iterationNum = Number(totalPages) - Number(numArray[numArray.length - 1]);
					for (var n = 0; n < iterationNum; n++)
					{
						numArray.shift();
						numArray.push(Number(numArray[numArray.length - 1]) + 1);
					}
				}
				else if (currentPage < pageMedian)
				{
					iterationNum = Number(numArray[0]) - 1;
					for (var n = 0; n < iterationNum; n++)
					{
						numArray.pop();
						numArray.unshift(numArray[0] - 1);
					}
				}
			}
			rangeMin = numArray[0];
			rangeMax = numArray[numArray.length - 1];
		}
		else
		{
			rangeMin = 1;
			rangeMax = totalPages;
		}
		for (var n = rangeMin; n <= rangeMax; n++)
		{
			itemElement = document.createElement('li');
			if (n == Number(currentPage))
			{
				itemElement.appendChild(document.createTextNode(n));
			}
			else
			{
				linkElement = document.createElement('a');
				linkElement.setAttribute('href', '#');
				linkElement.appendChild(document.createTextNode(n));
				itemElement.appendChild(linkElement);
				linkElement = null;
			}
			listElement.appendChild(itemElement);
			itemElement = null;
		}
		if (Number(currentPage) < Number(totalPages))
		{
			itemElement = document.createElement('li');
			linkElement = document.createElement('a');
			linkElement.setAttribute('href', '#');
			linkElement.appendChild(document.createTextNode('Next'));
			itemElement.appendChild(linkElement);
			listElement.appendChild(itemElement);
			linkElement = null;
			itemElement = null;
		}
		linkElement = null;
		navElement.appendChild(listElement);
		setNavigationLinks();
	}
	
	function setNavigationLinks()
	{
		jQuery('#navigation a').bind('click', function()
		{
			var pageSelect, dataString;
			jQuery('#searchDesc, #searchResults, #navigation').empty();
			d.text('Fetching results...').dialog('open');
			if (jQuery(this).text() == "Previous")
			{
				pageSelect = Number(currentPage) - 1;
			}
			else if (jQuery(this).text() == "Next")
			{
				pageSelect = Number(currentPage) + 1;
			}
			else
			{
				pageSelect = jQuery(this).text();	
			}
			dataString = jQuery('#memberSearch').serialize() + '&pageMin=' + pageSelect;
			jQuery.ajax(
			{
				url: 'getDirectoryResults.ashx',
				data: dataString,
				dataType: 'json',
				success: function(data)
				{
					jQuery('#featuredResult').empty();
					buildTable(data);
					setPagination();
				}
			});
			d.dialog('close');
			return false;
		});
	}

	function setOKButton()
	{
		d.dialog({buttons: {'OK': function(){d.dialog('close')}}});
	}
});
