/**
*
* @package		infoflot-riverlines
* @subpackage	frontend-js-general
* @version		2.0			Build 57
* @author		m157y		<public@m157y.name>
* @copyright	Copyright (c) 2011, m157y
*
*/

var frontend = {
	/**
	* Initialize frontend additions
	*/
	initialize: function()
	{
		// Initialize additional elements
		frontend.initializeDialogs();

		// Extend blocks
		frontend.extendLoginBlock();
		frontend.extendRegisterBlock();
		frontend.extendSeminarBlock();
		frontend.extendNewsBlock();
		frontend.extendTopLogoBlock();
		frontend.extendTopMenuBlock();

		// Parse url
		frontend.parseURL();
	},

	/**
	* Initialize dialogs
	*/
	initializeDialogs: function()
	{
		// Error dialog
		$('#Dialog-Error').dialog({
			autoOpen: false,
			modal: true,
			width: '50%',
			resizable: false,
			draggable: false,
			title: 'Ошибка',
			buttons: [
				{
					text: 'Закрыть',
					click: function()
					{
						// Close dialog
						$(this).dialog('close');
					}
				}
			]
		});

		// View news dialog
		$('#Dialog-ViewNews').dialog({
			autoOpen: false,
			modal: true,
			width: '90%',
			maxHeight: ($(window).height() - ($(window).height() / 10)),
			resizable: false,
			draggable: false
		});

		// Account activated dialog
		$('#Dialog-Activation').dialog({
			autoOpen: false,
			modal: true,
			width: '50%',
			resizable: false,
			draggable: false,
			buttons: [
				{
					text: 'Закрыть',
					click: function()
					{
						// Close dialog
						$(this).dialog('close');
					}
				}
			]
		});

		// Forgot password dialog
		$('#Dialog-Login-Forgot').dialog({
			autoOpen: false,
			modal: true,
			width: '50%',
			resizable: false,
			draggable: false,
			buttons: [
				{
					text: 'Напомнить',
					click: function()
					{
						// Don't do anything if email field is hidden
						if ($('#Dialog-Login-Forgot-Request').is(':hidden'))
						{
							return false;
						}

						// Hide request password form
						$('#Dialog-Login-Forgot-Request').hide();

						// Show loading message
						$('#Dialog-Login-Forgot-Loading').show();

						// Hide request password button
						$('#Dialog-Login-Forgot').next().find('.ui-dialog-buttonset').children(':first').hide();

						// Submit "forgot password" request
						$.ajax({
							type: 'POST',
							url: '/frontend/login/forgot/',
							data: {
								email: $('#Dialog-Login-Forgot-Email').val()
							},
							dataType: 'html',
							success: function(htmlContent)
							{
								// Hide loading message
								$('#Dialog-Login-Forgot-Loading').hide();

								// Replace login form with new content
								if (htmlContent !== 'error')
								{
									// Hide error message
									$('#Dialog-Login-Forgot-Error').hide();

									// Show request submited message
									$('#Dialog-Login-Forgot-Info').show();
								}
								else
								{
									// Tricky workaround for Placeholder plugin by Daniel Stocks
									$(':input[placeholder]', $('#Dialog-Login-Forgot')).placeholder();

									// Show request submited message
									$('#Dialog-Login-Forgot-Error').show();

									// Show request password form
									$('#Dialog-Login-Forgot-Request').show();

									// Show request password button
									$('#Dialog-Login-Forgot').next().find('.ui-dialog-buttonset').children(':first').show();
								}
							}
						});
					}
				},
				{
					text: 'Закрыть',
					click: function()
					{
						// Cleanup email input
						$('#Dialog-Login-Forgot-Email').val('');

						// Close dialog
						$(this).dialog('close');
					}
				}
			]
		});

		// Change password dialog
		$('#Dialog-Login-Change').dialog({
			autoOpen: false,
			modal: true,
			width: '50%',
			resizable: false,
			draggable: false,
			buttons: [
				{
					text: 'Изменить',
					click: function()
					{
						// Submit "change password" request
						$.ajax({
							type: 'POST',
							url: '/frontend/login/forgot/',
							data: {
								password: $('#Dialog-Login-Change-Password').val()
							},
							dataType: 'html',
							success: function(htmlContent)
							{
								// Replace password form with new content
								if (htmlContent !== 'error')
								{
									// Hide request password form
									$('#Dialog-Login-Change-Input').hide();

									// Show success submitted message
									$('#Dialog-Login-Change-Success').show();

									// Update buttons
									var buttons = [
										{
											text: 'Закрыть',
											click: function()
											{
												// Close dialog
												$('#Dialog-Login-Change').dialog('close');
											}
										}
									];
									$('#Dialog-Login-Change').dialog('option', 'buttons', buttons);
									delete buttons;
								}
								else
								{
									// Tricky workaround for Placeholder plugin by Daniel Stocks
									$(':input[placeholder]', $('#Dialog-Login-Change')).placeholder();

//@todo
//error parser
								}
							}
						});
					}
				},
				{
					text: 'Отмена',
					click: function()
					{
						// Cleanup email input
						$('#Dialog-Login-Change-Password').val('');

						// Close dialog
						$(this).dialog('close');
					}
				}
			]
		});
	},

	/**
	* Load page
	*/
	loadPage: function(url)
	{
		// Set default value
		url = url || '';

		// Don't do anything if url wasn't specified
		if (url === '')
		{
			return false;
		}

//@todo
//loading message

		// Load content
		$('#content').load('/frontend/' + url, frontend.extendPage);

		// Scroll to top
		$('html, body').scrollTop(0);
	},

	/**
	* Parse URL
	*/
	parseURL: function()
	{
		// Prepare variables
		var
			// Catch hash
			hash = window.location.hash.substring(1);

		// Parse hash
		switch (hash)
		{
			case 'activation_error':
			case 'activation_already':
			case 'activation_success':
				switch (hash)
				{
					case 'activation_error':
						$('#Dialog-Activation-Error').show();
					break;

					case 'activation_already':
						$('#Dialog-Activation-Already').show();
					break;

					default:
						$('#Dialog-Activation-Success').show();
					break;
				}

				$('#Dialog-Activation').dialog('open');
			break;

			case 'forgot':
				// Open dialog
				$('#Dialog-Login-Change').dialog('open');
			break;

			case 'forum':
//@todo forum
//				$('#content').html('<iframe src="http://forum.riverlines.ru/" style="width: ' + $('#content').innerWidth() + 'px; height: ' + $('#right').innerHeight() + 'px; overflow: scroll-y; border: 0;"></iframe>');
				window.location = 'http://forum.riverlines.ru/';
			break;

			case 'pages/conditions':
			case 'pages/info':
			case 'faq':
			case 'pages/contacts':
			case 'seminars':
			case 'seminars/msk':
			case 'seminars/spb':
			case 'seminars/nnov':
			case 'seminars/kazan':
			case 'seminars/samara':
			case 'seminars/rnd':
				frontend.loadPage(hash);
			break;
		}

		// CLean up
		delete
			hash;
	},

	/**
	* Extend login block
	*/
	extendLoginBlock: function()
	{
		// Extend login block loading overlay
		$('#Login-Loading').css({
			color: '#fff',
			verticalAlign: 'middle',
			textAlign: 'center'
		});

		// Extend login block
		frontend.extendLoginBlockGuest();
		frontend.extendLoginBlockUser();
	},

	/**
	* Extend login block for guests
	*/
	extendLoginBlockGuest: function()
	{
		// Don't do anything if login form doesn't exists
		if ($('#LoginForm').length === 0)
		{
			return;
		}

		// Login error dialog
		$('#Dialog-Login-Error').dialog({
			autoOpen: false,
			modal: true,
			width: '50%',
			resizable: false,
			draggable: false,
			buttons: [
				{
					text: 'Закрыть',
					click: function() {
						$(this).dialog('close');
					}
				}
			]
		});

		// Show register block
		$('#Register').parent().show();
		$('#Register').parent().next().show();

		// Login form submit action
		$('#LoginForm').submit(
			function()
			{
				// Show loading
				$('#Login').hide();
				$('#Login-Loading').css('display', 'table-cell');

				// Submit form
				$.ajax({
					type: 'POST',
					url: '/frontend/login/',
					data: {
						login: $('#LoginForm-Login').val(),
						password: $('#LoginForm-Password').val(),
						remember: $('#LoginForm-Remember').is(':checked'),
						submit: 'login'
					},
					dataType: 'html',
					success: function(htmlContent)
					{
						// Replace login form with new content
						if (htmlContent !== 'error')
						{
							// Replace login block content
							$('#Login').html(htmlContent);

							// Extend new loaded login block
							frontend.extendLoginBlockUser();
						}
						else
						{
							// Tricky workaround for Placeholder plugin by Daniel Stocks
							$(':input[placeholder]', $('#LoginForm')).placeholder();

							// Open error dialog
							$('#Dialog-Login-Error').dialog('open');
						}

						// Hide loading
						$('#Login').show();
						$('#Login-Loading').hide();
					}
				});

				// Prevent default action
				return false;
			}
		); // $('#LoginForm').submit()

		// Submit login form on "Login" button click
		$('#LoginForm-Submit').click(
			function()
			{
				// Tricky workaround for Placeholder plugin by Daniel Stocks
				$('#LoginForm-Login, #LoginForm-Password').removeClass('placeholder');
				$('#LoginForm-Password').placeholder('hide');

				// Submit login form
				$('#LoginForm').submit();

				// Prevent default action
				return false;
			}
		);

		// Submit login form on "Demo" button click
		$('#LoginForm-Demo').click(
			function()
			{
				// Set demo login and password
				$('#LoginForm-Login').val('demo@riverlines.ru');
				$('#LoginForm-Password').val('demo');

				// Click on login button
				$('#LoginForm-Submit').click();

				// Prevent default action
				return false;
			}
		);

		// Forgot password button
		$('#LoginForm-Forgot').click(
			function()
			{
				// Open dialog
				$('#Dialog-Login-Forgot').dialog('open');

				// Prevent default action
				return false;
			}
		);
	},

	/**
	* Extend login block for users
	*/
	extendLoginBlockUser: function()
	{
		// Don't do anything if login form is here
		if ($('#LoginForm').length !== 0)
		{
			return;
		}

		// Hide register block
		$('#Register').parent().hide();
		$('#Register').parent().next().hide();

		// Add user data to seminar block
		$('#seminar_company').val(window.frontendUser.userCompany).removeClass('placeholder');
		$('#seminar_manager').val(window.frontendUser.userManager).removeClass('placeholder');
		$('#seminar_phone').val(window.frontendUser.userPhone).removeClass('placeholder');
		$('#seminar_email').val(window.frontendUser.userEmail).removeClass('placeholder');

		// Handle onClick event on UserCP link
		$('#Login-UserCP').click(
			function()
			{
				window.location.assign('/backend/constructor/');
			}
		);

		// Handle onClick event on AdminCP link
		$('#Login-AdminCP').click(
			function()
			{
				window.location.assign('/backend/admin/');
			}
		);

		// Parse logout button
		$('#Login-Logout').click(
			function()
			{
				// Show loading
				$('#Login').hide();
				$('#Login-Loading').css('display', 'table-cell');

				// Logout
				$.ajax({
					type: 'POST',
					url: '/frontend/login/',
					data: {
						submit: 'logout'
					},
					dataType: 'html',
					success: function(htmlContent)
					{
						// Replace login block content
						$('#Login').html(htmlContent);

						// Extend new loaded login block
						frontend.extendLoginBlockGuest();

						// Tricky workaround for Placeholder plugin by Daniel Stocks
						$(':input[placeholder]', $('#LoginForm')).placeholder();

						// Hide loading
						$('#Login').show();
						$('#Login-Loading').hide();
//@todo
//error parser
					}
				});
			}
		);
	},

	/**
	* Extend register block
	*/
	extendRegisterBlock: function()
	{
		// Don't do anything if register form doesn't exists
		if ($('#RegisterForm').length === 0)
		{
			return;
		}

		// Tricky workaround for Placeholder plugin by Daniel Stocks
		$('#RegisterForm').find('input[placeholder]').unbind('focus blur');

		// Enable form validation
		$('#RegisterForm').validationEngine({promptPosition: 'topLeft', scroll: false});

		// Tricky workaround for Placeholder plugin by Daniel Stocks
		$('#RegisterForm').find('input[placeholder]').placeholder();

		// Register form submit action
		$('#RegisterForm')
			.submit(
				function()
				{
					// Prepare variables
					var
						data = {};

					// Show loading
					$('#Register').hide();
					$('#Register-Loading').css('text-align', 'center').show();

					// Build data
					$('#Register').find('input').each(
						function()
						{
							data[$(this).attr('name')] = $(this).val();
						}
					);

					// Submit form
					$.ajax({
						type: 'POST',
						url: '/frontend/register/',
						data: data,
						dataType: 'html',
						success: function(htmlContent)
						{
							// Replace register form with new content
							if (htmlContent === 'success')
							{
								// Replace register block content
								$('#Register').html('Благодарим Вас за интерес к проекту RiverLines!<br /><br />Пожалуйста, проверьте Ваш почтовый ящик и следуйте инструкциям из полученного письма.');
							}
							else
							{
								// Tricky workaround for Placeholder plugin by Daniel Stocks
								$(':input[placeholder]', $('#RegisterForm')).placeholder();

								// Prepare variables
								var
									errorText = '';

								// Select error message
								switch (htmlContent)
								{
									case 'captcha':
										errorText = 'Вы не верно ввели символы с картинки!';
									break;

									case 'fields_required':
										errorText = 'Не все обязательные поля заполнены!';
									break;

									case 'email_wrong':
										errorText = 'Не верный формат email!';
									break;

									case 'email_exists':
										errorText = 'Введенный email уже используется!';
									break;
								}

								// Setup error text and open error dialog
								$('#Dialog-Error-Text').html(errorText);
								$('#Dialog-Error').dialog('open');

								// Cleanup
								delete
									errorText;
							}

							// Hide register loading
							$('#Register-Loading').hide();
							$('#Register').show();
						}
					});

					// Prevent default action
					return false;
				}
			); // $('#RegisterForm').submit()

		// Submit register form on "Register" button click
		$('#RegisterForm-Submit').click(
			function()
			{
				// Tricky workaround for Placeholder plugin by Daniel Stocks
				$('input', $('#RegisterForm')).removeClass('placeholder');

				// Submit register form
				$('#RegisterForm').submit();

				// Prevent default action
				return false;
			}
		);
	},

	/**
	* Extend seminar block
	*/
	extendSeminarBlock: function()
	{
		// Don't do anything if register form doesn't exists
		if ($('#SeminarForm').length === 0)
		{
			return;
		}

		// Disable seminars block
		if ($('#seminars > option').length == 0)
		{
			$('#Seminar').html('Извините, но в ближайшее время проведение семинаров не планируется.');
			$('#Seminar').parent().hide();
			$('#Seminar').parent().next().hide();

			return;
		}

		// AJAXify seminars list links
		$('a[rel="seminars"]').click(function(event) {
			location.assign(
				window.location.protocol + '//' +
				window.location.host +
				((window.location.path) ? window.location.path : '/') +
				$(this).attr('href')
			);

			frontend.parseURL();

			// Prevent default action
			return false;
		});

		// Customize select menu
		$('#seminars').SelectCustomizer();

		// Tricky workaround for Placeholder plugin by Daniel Stocks
		$('#SeminarForm').find(':input[placeholder]').unbind('blur');

		// Enable form validation
		$('#SeminarForm').validationEngine({promptPosition: 'topLeft', scroll: false});

		// Tricky workaround for Placeholder plugin by Daniel Stocks
		$('#SeminarForm').find(':input[placeholder]').placeholder();

		// Seminar form submit action
		$('#SeminarForm')
			.submit(
				function()
				{
					// Prepare variables
					var
						data = {};

					// Show loading
					$('#Seminar').hide();
					$('#Seminar-Loading').css('text-align', 'center').show();

					// Build data
					$('#Seminar').find('input').each(
						function()
						{
							data[$(this).attr('name')] = $(this).val();
						}
					);

					// Submit form
					$.ajax({
						type: 'POST',
						url: '/frontend/seminar/',
						data: data,
						dataType: 'html',
						success: function(htmlContent)
						{
							// Replace seminar form with new content
							if (htmlContent !== 'error')
							{
								// Replace seminar block content
								$('#Seminar').html('Благодарим Вас за интерес к проекту RiverLines!<br /><br />Наши специалисты обработают Вашу заявку и свяжутся с Вами в ближайшее время.');
							}
							else
							{
								// Tricky workaround for Placeholder plugin by Daniel Stocks
								$(':input[placeholder]', $('#SeminarForm')).placeholder();
//@todo
//error parser
							}

							// Hide seminar loading
							$('#Seminar-Loading').hide();
							$('#Seminar').show();
						}
					});

					// Prevent default action
					return false;
				}
			); // $('#SeminarForm').submit()

		// Submit seminar form on "Submit" button click
		$('#SeminarForm-Submit').click(
			function()
			{
				// Tricky workaround for Placeholder plugin by Daniel Stocks
				$('input', $('#SeminarForm')).removeClass('placeholder');

				// Submit seminar form
				$('#SeminarForm').submit();

				// Prevent default action
				return false;
			}
		);
	},

	/**
	* Extend news block
	*/
	extendNewsBlock: function()
	{
		// Open dialogs with full news text
		$('a[rel="news"]').click(
			function()
			{
				// Load news text
				frontend.viewNewsDialog($(this).attr('href'))

				// Prevent default action
				return false;
			}
		);
	},

	/**
	* Extend top logo block
	*/
	extendTopLogoBlock: function()
	{
		// Top logo addition
		$('#logo').css('cursor', 'pointer').click(
			function()
			{
				window.location = window.location.protocol + '//' + window.location.host;
			}
		);
	},

	/**
	* Extend top menu block
	*/
	extendTopMenuBlock: function()
	{
		// AJAXify top menu links
		$('#TopMenu > li:not(".separator")').click(
			function()
			{
				location.assign(
					window.location.protocol + '//' +
					window.location.host +
					((window.location.path) ? window.location.path : '/') +
					$(this).attr('rel')
				);

				frontend.parseURL();

				// Prevent default action
				return false;
			}
		);
	},

	/**
	* Extend page
	*/
	extendPage: function()
	{
		// Prepare variables
		var
			$content = $('#content');

		// Set submit actions to forms
		$('form', $content).submit(function() {
			// Prepare variables
			var
				formId = this.id,
				data = {};

			// Build data
			$('input, select', $(this)).each(function() {
				data[this.name] = this.value;
			});

			// Send request
			$.ajax({
				type: 'POST',
				url: this.action,
				data: data,
				dataType: 'html',
				success: function(htmlContent)
				{
					if (formId == 'InfoForm')
					{
						if (htmlContent == 'success')
						{
							$content.html('<h3>Ваша заявка успешно отправлена</h3>');
						}
					}
				}
			});

			// Cleanup
			delete
				formId,
				data;

			// Prevent default action
			return false;
		});

		// Celanup
		delete
			$content;
	},

	/**
	* Open news dialog
	*/
	viewNewsDialog: function(url)
	{
		// Hide news content and error text
		$('#Dialog-ViewNews-Content').hide();
		$('#Dialog-ViewNews-Error').hide();

		// Show loading text
		$('#Dialog-ViewNews-Loading').show();

		// Set dialog title
		$('#Dialog-ViewNews').dialog('option', 'title', 'Идет загрузка...');

		// Open dialog
		$('#Dialog-ViewNews').dialog('open');

		// Reposition dialog
		$('#Dialog-ViewNews').dialog('option', 'position', 'center');

		// Load news text
		$.ajax({
			type: 'GET',
			url: url,
			dataType: 'html',
			success: function(htmlContent)
			{
				// Replace login form with new content
				if (htmlContent !== 'error')
				{
					// Set news content
					$('#Dialog-ViewNews-Content').html(htmlContent);

					// Set dialog title
					$('#Dialog-ViewNews').dialog('option', 'title', $('#NewsTitle').html());

					// Remove block with news title
					$('#NewsTitle').remove();

					// Hide loading text
					$('#Dialog-ViewNews-Loading').hide();

					// Show news content
					$('#Dialog-ViewNews-Content').show();
				}
				else
				{
					// Hide news content and loading text
					$('#Dialog-ViewNews-Content').hide();
					$('#Dialog-ViewNews-Loading').hide();

					// Show error message
					$('#Dialog-ViewNews-Error').show();
				}

				// Reposition dialog
				$('#Dialog-ViewNews').dialog('option', 'position', 'center');
			}
		});
	}
};

$(function(){
	// Initialize front end additions
	frontend.initialize();

	$(".clickable").click(function(){
		// Hide validation error bubbles
		$(this).parents('.greyblock').find('form').validationEngine('hideAll');

		$(this).parents(".greyblock").find(".hidden").slideToggle();
	});

	$('.button').button();
	$('#seminars_iconselect').html("<div class='placeholder'>Выберите семинар</div>");

	// Login state updater
	window.setInterval(
		function()
		{
			$('#LoginState').attr('src', '/LoginState/?' + (new Date).getTime());
		},
		900000 // 900000 = 15 minutes
	);

	// CAPTCHA refresh
	$('.refresh').click(
		function()
		{
			var date = new Date();
			$(this).parent().parent().parent().find('img.captcha').each(
				function()
				{
					$(this).attr('src', '/frontend/captcha/' + $(this).attr('rel') + '/?rnd=' + Math.round((new Date()).getTime() / 1000));
				}
			);
			delete date;

			return false;
		}
	);


/* Напоминалка пароля */
	var $dialog = $('<div></div>')
		.html('Email: <input size="25" type=text name="femail" class="text ui-widget-content ui-corner-all">')
		.dialog({
			autoOpen: false,
			modal: true,
			title: 'Забыли пароль?',
			buttons: [
				{
					text: "Напомнить",
					click: function() { $(this).dialog("close"); }
				}
			]
		});
})

