CHAMILIA.namespace('CHAMILIA.ui.modal');

$(document).ready(function(){ CHAMILIA.ui.modal.init(); });

CHAMILIA.ui.modal = {
	
	_displayPageNode: '',
	_modalWindow: '',
	_closeHTML: "<a href='#' title='Close' class='modal-close'></a>",
	_xhrElements: [],
	
	CLASSES: {
		modalCloser: 'modal-close'	
	},
	
	IDS: {
		overlay: 'chamilia-overlay',
		container: 'chamilia-container'		
	},
	
	SELECTORS: {
		modalContainer: '#simplemodal-data',
		overlayForm: '#simplemodal-data form.xhr-modal',
		xhrModal: 'a.xhr-modal',
		formModalLocation: 'form.xhr-modal-locations'
	},
	
	init: function() {
		CHAMILIA.ui.modal.getElements();
		CHAMILIA.ui.modal.attachListeners();
	},
	
	attachListeners: function() {
		CHAMILIA.ui.modal._xhrElements.click(CHAMILIA.ui.modal.handleXhrClick);
		$(CHAMILIA.ui.modal.SELECTORS.formModalLocation).submit(CHAMILIA.ui.modal.handleLocationFormSubmit);
		$(window).bind('closeModal', CHAMILIA.ui.modal.closeModal);
	},
		
	getElements: function() {
		CHAMILIA.ui.modal._xhrElements = $(CHAMILIA.ui.modal.SELECTORS.xhrModal);
	},
	
	closeModal: function() {
		if ($('#simplemodal-data #map')[0]) { GUnload(); $(window).unbind('fadedIn'); }
		if(CHAMILIA.ui.modal._modalWindow) {	
			CHAMILIA.ui.modal._modalWindow.data.fadeOut(200);
			CHAMILIA.ui.modal._modalWindow.container.fadeOut(200, function () {
				CHAMILIA.ui.modal._modalWindow.overlay.fadeOut(200, function () {
					$.modal.close();					  
				});
			});
		}
	},
	
	dispatchModal: function(data) {
		$(data).modal({
			closeHTML: CHAMILIA.ui.modal._closeHTML,
			position: ["5%",],
			opacity:75,
			overlayCss: {backgroundColor:"#fff"},
			overlayId: CHAMILIA.ui.modal.IDS.overlay,
			containerId: CHAMILIA.ui.modal.IDS.container,
			onOpen: CHAMILIA.ui.modal.openModal,
			onShow: CHAMILIA.ui.modal.showModal,
			onClose: CHAMILIA.ui.modal.closeModal
		});
	},
	
	handleModalFormSubmit: function(e) {
		e.preventDefault();
		
		var is_valid = true;
		
		if($(e.currentTarget).hasClass('validate-on-submit')) {
			is_valid = CHAMILIA.util.validate.validate(e);
		}
		
		var formAction = e.currentTarget.action;
		if(formAction && is_valid) {
			$.post(formAction + '?xhr=1', $(e.currentTarget).serialize(), function(data) { CHAMILIA.ui.modal.updateModal(data); });
		}
	},
	
	handleModalFormSubmitFlash: function(href,formdata) {
		
		var formAction = href;
		if(formAction) {
			$.post(formAction + '?xhr=1', formdata, CHAMILIA.ui.modal.dispatchModal);
		}
	},
	
	handleLocationFormSubmit: function(e) {
		e.preventDefault();
		
		var formAction = e.currentTarget.action;
		if(formAction) {
			$.post(formAction + '?xhr=1', $(e.currentTarget).serialize(), CHAMILIA.ui.modal.dispatchModal);
		}
	},
	
	getDesignName: function() {
		
		var currentDesignName = $('#current-design-name')[0];
		var designNameQueryString = '';
		if(currentDesignName) {

			var changeName = '&changeName=' + $(currentDesignName).val();
			
			var designId = '';
			if(CHAMILIA.ui.login._savedDesignId) {
				designId = '&editId=' + CHAMILIA.ui.login._savedDesignId;
			}
			
			designNameQueryString = changeName + designId;
		}
		
		return designNameQueryString;
	},
	
	handleUpdateClick: function(e) {
		
		var designNameQueryString = CHAMILIA.ui.modal.getDesignName();
		
		e.preventDefault();
		
		var elHref = e.currentTarget.href;
		if (elHref.indexOf("?") != -1) {
			$.ajax({
				  url: elHref + '&xhr=1' + designNameQueryString,
				  cache: false,
				  success: function(data) { CHAMILIA.ui.modal.updateModal(data); }
				});
		} else {
			$.ajax({
				  url: elHref + '?xhr=1' + designNameQueryString,
				  cache: false,
				  success: function(data) { CHAMILIA.ui.modal.updateModal(data); }
				});
		}
	},
	
	handleXhrClick: function(e,href) {
		
		var designNameQueryString = CHAMILIA.ui.modal.getDesignName();

		if(e) {
			e.preventDefault();
			var elHref = e.currentTarget.href;
		}
		if(href) {
			var elHref = href;
		}
		
		if(elHref) {
			if (elHref.indexOf("?") != -1) {
				$.ajax({
				  url: elHref + '&xhr=1' + designNameQueryString,
				  cache: false,
				  success: function(data) { CHAMILIA.ui.modal.dispatchModal(data); }
				});
			} else {
				$.ajax({
				  url: elHref + '?xhr=1' + designNameQueryString,
				  cache: false,
				  success: function(data) { CHAMILIA.ui.modal.dispatchModal(data); }
				});
			}
		}
	},
		
	openModal: function(dialog) {
		CHAMILIA.ui.modal._modalWindow = dialog;
		CHAMILIA.ui.modal._modalWindow.overlay.fadeIn(200, function () {
			$('.' + CHAMILIA.ui.modal.CLASSES.modalCloser).click(CHAMILIA.ui.wishlist.clearWishlistItem);
			$('.' + CHAMILIA.ui.modal.CLASSES.modalCloser).click(function() { $(window).trigger('updateModal'); });
			CHAMILIA.ui.modal._modalWindow.container.fadeIn(200);
			CHAMILIA.ui.modal._modalWindow.data.fadeIn(200,function() { $(window).trigger('fadedIn'); });
		});
	},
	
	showModal: function() {
		$(CHAMILIA.ui.modal.SELECTORS.overlayForm).submit(CHAMILIA.ui.modal.handleModalFormSubmit);
		$(CHAMILIA.ui.modal.SELECTORS.modalContainer + ' ' + CHAMILIA.ui.modal.SELECTORS.xhrModal).click(CHAMILIA.ui.modal.handleUpdateClick);
		
		$(window).trigger('showModal'); 
	},
		
	updateModal: function(data) {
		
		if(!data) {
			CHAMILIA.ui.login.updateLoginStatus();
			CHAMILIA.ui.modal.closeModal();
		} else if(data.substring(0,9) == 'redirect:') {
			var redirectTo = data.split(':');
			window.location = 'http://'+redirectTo[1];
		} else {
		
			CHAMILIA.ui.modal._modalWindow.data.fadeOut(200, function() {			
				$(CHAMILIA.ui.modal.SELECTORS.modalContainer).empty();
				$(CHAMILIA.ui.modal.SELECTORS.modalContainer).append(data);
				CHAMILIA.ui.modal.showModal();
				CHAMILIA.ui.modal._modalWindow.data.fadeIn(200, function() {
					CHAMILIA.ui.login.updateLoginStatus();
				});
			});
			
		}
	}
	
	
}