﻿// Class Modal
//
// - Requires -
// class.js
// jquery.js (version 1.3+)
//
// - Properties -
// modalTitle: Friendly title for modal (added to modalOptions)
// modalElements: object containing
//		modalDiv - div that $().dialog() is called on
//		targetElement - link that fires dialog()
// snippetPath: absolute path to snippet aspx
// params: Query string params for ajax populate call
// modalOptions: the options object passed into $().dialog()

BenefulMap.Modal = Class.extend({
	init: function(modalTitle, modalElements, modalOptions, snippetPath, params) {
		this.modalDiv = modalElements.modalDiv;
		this.targetEl = modalElements.targetElement;
		this.closeButton = modalElements.modalDiv + " .close";
		this.snippetPath = snippetPath;
		this.params = params;
		this.initialParams = params;
		this.originalTitle = modalTitle;
		
		this.modalOptions = {};
		this.modalOptions.autoOpen = false;
		this.modalOptions.draggable = false;
		this.modalOptions.resizable = false;
		this.modalOptions.title = modalTitle;
		this.modalOptions.width = 600;
		this.modalOptions.modal = true;
		this.modalOptions.position = ["center", 100];
		this.modalOptions.bgiframe = true; // to block select boxes under modals in IE6
		this.extendModalOptions(modalOptions);
		
		this.firedTarget;
		
		$(this.modalDiv).dialog(this.modalOptions);
		this.addModalTargetListener();
		this.dialogCloseListener(); // this catches the event the modal itself fires when it is being closed
	},
	dialogCloseListener: function() {
		var self = this;
		$(this.getModalDiv()).bind('dialogclose', function(event, ui) {
			console.info(self.getModalTitle(), " now closing");
			self.revertToInitialState();
		});
	},
	revertToInitialState: function() {
		console.info(this.getModalTitle(), " returning to initial state");
		this.setParams(this.getInitialParams());
		this.setTitle(this.getOriginalTitle());
	},
	getOriginalTitle: function() {
		return this.originalTitle;
	},
	setOriginalTitle: function(originalTitle) {
		this.originalTitle = originalTitle;
	},
	getInitialParams: function() {
		return this.initialParams;
	},
	getModalTitle: function() {
		return this.modalOptions.title;
	},
	setModalTitle: function(title) {
		this.modalOptions.title = title;
	},
	getModalDiv: function() {
		return this.modalDiv;
	},
	setModalDiv: function(modalDiv) {
		this.modalDiv = modalDiv;
	},
	getCloseButton: function() {
	    return this.closeButton;
	},
	setCloseButton: function(closeButton) {
	    this.closeButton = closeButton;
	},
	getSnippetPath: function() {
		return this.snippetPath;
	},
	setSnippetPath: function(snippetPath) {
		this.snippetPath = snippetPath;
	},
	getParams: function() {
		return this.params;
	},
	setParams: function(params) {
		this.params = params;
	},
	extendParams: function(additionalParams) {
		jQuery.extend(this.getParams(), additionalParams);
	},
	getTargetEl: function() {
		return this.targetEl;
	},
	setTargetEl: function(targetEl) {
		this.targetEl = targetEl;
	},
	getModalOptions: function() {
		return this.modalOptions;
	},
	setModalOptions: function(modalOptions) {
		this.modalOptions = modalOptions;
	},
	getTitle: function() {
		return this.modalOptions.title;
	},
	setTitle: function(title) {
		this.modalOptions.title = title;
		$(this.modalDiv).dialog('option', 'title', title);
	},
	extendModalOptions: function(additionalModalOptions) {
		jQuery.extend(this.getModalOptions(), additionalModalOptions);
	},
	populate: function() {
		var self = this;
		jQuery.ajax({
		    type: "GET",
			cache: false,
			url: self.getSnippetPath(),
			data: self.getParams(),
			success: function(data, textStatus) {
				$( self.getModalDiv() ).html(data);
				$( self.getModalDiv() ).dialog('open');
				self.addModalListeners();
			},
			dataType: "html"
		});
	},
	addModalListeners: function() {
		var self = this;
		$( this.getCloseButton() ).click( function(event) {
		    event.preventDefault();
		    self.close();
		});
		 $(this.getModalDiv() + " a.new-tab").newWindow();
		 $(this.getModalDiv() + " a.pop-up").popup({
	        scrollbars:			true,
	        resizable:			true,
	        status:				false,
	        width:				640,
	        height:				600
    	});
	},
	// next function
	open: function() {
		this.populate();
	},
	close: function() {
		$(this.getModalDiv()).dialog('destroy');
	},
	openListener: function(eventName) {
		var self = this;
		$(document).bind(eventName, function(event) {
			self.open();
		});
	},
	closeListener: function(eventName) {
		var self = this;
		$(document).bind(eventName, function(event) {
			self.close();
		});
	},
	setFiredTarget: function(firedTarget) {
		this.firedTarget = firedTarget;
	},
	getFiredTarget: function() {
		return this.firedTarget;
	},
	addModalTargetListener: function() {
		var self = this;
		$(this.targetEl).live('click', function(event) {
			event.preventDefault();
			self.setFiredTarget(this);
			self.populate();
		});
	}
});

