/* #########################################################################################################

Project		: NRT.WebSite.PropertySearch
Summary		: This file contains objects/functions used by property results page
Copyright	: (c) 2010 NRT Inc. All rights reserved.

RevisionHistory: 
-----------------------------------------------------------------------------------------------------------------------------
Date				Name		Description
-----------------------------------------------------------------------------------------------------------------------------
08/09/2006			kbeyer		Reborn
###########################################################################################################*/
/***************************************************************************
* Public constants
***************************************************************************/
//	Global live results object holder. This will hold an instantiated results object.
//	The object instantiation javascript code will be spit/rendered from code behind.

var SearchID;
/*
*		Results Object
*/
NRT.Property.Result.Utility = function(searchID)
{
	try
	{
		SearchID = searchID;

	}
	catch (err)
	{
		_oErrorHandler.Error('NRT.Property.Result.Utility', _oErrorHandler.ERRORTYPE_AJAX, err);
		return;
	}
};

/*==================================================================================
Method		: performSaveSearch
Summary		: Saves the search and then loads the Save Search page in a layered
window to allow user to name the search and select their email
preferences.
Author		: Dale Lawless
Create Date	: 01/30/2007
====================================================================================*/
NRT.Property.Result.Utility.prototype.performSaveSearch = function(bEnableJustListed)
{
	var enableJustListed = null;

	try
	{
		// Set the save search link selected flag to indicate the user is trying to do a save search
		NRT.MySite.SavedSearch.setLinkSelected(true);
		// Set hidden tag to determine if the user want the 'Just Listed' alert to be enabled
		enableJustListed = _oUtility.getElementByTagNameAndID('hdnEnableJustListed', 'INPUT');
		if (enableJustListed !== null && typeof enableJustListed !== 'undefined')
		{
			enableJustListed.value = bEnableJustListed;
		}
		if (NRT.MySite.Authentication.validateUser())
		{
			NRT.Property.Result.Utility.prototype.saveSearch();
		}
	}
	catch (err)
	{
		_oErrorHandler.Error('NRT.Property.Result.Utility.performSaveSearch', _oErrorHandler.ERRORTYPE_JS, err);
	}
};

/*==================================================================================
Method            : saveSearch
Summary           : Saves the search and then loads the Save Search page in a layered
window to allow user to name the search and select their email
preferences.
Author            : Dale Lawless
Create Date : 01/30/2007
====================================================================================*/
NRT.Property.Result.Utility.prototype.saveSearch = function(overWriteFlag)
{
	var consumerID = null;
	var searchID = 0;
	var consumerSearchID = 0;
	var bIsEnable = false;
	var enableJustListed = null;
	var bResult = false;
	var sQueryString = '';

	try
	{
		// Fetch Consumer ID from authentication cookie
		consumerID = NRT.MySite.Authentication.getConsumerID();

		if (NRT.Utility.getQueryStringParam('SearchID') !== null)
		{
			searchID = NRT.Utility.getQueryStringParam('SearchID');
		}

		if (NRT.Utility.getQueryStringParam('ConsumerSearchID') !== null)
		{
			consumerSearchID = NRT.Utility.getQueryStringParam('ConsumerSearchID');
		}

		if (consumerSearchID > 0)
		{
			if (NRT.Utility.getQueryStringParam('SearchID') == null)
			{
				var content = '<p>There are no changes to save to this existing Saved Search.</p>' +
				'<div style="width:300px;"><div style="float:right;"><a href="javascript:NRT.Utility.closeLayeredPage();" class="button-med-gray"><span>OK</span></a>' +
				'</div></div><div style="clear:both;"></div>';

				NRT.Utility.showAlert(content, 340, 'Question');
				return;
			}

			if (overWriteFlag == null || overWriteFlag == undefined)
			{

				//Code to find the consumer search name from the existing consumer search dropdown
				var savedSearches = NRT.MySite.Authentication.getSavedSearchDropDown();
				var consumerSearchName = "";
				var i;
				if (savedSearches != null && savedSearches != "undefined")
				{
					for (i = 0; i < savedSearches.options.length; i++)
					{
						if (savedSearches.options[i].value == consumerSearchID)
						{
							consumerSearchName = savedSearches.options[i].text;
							break;
						}
					}
				}

				//if a consumerSearchID already exists, this search is based off a previously saved search.
				//ask the user if they wish to update the original search.
				var content = '<p>Overwrite your existing Saved Search (' + consumerSearchName + ') or create a new one?</p>' +
				'<div style="width:310px;"><div style="float:right;"><a href="javascript:NRT.Property.Result.Utility.prototype.saveSearch(1);NRT.Utility.closeLayeredPage();" class="button-med"><span>Overwrite</span></a>' +
				'<div style="margin-left:20px;float:left;width:120px;"><a href="javascript:NRT.Property.Result.Utility.prototype.saveSearch(0);" class="button-med"><span>New Search</span></a></div></div></div><div style="clear:both;"></div>';

				NRT.Utility.showAlert(content, 360, 'Save Search');
				return;
			}

			if (overWriteFlag == 1)
			{
				SearchController.UpdateConsumerSearch(_WebsiteID, consumerID, searchID, consumerSearchID, NRT.Property.Result.Utility.prototype.showOverwriteConfirmed);
				return;
			}
			else
			{
				consumerSearchID = SearchController.PersistConsumerSearchBySearchID(_WebsiteID, consumerID, searchID).value;
			}
		}
		else
		{
			consumerSearchID = SearchController.PersistConsumerSearchBySearchID(_WebsiteID, consumerID, searchID).value;
		}
		// Save the search for the consumer and return the Consumer Search ID
		// Retrieve the hidden tag to determine if the user want the 'Just Listed' alert to be enabled
		enableJustListed = _oUtility.getElementByTagNameAndID('hdnEnableJustListed', 'INPUT');
		if (enableJustListed !== null && typeof enableJustListed !== 'undefined')
		{
			bIsEnable = enableJustListed.value;
		}
		// Verify # of Saved Searches
		bResult = SearchController.HasMaxSavedSearches(_MaxSavedSearches, consumerID).value;
		if (bResult)
		{
			// Show the Saved Searches (Limit Reached) layered page
			sQueryString = 'controlType=SaveSearchLimitReached&ConsumerSearchID=' + consumerSearchID + '&ConsumerID=' + consumerID + '&EnableJustListed=' + bIsEnable;
			_oUtility.showLayeredPage(sQueryString, _WinW_SaveSearch_LimitReached, _WinTitle_SaveSearch_LimitReached, _DefFocusItemID_SaveSearch_LimitReached, _DefFocusItemType_SaveSearch_LimitReached);
		} else
		{
			// Show the Save Search layered page
			sQueryString = 'controlType=SaveSearch&ConsumerSearchID=' + consumerSearchID + '&ConsumerID=' + consumerID + '&EnableJustListed=' + bIsEnable;
			_oUtility.showLayeredPage(sQueryString, _WinW_SaveSearch, _WinTitle_SaveSearch, _DefFocusItemID_SaveSearch, _DefFocusItemType_SaveSearch);
		}
	}
	catch (err)
	{
		_oErrorHandler.Error('saveSearch', _oErrorHandler.ERRORTYPE_JS, err);
	}
};

NRT.Property.Result.Utility.prototype.showOverwriteConfirmed = function(result)
{
	if (result.value == 1)
	{
		var content = '<div style="margin:10px 0"><p>Your existing Saved Search has been updated.</p>' +
				'<div style="width:335px;"><div style="float:left;margin:0 8px 0 40px"><a id="spnSavedSearches" runat="server" class="button-med" href="javascript:NRT.MySite.UI.redirectToMySavedSearches();" \
					onclick="this.blur();" onkeypress="javascript:if(NRT.Utility.getKeyCode(event)===13){javascript:NRT.MySite.UI.redirectToMySavedSearches();}" tabindex="2"><span>Go To My Saved Searches</span> </a> </div> \
					<div style="float:left;"><a href="javascript:NRT.Utility.closeLayeredPage();" class="button-med"><span>Close</span></a></div></div><div style="clear:both;"></div><div>';

		NRT.Utility.showAlert(content, 340, 'Save Search');
	}

};


NRT.Property.Result.Utility.prototype.CollapseEllipsis = function(obj)
{
	var objOvr = obj;
	var sBaseName;
	var objIfr;
	var objShd;

	try
	{
		sBaseName = objOvr.id.replace('Tooltip', '');
		objIfr = _oUtility.getElementByTagNameAndID(sBaseName + 'Iframe', 'IFRAME');
		objShd = _oUtility.getElementByTagNameAndID(sBaseName + 'Shadow', 'DIV');
		objOvr.innerHTML = '';
		objOvr.className = 'ellipsis_off hideDiv';
		objShd.className = 'ellipsis_offShadow hideDiv';
		objIfr.className = 'ellipsis_offIframe hideDiv';
		return;
	}
	catch (err)
	{
		_oErrorHandler.Error('NRT.Property.Result.Utility.CollapseEllipsis', _oErrorHandler.ERRORTYPE_JS, err);
		return;
	}
};

NRT.Property.Result.Utility.prototype.ExpandEllipsis = function(obj)
{
	var sBaseName = obj.id.replace('Main', '');
	var objOvr = null;
	var objIfr = null;
	var objShd = null;

	try
	{
		objOvr = _oUtility.getElementByTagNameAndID(sBaseName + 'OverTooltip', 'DIV');
		objIfr = _oUtility.getElementByTagNameAndID(sBaseName + 'OverIframe', 'IFRAME');
		objShd = _oUtility.getElementByTagNameAndID(sBaseName + 'OverShadow', 'DIV');

		objOvr.style.pixeltop = obj.offsetTop;
		objOvr.style.pixelLeft = obj.offsetLeft;
		objOvr.innerHTML = obj.innerHTML;
		objOvr.className = 'ellipsis_off showDiv';

		objShd.style.pixelTop = objOvr.offsetTop + 2;
		objShd.style.pixelLeft = objOvr.offsetLeft + 2;
		objShd.style.pixelWidth = objOvr.offsetWidth;
		objShd.style.pixelHeight = objOvr.offsetHeight;

		objIfr.style.pixelTop = objOvr.offsetTop;
		objIfr.style.pixelLeft = objOvr.offsetLeft;
		objIfr.style.pixelWidth = objOvr.offsetWidth + 2;
		objIfr.style.pixelHeight = objOvr.offsetHeight + 2;

		objIfr.className = 'ellipsis_offIframe showDiv';
		objShd.className = 'ellipsis_offShadow showDiv';

		return;
	}
	catch (err)
	{
		_oErrorHandler.Error('NRT.Property.Result.Utility.ExpandEllipsis', _oErrorHandler.ERRORTYPE_JS, err);
		return;
	}
};

function setupThumbnails(p1)
{
	resultPhotoElements.push(p1);
	$('#featured').attr('id', 'featured_' + p1.propertyID);
	$('#featured-prev').attr('id', 'featured-prev_' + p1.propertyID);
	$('#featured-next').attr('id', 'featured-next_' + p1.propertyID);

	if (p1.photoElements.length < 2)
	{
		$('#featured-next_' + p1.propertyID).hide();
		$('#featured-prev_' + p1.propertyID).hide();
		$('div[id$="divPhotosPager_' + p1.propertyID + '"]').hide();
	}
	$('#imgThumbnail').attr('id', 'imgThumbnail_' + p1.propertyID);
	$('#currentPhoto').attr('id', 'currentPhoto_' + p1.propertyID);
	$('#totalPhotos').attr('id', 'totalPhotos_' + p1.propertyID);

	$('#imgThumbnail_' + p1.propertyID).show();
	$('#imgThumbnail_' + p1.propertyID).attr('src', p1.photoElements[0]);

	//now, inspect the length of the array, insert a slide if necessary
	if (p1.photoElements.length > 1)
	{

		if (p1.photoElements.length == 2)
		{

			var newSlide = $('#imgThumbnail_' + p1.propertyID).parent().parent().clone();
			newSlide.find('a').attr('id', 'hlPropertyImage1_' + p1.propertyID);
			var image = newSlide.find('img');

			image.attr('id', 'imgThumbnail1_' + p1.propertyID);
			image.attr('src', p1.photoElements[1]);

			$('#imgThumbnail_' + p1.propertyID).parent().parent().parent()[0].appendChild(newSlide[0]);
		} else
		{
			//need 3 slides
			$('#imgThumbnail_' + p1.propertyID).attr('src', p1.photoElements[1]);

			var newSlide = $('#imgThumbnail_' + p1.propertyID).parent().parent().clone();
			newSlide.find('a').attr('id', 'hlPropertyImage1_' + p1.propertyID);
			var image = newSlide.find('img');

			image.attr('id', 'imgThumbnail1_' + p1.propertyID);
			image.attr('src', p1.photoElements[2]);

			$('#imgThumbnail_' + p1.propertyID).parent().parent().parent()[0].appendChild(newSlide[0]);

			newSlide = $('#imgThumbnail_' + p1.propertyID).parent().parent().clone();
			newSlide.find('a').attr('id', 'hlPropertyImage0_' + p1.propertyID);
			image = newSlide.find('img');

			image.attr('id', 'imgThumbnail0_' + p1.propertyID);
			image.attr('src', p1.photoElements[0]);

			$('#imgThumbnail_' + p1.propertyID).parent().parent().parent()[0].insertBefore(newSlide[0],
			$('#imgThumbnail_' + p1.propertyID).parent().parent().parent()[0].firstChild);
		}

		$('#currentPhoto_' + p1.propertyID).text('1 of ');
		$('#totalPhotos_' + p1.propertyID).text(p1.photoElements.length.toString());

	}
	else
	{
		$('#currentPhoto_' + p1.propertyID).text('');
		$('#totalPhotos_' + p1.propertyID).text('');
	}

	$('#featured_' + p1.propertyID).cycle({
		fx: 'scrollHorz',
		timeout: 0,
		prev: '#featured-prev_' + p1.propertyID,
		next: '#featured-next_' + p1.propertyID,
		onPrevNextEvent: onPrevNextSlide
	});
}

function onPrevNextSlide(isNext, zeroBasedSlideIndex, slideElement)
{
	var p0 = null;
	var propid = $(slideElement).find('img').attr('id');
	propid = propid.substring(propid.lastIndexOf('_') + 1);

	for (var i = 0; i < resultPhotoElements.length; i++)
	{
		if (resultPhotoElements[i].propertyID == propid)
		{
			p0 = resultPhotoElements[i];
			break;
		}
	}

	if (p0 == null) return;

	if (isNext)
		p0.currentImageIndex >= p0.photoElements.length - 1 ? p0.currentImageIndex = 0 : p0.currentImageIndex += 1;
	else
		p0.currentImageIndex == 0 ? p0.currentImageIndex = p0.photoElements.length - 1 : p0.currentImageIndex -= 1;

	$(slideElement).find('img').attr('src', p0.photoElements[p0.currentImageIndex]);
	$('#currentPhoto_' + p0.propertyID).text((p0.currentImageIndex + 1).toString() + ' of ');

	if (p0.photoElements.length > 2)
	{
		//if we're going forward, get the next slide, adjust its index
		var nextImageIndex = p0.currentImageIndex == p0.photoElements.length - 1 ? 0 : p0.currentImageIndex + 1;
		var prevImageIndex = p0.currentImageIndex == 0 ? p0.photoElements.length - 1 : p0.currentImageIndex - 1;

		//now load the other two slide's images with the correct src 
		var nextImageSlide = null;
		var prevImageSlide = null;

		switch (zeroBasedSlideIndex)
		{
			case 0:
				nextImageSlide = $(slideElement).parent().find('#imgThumbnail_' + p0.propertyID);
				prevImageSlide = $(slideElement).parent().find('#imgThumbnail1_' + p0.propertyID);
				break;
			case 1:
				nextImageSlide = $(slideElement).parent().find('#imgThumbnail1_' + p0.propertyID);
				prevImageSlide = $(slideElement).parent().find('#imgThumbnail0_' + p0.propertyID);
				break;
			case 2:
				nextImageSlide = $(slideElement).parent().find('#imgThumbnail0_' + p0.propertyID);
				prevImageSlide = $(slideElement).parent().find('#imgThumbnail_' + p0.propertyID);
				break;
		}

		nextImageSlide[0].src = p0.photoElements[nextImageIndex];
		prevImageSlide[0].src = p0.photoElements[prevImageIndex];
	}
}

function onResultPageKeyDown(e)
{
	var key = window.event ? e.keyCode : e.which;

	if (key === 13)
	{
		var target = e.target ? e.target : e.srcElement;

		if (target.tagName == 'A')
		{
			return true;
		}
		else if (target.tagName == 'IMG')
		{
			if (target.parentNode !== 'undefined' && target.parentNode.tagName === 'A')
				return true;
		}
		return false;
	}
	return true;
}

