var organizer_listingID = 0;
var organizer_action = null;

/* =================================================================
  LISTING INQUIRY
================================================================= */
function listingInquiry(e, targ) {

	var formData = {};
	organizer_action = listingInquiry;

	/* IF A FORM TRIGGERED THE EVENT */
	if (targ.tagName.toLowerCase() == 'form') {
		/* SERIALIZE THE FORM THE USER IS SUBMITTING */
		formData = $('form#' + targ.id).formToArray();

		/* SHOW LOADING MESSAGE */
		bubble.populateLoading(e);

	/* IF LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	} else if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE SEARCH */
	var url = window.location.pathname + '?a=ajax.listingInquiry&ListingID=' + organizer_listingID;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {

		switch(response.status.toLowerCase()) {
			/* IF SEARCH SAVED SUCCESSFULLY */
			case 'success':
				bubble.populate(response.content);
			break;

			/* IF FORM */
			case 'inquiryform':
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);

				/* BIND TO FORM SUBMIT */
				$('form#ysoListingInquiryForm').submit( function(e) { organizer_action(e, this); return false; } );
			break;

			default: alert(response.status); break;
		}

	}});
}

/* =================================================================
  SCHEDULE A VISIT
================================================================= */
function scheduleVisit(e, targ) {

	var formData = {};
	organizer_action = scheduleVisit;

	/* IF A FORM TRIGGERED THE EVENT */
	if (targ.tagName.toLowerCase() == 'form') {
		/* SERIALIZE THE FORM THE USER IS SUBMITTING */
		formData = $('form#' + targ.id).formToArray();

		/* SHOW LOADING MESSAGE */
		bubble.populateLoading(e);

	/* IF LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	} else if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE SEARCH */
	var url = window.location.pathname + '?a=ajax.scheduleVisit&ListingID=' + organizer_listingID;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {

		switch(response.status.toLowerCase()) {
			/* IF SEARCH SAVED SUCCESSFULLY */
			case 'success':
				bubble.populate(response.content);
			break;

			/* IF FORM */
			case 'visitform':
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);

				/* BIND TO FORM SUBMIT */
				$('form#ysoScheduleVisitForm').submit( function(e) { organizer_action(e, this); return false; } );
			break;

			default: alert(response.status); break;
		}

	}});
}

/* =================================================================
  VIEW LISTING DETAIL
================================================================= */
function viewListingDetail(e, targ) {

	var formData = {};
	var loggedin = $.cookie('LOGGEDIN').toLowerCase() == 'true';
	organizer_action = viewListingDetail;

	/* IF A LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		organizer_detailURL = targ.href;

		/* IF USER IS LOGGED IN OR LOGIN NOT REQUIRED, RELOCATE TO THE LISTING */
		if (loggedin || !organizer_limitListingDetail) { window.location.href = organizer_detailURL; return; }

		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	/* IF A FORM TRIGGERED THE EVENT */
	} else {
		formData = $('form#' + targ.id).formToArray();
		bubble.populateLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE LISTING */
	var url = window.location.pathname + '?a=ajax.viewListingDetail&ListingID=' + organizer_listingID;

	/* if (organizer_limitListingDetail) { url += '&requireLogin=1'; } */
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {
		switch(response.status.toLowerCase()) {
			/* IF OK TO VIEW LISTING */
			case 'success':
				/*
				if (response.recentlistings) {
					updateRecentlyViewed(response.recentlistings);
				}*/
				/* RELOCATE USER TO LISTING DETAIL */
				if (organizer_detailURL) {
					window.location.href = organizer_detailURL;
				}
			break;

			/* IF LOGIN REQUIRED */
			case 'login':
				if (targ.tagName.toLowerCase() == 'a') {
					doLoginWindow(e, organizer_action);
				/* IF FORM SUBMISSION */
				} else {
					/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
					bubble.populate(response.content);
	
					/* PREPARE THE LOGIN FORM */
					prepareLoginForm(organizer_action);
				}
			break;

			default: alert(response.status); break;
		}
	}});
}

/* =================================================================
  VIEW PHOTOS
================================================================= */
function viewPhotos(e, targ) {

	var formData = {};
	var loggedin = $.cookie('LOGGEDIN').toLowerCase() == 'true';
	var loginRequired = organizer_limitListingDetail == 0 || loggedin ? 0 : 1;
	organizer_action = viewPhotos;

	/* IF A LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	/* IF A FORM TRIGGERED THE EVENT */
	} else {
		formData = $('form#' + targ.id).formToArray();
		bubble.populateLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO GET THE PHOTOS */
	var url = window.location.pathname + '?a=ajax.viewPhotos&ListingID=' + organizer_listingID + '&loginRequired=' + loginRequired;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {

		switch(response.status.toLowerCase()) {
			/* IF LISTING SAVED SUCCESSFULLY */
			case 'success':
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);
			break;

			/* IF LOGIN REQUIRED */
			case 'login':
				if (targ.tagName.toLowerCase() == 'a') {
					doLoginWindow(e, organizer_action);
				/* IF FORM SUBMISSION */
				} else {
					/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
					bubble.populate(response.content);
	
					/* PREPARE THE LOGIN FORM */
					prepareLoginForm(organizer_action);
				}
			break;

			default: alert(response.status); break;
		}

	}});

}

/* =================================================================
  SAVE LISTING
================================================================= */
function saveListing(e, targ) {

	var formData = {};
	var loggedin = $.cookie('LOGGEDIN').toLowerCase() == 'true';
	organizer_action = saveListing;

	/* IF A LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		if (loggedin) {
			$('a#save_' + organizer_listingID).addClass('saving').html('Saving...');
		} else {
			bubble.hideOnMouseOut = false;
			bubble.showLoading(e);
		}
	/* IF A FORM TRIGGERED THE EVENT */
	} else {
		formData = $('form#' + targ.id).formToArray();
		bubble.populateLoading();
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE LISTING */
	var url = window.location.pathname + '?a=ajax.saveListing&ListingID=' + organizer_listingID;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {
		switch(response.status.toLowerCase()) {
			/* IF LISTING SAVED SUCCESSFULLY */
			case 'success':
				bubble.hide();
				updateSaveListingLink(organizer_listingID, 'save');
				/*
				var appendMsg = $('div#hsrList ol li#row_' + organizer_listingID).prepend('<div class="confirmMsg">This listing is now saved to Your Search Organizer</div>');
				if (appendMsg.size() > 0) {
					$('div#hsrList ol li#row_' + organizer_listingID + ' div.confirmMsg').show('slow');
				}
				*/
				if (response.savedlistings) {
					updateSavedListings(response.savedlistings);
				}
			break;

			/* IF LOGIN REQUIRED */
			case 'login':
				if (targ.tagName.toLowerCase() == 'a') {
					doLoginWindow(e, organizer_action);
				/* IF FORM SUBMISSION */
				} else {
					/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
					bubble.populate(response.content);
	
					/* PREPARE THE LOGIN FORM */
					prepareLoginForm(organizer_action);
				}
			break;

			default: alert(response.status); break;
		}
	}});
}

function updateSaveListingLink(id, state) {
	if (state == 'save') {
		$('a#save_' + id).removeClass().addClass('on').html('Remove').attr('title', 'Remove this listing from Your Search Organizer.').unbind('click').click(function(e) { removeListing(e, this); return false; });
	} else if (state == 'remove') {
		$('a#save_' + id).removeClass().html('Save Listing').attr('title', 'Save this listing to Your Search Organizer.').unbind('click').click(function(e) { saveListing(e, this); return false; });
		$('a#note_' + id).removeClass().html('Add a Note').attr('title', 'Add a note to this listing.');
	}
}

/* =================================================================
  REMOVE LISTING
================================================================= */
function removeListing(e, targ) {

	organizer_action = removeListing;
	organizer_listingID = targ.id.split('_')[1];

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	$('a#save_' + organizer_listingID).addClass('removing').html('Removing...');

	/* SEND AJAX REQUEST TO SAVE THE LISTING */
	var url = window.location.pathname + '?a=ajax.deleteListing&ListingID=' + organizer_listingID;
	$.ajax({type:'get', url:url, dataType:'script', async:true, complete:function(x, s) {
		switch(response.status.toLowerCase()) {
			/* IF LISTING SAVED SUCCESSFULLY */
			case 'success':
				/* IF WE'RE IN THE SEARCH ORGANIZER, REMOVE THE ROW */
				var listingRow = $('li#row_' + organizer_listingID, $('div#savedListings ol'));
				if (listingRow.size() > 0) {
					listingRow.slideUp('normal', function() {
						_savedListingCount -= 1;
						var listings = 'listings';
						if (_savedListingCount == 1) { listings = 'listing'; }
						$('div#savedListings span.count').html('(You have ' + _savedListingCount + ' saved ' + listings + ')');
					});
				} else {
					updateSaveListingLink(organizer_listingID, 'remove');
					if (response.savedlistings) {
						updateSavedListings(response.savedlistings);
					}
				}
			break;

			default: alert(response.status); break;
		}
	}});
}

/* =================================================================
  SAVE NOTE
================================================================= */
function saveNote(e, targ) {

	var formData = {};
	organizer_action = saveNote;

	/* IF A FORM TRIGGERED THE EVENT */
	if (targ.tagName.toLowerCase() == 'form') {
		/* SERIALIZE THE FORM THE USER IS SUBMITTING */
		formData = $('form#' + targ.id).formToArray();
		bubble.populateLoading(e);

	/* IF LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	} else if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE SEARCH */
	var url = window.location.pathname + '?a=ajax.saveNote&ListingID=' + organizer_listingID;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {
		switch(response.status.toLowerCase()) {
			/* IF SEARCH SAVED SUCCESSFULLY */
			case 'success':
				bubble.hide();
				updateSaveListingLink(organizer_listingID, 'save');
				$('a#note_' + organizer_listingID).addClass('on').html('View / Edit').attr('title', 'View / Edit your note for this listing.');
				if (response.savedlistings) {
					updateSavedListings(response.savedlistings);
				}
			break;

			/* IF LOGIN REQUIRED */
			case 'login':
				if (targ.tagName.toLowerCase() == 'a') {
					doLoginWindow(e, organizer_action);
				/* IF FORM SUBMISSION */
				} else {
					/* POPULATE FLOATING WINDOW WITH AJAX CONTENT AND PREPARE LOGIN FORM */
					bubble.populate(response.content);
					prepareLoginForm(organizer_action);
				}
			break;

			/* IF NOTE FORM */
			case 'noteform':
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);
	
				/* BIND TO FORM SUBMIT */
				$('form#ysoNoteForm').submit( function(e) { organizer_action(e, this); return false; } );
			break;

			case 'nonote': bubble.hide(); break;

			default: alert(response.status); break;
		}
	}});
}

/* =================================================================
  EMAIL LISTING
================================================================= */
function emailListing(e, targ) {

	var formData = {};
	organizer_action = emailListing;

	/* IF A FORM TRIGGERED THE EVENT */
	if (targ.tagName.toLowerCase() == 'form') {
		/* SERIALIZE THE FORM THE USER IS SUBMITTING */
		formData = $('form#' + targ.id).formToArray();
		bubble.populateLoading();

	/* IF LINK TRIGGERED THE EVENT, SET THE LISTING ID */
	} else if (targ.tagName.toLowerCase() == 'a') {
		organizer_listingID = targ.id.split('_')[1];
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);
	}

	/* IF WE DON'T HAVE A LISTING ID, RETURN */
	if (!organizer_listingID) { return; }

	/* SEND AJAX REQUEST TO SAVE THE SEARCH */
	var url = window.location.pathname + '?a=ajax.emailListing&ListingID=' + organizer_listingID;
	$.ajax({type:'post', url:url, data:formData, dataType:'script', async:true, complete:function(x, s) {
		switch(response.status.toLowerCase()) {
			/* IF SEARCH SAVED SUCCESSFULLY */
			case 'success':
				bubble.populate(response.content);
			break;

			/* IF LOGIN REQUIRED */
			case 'login':
				if (targ.tagName.toLowerCase() == 'a') {
					doLoginWindow(e, organizer_action);
				/* IF FORM SUBMISSION */
				} else {
					/* POPULATE FLOATING WINDOW WITH AJAX CONTENT AND PREPARE LOGIN FORM */
					bubble.populate(response.content);
					prepareLoginForm(organizer_action);
				}
			break;

			/* IF NOTE FORM */
			case 'emailform':
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);
	
				/* BIND TO FORM SUBMIT */
				$('form#ysoEmailListingForm').submit( function(e) { organizer_action(e, this); return false; } );
			break;

			default: alert(response.status); break;
		}
	}});
}

/* =================================================================
  MORTGAGE CALCULATOR
================================================================= */
var mtgCalc = {

	show:function(e, targ) {

		/* CONFIG FLOATING WINDOW */
		bubble.hideOnMouseOut = false;
		bubble.showLoading(e);

		/* GET THE LOAN AMOUNT */
		var loanAmount = '$' + this.reformat(this.getFloor(targ.id.split('_')[2]), 0);

		var url = window.location.pathname + '?a=ajax.mortgageCalc';
		$.ajax({type:'get', url:url, dataType:'script', async:true, complete:function(x, s) {

			/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
			bubble.populate(response.content);

			/* SET THE LISTING PRICE */
			$('input#mtgCalcLoanAmount').val(loanAmount);

			/* SET THE DOWN PAYMENT */
			$('input#mtgCalcDown').val('$' + mtgCalc.reformat(mtgCalc.getFloor(mtgCalc.getCleanNumber(loanAmount) * 0.2), 0));

			/* CALCULATE THE PAYMENT */
			mtgCalc.calcPayment();

			/* ADD ONCHANGE EVENT LISTENERS */
			$('div#mtgCalc input, div#mtgCalc select').change(
				function() { mtgCalc.calcPayment(); }
			).keyup(
				function() { mtgCalc.calcPayment(); }
			);

		}});
	},

	reformat:function(expr, decplaces) {
		var str = '' + Math.round(eval(expr)*Math.pow(10, decplaces));
		while (str.length <= decplaces) { str = '0' + str; }
		var decpoint = str.length - decplaces;
		var strUnit = str.substring(0, decpoint);
		var strTemp;
		var strUnitDisp = '';
		var strPoint = str.substring(decpoint, str.length);
		while (strUnit.length > 3) {
			strUnitDisp = ',' + strUnit.substring(strUnit.length - 3, strUnit.length) + strUnitDisp;
			strUnit = strUnit.substring(0, strUnit.length - 3);              
		}       
		if (strUnit.length > 0)
			strUnitDisp = strUnit + strUnitDisp;
		else
			strUnitDisp = strUnitDisp.substring(1, strUnit. length);
		return strUnitDisp;
	},

	getCleanNumber:function(nVal) {
		/* convert field value to numeric value */
		if(nVal != '') {
			nVal = nVal.replace(/\$/,'');
			nVal = nVal.replace(/,/gi,'');
			if(isNaN(parseFloat(nVal)))
			nVal = '0';
		} else {
			nVal = '0';
		}
		return parseFloat(nVal);
	},

	getFloor:function(number) {
	  return Math.floor(number*Math.pow(10,2) + 0.5)/Math.pow(10,2);
	},

	calcPayment:function() {
		var loanRate = $('select#mtgCalcRate').fieldValue();
		var loanAmount = $('input#mtgCalcLoanAmount').fieldValue();
		var loanDwnPymt = $('input#mtgCalcDown').fieldValue();
		var loanTerm = $('select#mtgCalcTerm').fieldValue();

		var mi = loanRate / 1200;
		var base = 1;
		var mbase = 1 + mi;
		var loanBalance = this.getCleanNumber(loanAmount) - this.getCleanNumber(loanDwnPymt);
		for (i = 0; i < loanTerm * 12; i++) {
			base = base * mbase
		}

		var loanSum = loanBalance * mi / ( 1 - (1/base));
		var pmt = this.reformat(this.getFloor(loanSum), 0);
		$('div#mtgCalc li.pmt div').html('Estimated Payment: $' + pmt + '/mo.<span>*<\/span>');
	}

}

/* =================================================================
  ORGANIZER QUICK VIEW TOOLS
================================================================= */
function getQuickView() {
	var url = window.location.pathname + '?a=ajax.getQuickView';
	$.ajax({type:'post', url:url, dataType:'script', async:false});

	if (response.savedsearches) { updateSavedSearches(response.savedsearches); }
	if (response.savedlistings) { updateSavedListings(response.savedlistings); }
	if (response.recentlistings) { updateRecentlyViewed(response.recentlistings); }
}

function updateRecentlyViewed(content) {
	$('div#yso_recent').html(content);
	/* ONCLICK - SAVE ALL RECENTLY VIEWED LISTINGS */
	$('a#saveRecent').click( function(e) { saveRecentListings(e, this); return false; } );
}

function updateSavedListings(content) {
	$('div#yso_listings').html(content);
	/* ONCLICK */
}

function updateSavedSearches(content) {
	$('div#yso_searches').html(content);
	/* ONCLICK */
}

function saveRecentListings(e, targ) {

	organizer_action = saveRecentListings;

	/* SEND AJAX REQUEST TO SAVE THE LISTING */
	var url = window.location.pathname + '?a=ajax.saveRecentListings';
	$.ajax({type:'post', url:url, dataType:'script', async:false});

	switch(response.status.toLowerCase()) {
		/* IF LISTING SAVED SUCCESSFULLY */
		case 'success':
			bubble.hide();
			$('a#save_' + organizer_listingID).addClass('on').html('Listing Saved');
			if (response.savedlistings) {
				updateSavedListings(response.savedlistings);
			}
			$('div#yso_recent').html('<h3>Recently Viewed Listings<\/h3><p>Your most recently viewed listings were saved to your Search Organizer.<\/p>');
			if (response.listingids) {
				var id_list = response.listingids.split(',');
				for (var i = 0; i < id_list.length; i++) {
					$('a#save_' + id_list[i]).addClass('on').html('Listing Saved');
				}
			}
		break;

		/* IF LOGIN REQUIRED */
		case 'login':
			if (targ.tagName.toLowerCase() == 'a') {
				doLoginWindow(e, organizer_action);
			/* IF FORM SUBMISSION */
			} else {
				/* POPULATE FLOATING WINDOW WITH AJAX CONTENT */
				bubble.populate(response.content);

				/* PREPARE THE LOGIN FORM */
				prepareLoginForm(organizer_action);
			}
		break;

		default: alert(response.status); break;
	}

}