$(document).ready(function(){
	
	/**
	* Setup ajax behavior
	*/
	$.ajaxSetup({
		error:function(xhr, error, thrownError){
			var jResponse = JSON.parse(xhr.responseText);
			if (jResponse.status === globalParams.ajaxStatus.redirect) {
				return XD.redirect({to:jResponse.message});
			}
			jAlert(jResponse.message);
		}
	});

	/**
	* Create tabs pannels
	*/
	$('.tabs').tabs({
		select: function(event, ui) {
			if (ui.panel.id == 'viewedYou')
			{
				//$.post('/profileView/updateLastViewedYouTime');
			}
			$(ui.tab).find('.new').fadeOut(200, function(){$(this).remove()});
			if($(ui.tab).attr('data-update'))
			{
				$.get($(ui.tab).attr('data-update'));
			}
			/*** update the new messages here by ajax call ***/
		}
	});

	/**
	* Show Sign Up/Register Dialog
	*/
	$.Windows.init({selector: '#sign-up-button',
		dialogClass: 'popup-register-login',
		modal: 'true',
		resizable: false,
		draggable: false,
		id: 'sign-up-login-box',
		position: ['center', parseInt(($(window).height() - 350) / 2)],
		afterAjax: function(){
			$('.tabs', '.popup-register-login').tabs({
				load: function (event, ui) {
					if (ui.panel.id == 'User_Sign_In') {
						$('#signinForm').ajaxForm({
							dataType: 'json',
							beforeSend: function () {
								XD.doAjaxFormBeforeSend({formId:'#signinForm'});
							},
							success: function (data) {
								XD.doAjaxFormSuccess({formId:'#signinForm',
									data:data,
									errorsPrefix:'SigninForm_',
									inputPrefix:'SigninForm[',
									inputPostfix:']',
									statusSuccess: function (response) {
										return XD.redirect({to:response.redirectUrl});
									}
								});
							}
						});
					}
					$('.cancel-window').click(function(ev){
						$(this).parents().dialog('close');
						return false;
					});
					$('#request-password-lnk').click(
						function () {
							$(this).parents('div:first').load($(this).attr('href'), false,
								function () {
									var form = $('#requestPasswordResetForm');
									form.ajaxForm({
										dataType: 'json',
										beforeSend: function () {
											XD.doAjaxFormBeforeSend({formId:'#requestPasswordResetForm'});
										},
										success: function (data) {
											XD.doAjaxFormSuccess({formId:'#requestPasswordResetForm',
												data:data,
												errorsPrefix:'',
												inputPrefix:'',
												inputPostfix:'',
												statusSuccess: function (response) {
													$('.tabs', '#dialog-sign-up-button').tabs('load',1);
													jAlert(data.message, false, function () {$(this).dialog('close');});
												}
											});
										}
									});
								}
							);
							return false;
						}
					)
				}
			});
			$('#registerForm').ajaxForm({
				dataType: 'json',
				beforeSend: function () {
					XD.doAjaxFormBeforeSend({formId:'#registerForm'});
				},
				success: function (data) {
					XD.doAjaxFormSuccess({formId:'#registerForm',
						data:data,
						errorsPrefix:'RegistrationForm_',
						inputPrefix:'user[',
						inputPostfix:']',
						statusSuccess: function (response) {
							return XD.redirect({to:response.redirectUrl});
						}
					});
				}
			});
			$('.cancel-window').click(function(ev){
				$(this).parents('.ui-dialog-content').dialog('close');
				return false;
			});
		},
		ajaxLoader: ''
	});

	/**
	* Set up feedback box
	*/
	$('#feedback-badge').feedbackBadge();
	$('#feedback-badge').click(
		function () {
			var self = $(this);
			$('<div id="feedback-box">' + XD.getAjaxLoading() + '</div>').dialog(
				XD.getDialogOptions({
					dialogClass: 'popup-feedback-box',
					open: function (ev, ui) {
						$('#feedback-box').load(self.attr('href'), function(){
							$('.popup-feedback-box').removeClass('ajax-loading');
							$('#feedbackForm').ajaxForm({
								dataType: 'json',
								beforeSend: function () {
									XD.doAjaxFormBeforeSend({formId:'#feedbackForm'});
								},
								success: function (data) {
									XD.doAjaxFormSuccess({formId:'#feedbackForm',
										data:data,
										errorsPrefix:'Feedback_',
										inputPrefix:'feedback[',
										inputPostfix:']',
										statusSuccess: function (response) {
											$('#feedback-box').dialog('destroy');
											$('#feedback-box').remove();
										}
									});
								}
							});
							$('.cancel-window').click(function(ev){
								$('#feedback-box').dialog('destroy').remove();
							});
						});
					},
					close: function(){
						$('#feedback-box').dialog('destroy').remove();
					}
				}
			));
			return false;
		}
	);
	
	/**
	* Handle Help Form
	*/
	$('#helpForm').ajaxForm({
		dataType:'json',
		beforeSend: function () {
			XD.doAjaxFormBeforeSend({formId:'#helpForm'});
		},
		success: function (data) {
			XD.doAjaxFormSuccess({formId:'#helpForm',
											  data:data,
											  errorsPrefix:'HelpEmail_',
											  inputPrefix:'help[',
											  inputPostfix:']',
											  statusSuccess: function (response) {
											  	jAlert(response.message, false, function () {return XD.redirect({to:response.redirectUrl});});
											  }
											});
		}
	});
	
	/**
	* Handle Terms & COnditions url click on register box
	*/
	$('#tos-link').live('click',
		function () {
			XD.popupWindow({url:$(this).attr('href'),
							 title:$(this).attr('title'),
							 width:500,
							 height:550,
							 top:100,
							 left:100
						   });
			return false;
		}
	);
	
	/**
	 * jAlert global Configurations
	 */
	$.alerts.okButton = globalParams.dialogMessages.ok;
	$.alerts.cancelButton = globalParams.dialogMessages.cancel;
});

/**
* General Events when window resize
* - reposition UIDialogs on resize
*/
$(window).resize(
	function () {
		$('.ui-dialog-content').each(
			function (index, dialog) {
				if ($(dialog).dialog('isOpen')) {
					$(dialog).dialog({position:'center'});
				}
			}
		);
	}
);

/**
* General project namespace
*/
XD = {
	/**
	* Triggers for non-registered users on first page
	*/
	indexPageTriggers: function () {
		$('#wrapper').addClass('non-registered');
		$('.left-side .ui-tabs .ui-widget-content', '#wrapper').addClass('ui-widget-content-non-registered');
		$('#wrapper, #header .sub[href*=search], #footer a[href*=search]').click(
			function (ev) {
				$('#sign-up-button').trigger('click');
				return false;
			}
		);
	},
	
	/**
	* Triggers for non-registered users on help page
	*/
	helpPageTriggers: function () {
		$('#header .sub[href*=search], #footer a[href*=search]').click(
			function (ev) {
				$('#sign-up-button').trigger('click');
				return false;
			}
		);
	},
	
	/**
	* Open popups
	*/
	popupWindow: function (params) {
		var config = {url:'/',
					title:'New Window',
					width:800,
					height:600,
					scrollbars:1,
					menubar:0,
					statusbar:0,
					toolbar:0,
					top:0,
					left:0,
					resizable:0,
					fullscreen:0
					};
		config = $.extend(config, params);
		
		var popupConfigs = '';
		$.each(config, function (key, val) {
			popupConfigs += (key + '=' + val + ',');
		});
		popupConfigs[popupConfigs-1] = '';
		
		var popupWin = window.open(config.url, config.title, popupConfigs);
		popupWin.focus();
		
		return false;
	},
	
	/**
	* You can call this on ajaxFrom success event
	* ex: $(el).ajaxForm({success: function (data) {XD.doAjaxFormSuccess({...})})});
	*/
	doAjaxFormSuccess: function (params) {
		var config = {formId:'', data:'', errorsPrefix:'', inputPrefix:'', inputPostfix:'', statusSuccess:function () {}, statusEmpty:function () {}};
		config = $.extend(config, params);
		var form = $(config.formId);
		$('input, textarea', form).removeClass('error');
		$('.error-msg', form).remove();
		$('button[type=submit]', form).attr('disabled', '').removeClass('disabled').fadeTo(100, 1);
		
		if (config.data.status === globalParams.ajaxStatus.ok) {
			config.statusSuccess(config.data);
			return true;
		}
		if (config.data.status === globalParams.ajaxStatus.empty) {
			config.statusEmpty(config.data);
			return true;
		}
//		console.log(config.data, config.errorsPrefix);
		$.each(config.data, function (key, value) {
//			console.log(key);console.log(value);
			key = key.replace(config.errorsPrefix, '');
			var fieldName = config.inputPrefix + key + config.inputPostfix;
			var element = $('[name=' + fieldName + ']');
			var error = $('<p class="error-msg">' + value[0] + '</p>').hide();
			$(element, form).addClass('error').parent().append(error.fadeIn());
		});
	},
	
	/**
	* You can call this on ajaxFrom beforeSend event
	* ex: $(el).ajaxForm({beforeSend: function (data) {XD.doAjaxFormBeforeSend({...})})});
	*/
	doAjaxFormBeforeSend: function (params) {
		var config = {formId:''};
		config = $.extend(config, params);
		var form = $(config.formId);
		$('button[type=submit]', form).attr('disabled', 'disabled').addClass('disabled').fadeTo(100, 0.2);
	},
	
	/**
	* Default UIDialog options
	*/
	dialogOptions: {
		modal:true,
		resizable:false,
		draggable:false,
		dialogClass:'no-close-button',
		buttons: false,
		id: false,
		open: false,
		close: false
	},
	
	/**
	* Set default dialog options and merge them with yours
	*/
	getDialogOptions: function (params) {
		return $.extend({}, XD.dialogOptions, params);
	},
	
	/**
	* Create default dialog text content
	*/
	getDialogText: function (text) {
		var content = '<div class="default-content">' + text + '</div>';
		return content;
	},
	
	/**
	 * Return an element with an ajax loading background 
	 */
	getAjaxLoading: function () {
		return '<div class="ajax-loading"></div>';
	},
	
	redirect: function (params) {
		var config = {to: '/'}; 
		$.extend(config, params);
		window.location = config.to;
		return false;
	}
}

