/**
 * Request creation JS
 *
 * @author Gabriel Lemonde-Labrecque
 * @copyright 2010-2011, SchoolSuccess inc.
 */
var $opened = false;

$(document).ready(function() {
	var address_required;
	var $subject = $('#request_subject');
	var $subjectId = $('#request_subject_id');
	var $categoryId = $('#request_category_id');
	var $request_zip = $('#request_zip');
	var $request_email = $('#request_email');
	var $request_phone = $('#request_phone');
	var $request_description = $('#request_description');
	var $formCreateRequest = $('#formCreateRequest');
	
	
	$subject.defaultText(TC.lang.get('defaultTextRequestSubject'));
	$request_zip.defaultText(TC.lang.get('defaultTextRequestZip'));
	$request_email.defaultText(TC.lang.get('defaultTextRequestEmail'));
	$request_phone.defaultText(TC.lang.get('defaultTextPhone'));
	$request_description.defaultText(TC.lang.get('defaultTextRequestDescription'));
	
	
	$formCreateRequest.find('input, textarea').each(function() {
		var $this = $(this);
		
		$this.focustooltip({ text: $this.attr('data-tooltip'), left: $request_description.offset().left, top: function() { return $this.offset().top + $this.outerHeight(); } });
		
// 		$this.focusin(function() {
// 			$tooltip.show().css({ 'position': 'absolute', 'left': $formCreateRequest.offset().left + 10, 'top': $this.offset().top + $this.outerHeight() }).html(tooltip);
// 		}).focusout(function() {
// 			$tooltip.hide();
// 		}).keydown(function() {
// 			$tooltip.hide();
// 		});
		
	});
	
	$formCreateRequest.validate({
		rules: {
			subject: {
				required: true
			},
			description: {
				required: true
			},
			address: {
				required: true
			},
			email: {
				required: function() {
					if ($('#request_phone').val() == TC.lang.get('defaultTextPhone'))
						return true;
					
					return false;
				}
			}
		},
		messages: {
			subject: {
				required: TC.lang.get('formValidationSubjectRequired')
			},
			description: {
				required: TC.lang.get('formValidationDescriptionRequired')
			},
			address: {
				required: TC.lang.get('formValidationZipcodeRequired')
			},
			email: {
				required: TC.lang.get('formValidationEmailRequired'),
				email: TC.lang.get('formValidationEmailInvalid')
			}
		},
		submitHandler: function(form) {
			form.submit();
			$('.loading_results_partial').show();
		}
	});
	
	$('#requestButton').click(function() {
		if ($('#formCreateRequest').prop('action')) {
			try {
				var pageTracker = _gat._getTrackerByName();
				
				if ($('.request-tutor-bar.generic').length)
				{
					pageTracker._trackPageview('/request/publish_request/adwords');
				}
				else
				{
					pageTracker._trackPageview('/request/publish_request/homepage');
				}
			} catch(err) {}
			
			//$('.request-tutor-bar').after('<div style="width:100%;height:45px;background:#000;margin:0px;margin-top:-5px;"><div class="item center">Processing ...</div></div>');
			
			$formCreateRequest.submit();
		}
		else {
			$('#postdisabled').show();
		}
	});
	
	if ($('#request_select').length) {
		$('#request_select').change(function() {
			if ($(this).val() == 'phone') {
				$('#request_phone').show();
				$('#request_email').hide();
			}
			else if ($(this).val() == 'email') {
				$('#request_email').show();
				$('#request_phone').hide();
			}
			else {
				$('#request_email').show();
				$('#request_phone').show();
			}
		});
	}
	
	if($('#company').length)
		$('#company').hide();
	
	$('#expandButton').click(function() {
		//$('#cid').val($('#userId').val());
		
		$('label.error').remove();
		
		var desc = false, email = false, phone = false;
		var validated = desc && email && phone;
		
		if ($('#request_description').val() == TC.lang.get('defaultTextRequestDescription')) {
			$('#request_description').after('<label class="error" for="description">' + TC.lang.get('formValidationDescriptionRequired') + '</label>');
		}
		else {
			desc = true;
		}
		
		if ($('#request_phone').css('display') != 'none') {
			if ($('#request_phone').val() == TC.lang.get('defaultTextPhone')) {
				$('#request_phone').after('<label class="error" for="description">' + TC.lang.get('formValidationPhoneRequired') + '</label>');
			}
			else {
				phone = true;
			}
		}
		else {
			phone = true;
		}
		
		if ($('#request_email').css('display') != 'none') {
			if ($('#request_email').val() == TC.lang.get('defaultTextRequestEmail')) {
				$('#request_email').after('<label class="error" for="description">' + TC.lang.get('formValidationEmailRequired') + '</label>');
			}
			else {
				email = true;
			}
		}
		else {
			email = true;
		}
		
		validated = desc && email && phone;
		
		if (validated) {
			$('.loading_results_partial').show();
			$('#phaseOne').hide();
			
			if ($('#warningMsg').length == 0) {
				$('#expandButton').attr('disabled', 'disabled');
			}
			
			var phone = ($('#request_phone').val() == TC.lang.get('defaultTextPhone')) ? '' : $('#request_phone').val();
			var email = ($('#request_email').val() == TC.lang.get('defaultTextRequestEmail')) ? '' : $('#request_email').val();
			var desc = $('#request_description').val();
			var subject = $('#request_subject').val();
			var address = $('#request_zip').val();
			var cid = $('#cid').val();
			
			function appendWarning() {
				$('#header').after('<div align="center" style="width: 900px; margin:30px auto 0 auto;font-size:20px;font-weight:bold;" id="warningMsg"></div>');
			}
			
			function showCompany() {
				var txt = 'We found 1 result for SAT Prep in New York. Your request was sent to them and they will contact you shortly.';
				appendWarning();
				
				if ($('#userId').val() == '3165')
					txt = TC.lang.get('adwordsSpecialSS');
				
				$('#warningMsg').text(txt);
				$('#company').show();
				$('.loading_results_partial').hide();
			}
			
			function showCompanyError() {
				$('#header').after('<div align="center" style="margin:10px;font-size:15px;" id="warningMsg">We encounter an error in processing your request. However, we found 1 result for SAT Prep in New York. You may be able to directly contact the tutor by yourself</div>');
				$('#company').show();
				$('.loading_results_partial').hide();
			}
			
			TC.ajax.send(
				'/request/adrequest',
				'POST',
				'phone=' + phone + '&email=' + email+ '&desc=' + desc + '&subject=' + subject + '&address=' + address + '&cid=' + cid,
				'json',
				function(response) {
					if (response.code == 'ok') {
						setTimeout(showCompany, 2000);
					}
					else {
						setTimeout(showCompanyError, 2000);
					}
				}
			);
			
			$('.containerSearch').removeClass('site');
			$('.containerSearch').removeClass('index');
			$('.containerSearch').addClass('public');
		}
	});
	
	function formatSubjectOrCategory(subjectOrCategory) {
		var subjectString = subjectOrCategory.name;
		
		if (subjectOrCategory.level_name)
			subjectString += ' <div class="category">(' + subjectOrCategory.level_name + ')</div>';
		
		return subjectString;
	}
	
	var autocompleteOptions = {
		delay: 200,
		minChars: 1,
		matchSubset: false,
		selectFirst: false,
		width: '325px',
		formatItem: function(item) {
			var subjectOrCategory = TC.string.jsonDecode(item);
			
			return formatSubjectOrCategory(subjectOrCategory);
		}
	};
	
	var autocompleteResult = function(event, data, formatted) {
		if ( ! data)
			return;
		
		var subjectOrCategory = TC.string.jsonDecode(data);

		if (subjectOrCategory.level_name)
			$subject.val(subjectOrCategory.name + ' (' + subjectOrCategory.level_name + ')');
		else
			$subject.val(subjectOrCategory.name);
		
		if (subjectOrCategory.type == 'subject') {
			$subjectId.val(subjectOrCategory.id);
			$categoryId.val('');
		}
		else if (subjectOrCategory.type == 'category') {
			$subjectId.val('');
			$categoryId.val(subjectOrCategory.id);
		}
	};
	
	$subject.keydown(function(event) {
		if ( ! (
			event.which == 9 || // tab
			event.which == 13 || // enter
			event.which == 16 || // shift
			event.which == 17 || // control
			event.which == 18 || // alt
			event.which == 20 || // caps lock
			event.which == 33 || // page up
			event.which == 34 || // page down
			event.which == 35 || // end
			event.which == 36 || // home
			event.which == 45 || // insert
			event.which == 91 || // left windows key
			event.which == 92 || // right windows key
			event.which == 93 || // windows menu key
			event.which == 224 || // Apple key
			event.which == 144 || // num lock
			(event.which >= 37 && event.which <= 40) || // arrow keys
			(event.which >= 37 && event.which <= 40) // F1 to F12 keys
			)) {
			$subjectId.val('');
			$categoryId.val('');
		}
	});
	
	$subject.autocomplete('/autocomplete/subjects/', autocompleteOptions).result(autocompleteResult);
});

