﻿BenefulMap.ModalTellFriend = BenefulMap.ModalForm.extend({
	init: function(modalTitle, modalElements, modalOptions, snippetPath, params, formElements, context) {
		this._super( modalTitle, modalElements, modalOptions, snippetPath, params, formElements);
		this.context = context;
		this.originalContext = context;
		this.originalTitle = modalTitle;
		this.spotId = 0;
		this.setTellFriendInitialParams();
		this.openListener("tellFriend.open");
		this.closeListener("tellFriend.close");
		this.resultsPopulatedListener("tellFriend.resulsPopulated");
	},
	getOriginalTitle: function() {
	   return this.originalTitle;
	},
	setOriginalTitle: function(originalTitle) {
	   this.originalTitle = originalTitle;
	},
	getOriginalContext: function() {
		return this.originalContext;
	},
	getContext: function() {
		return this.context;
	},
	setContext: function(context) {
		this.context = context;
	},
	getSpotId: function() {
		return parseInt(this.spotId);
	},
	setSpotId: function(spotId) {
		this.spotId = parseInt(spotId);
	},
	getMapState: function() {
		return this.mapState;
	},
	setMapState: function(mapState) {
		this.mapState = mapState;
	},
	setTellFriendInitialParams: function() {
		var initialParams = {};
		initialParams.context = this.getContext();
		if (this.getContext() == "spot") {
			var id = jQuery.url.attr("file").replace(".aspx", "");
			this.setSpotId(id);
			initialParams.id = this.getSpotId();
		}
		this.setParams(initialParams);
	},
	getParamsFromMapState: function(mapState) {
		if (this.context == "results") {
			var params = {};
			params.context = "results";
			params.id = mapState.toJSON();
			params.location = mapState.getLocation();
		}
		this.setMapState(mapState);
		this.setParams(params);
	},
	showThankYou: function() {
		this.setTitle("Email Sent Successfully");
		this.setContext("thankyou");
		var params = {};
		params.context = this.getContext();
		this.setParams(params);
		this.populate();
	},
	redisplayFormWithMessage: function(message) {
        var params = {};
        params.message = message;
        this.setParams(params);
        this.populate();
	},
	addModalListeners: function() {
		this._super();
		var self = this;
		$("a.restart").click(function(event) {
			event.preventDefault();
			self.setTitle("Invite a Friend");
			self.close();
			self.open();
		});
	},
	submitFormData: function() {
		this._super();
		var toEmail = this.getIndividualFormData('FriendEmailAddress');
		var fromName = this.getIndividualFormData('YourName');
		var fromEmail = this.getIndividualFormData('YourEmailAddress');
		var msg = this.getIndividualFormData('FriendMessage');
		var self = this;
		switch(this.context) {
		    case "results":
				var mapState = this.getMapState();
				WagWorld.Web.AjaxUtility.TellFriendAboutResults(mapState.toJSON(), mapState.getLocation(), toEmail, fromName, fromEmail, msg, function(result) {
					self.checkResult(result.value.Pass, result.value.Reason);
				});
			break;

            case "spot":
            // int businessId, string toEmail, string fromName, string optionalMessage
				WagWorld.Web.AjaxUtility.TellFriendAboutSpot(this.getSpotId(), toEmail, fromName, msg, function(result) {
					self.checkResult(result.value.Pass, result.value.Reason);
				});
			break;
			case "site":
				WagWorld.Web.AjaxUtility.TellFriendAboutSite(toEmail, fromName, fromEmail, msg, function(result) {
					self.checkResult(result.value.Pass, result.value.Reason);
				});
			break;
		}
	},
	checkResult: function(pass, msg) {
        if (pass == true) {
            this.showThankYou();
        } else {
            this.redisplayFormWithMessage(msg);
        }
	},
	resultsPopulatedListener: function() {
		if (this.getContext() == "results") {
			var self = this;
			$(document).bind("tellFriend.resultsPopulated", function(event, mapState) {
				self.getParamsFromMapState(mapState);
				self.setMapState(mapState);
			});
		}
	},
	revertToInitialState: function() {
		this.setContext(this.getOriginalContext());
		var initialParams = {};
		initialParams.context = this.getContext();
		if (this.getContext() == "spot") {
			var id = jQuery.url.attr("file").replace(".aspx", "");
			this.setSpotId(id);
			initialParams.id = this.getSpotId();
		}
		if (this.getContext() == "results") {
			var mapState = this.getMapState();
			initialParams.context = "results";
			initialParams.id = mapState.toJSON();
			initialParams.location = mapState.getLocation();
		}
		this.setTitle(this.getOriginalTitle());
		this.setParams(initialParams);
	}
});