$(function() {

	/*****
	 * Global form validations
	 *****/

	// Refer a Colleague (on sidebar navigation)
	$("#tellafriend_form").validate({
		rules: {
			name: "required",
			from: {required: true, email: true },
			to: {required: true, email: true },
			subject: "required"
		},
		messages: {
			name: "Please enter your name",
			from: {required: "Please enter your email address", email: "Please enter a VALID email address"},
			to: {required: "Please enter your colleague's email address", email: "Please enter a VALID email address"},
			subject: "Please enter a subject line"
		}
	});
	
	$('#tellafriend_form').submit(function(){
		// Only track events if form is valid
		isvalid = $("#tellafriend_form").validate().form();
		if (!isvalid){
			return false;
		}
		
		pageTracker._trackEvent('Forms', 'Referred a Colleague');
	});
	
	// Register for Updates (on sidebar navigation)
	$("#registerUpdates").validate({
		rules: {
			ff_f_name: "required",
			ff_l_name: "required",
			email: {required: true, email: true }
		},
		messages: {
			ff_f_name: "Please enter your first name",
			ff_l_name: "Please enter your last name",
			email: {required: "Please enter your email address", email: "Please enter a VALID email address"}
		}
	});
	
	$("#registerUpdates").submit(function(){
		// Only track events if form is valid
		isvalid = $("#registerUpdates").validate().form();
		if (!isvalid){
			return false;
		}
		
		pageTracker._trackEvent('Forms', 'Subscribed');
		
		lower_email($('#registerUpdates input[name=email]'));
		
		$first = $('#registerUpdates input[name=ff_f_name]');
		$last = $('#registerUpdates input[name=ff_l_name]');
		niceify_name($first);
		niceify_name($last);
		
		$('#registerUpdates input[name=salu]').val($first.val() + ' ' + $last.val());
		return true;
	});
	
	// Contact Us (on sidebar and footer)
	$("#contact_form").validate({
		rules: {
			recipients: "required",
			ff_f_name: "required",
			ff_l_name: "required",
			ff_title: "required",
			ff_facility: "required",
			ff_address1: "required",
			ff_city: "required",
			ff_state: "required",
			ff_country: "required",
			res: "required",
			ff_work_phone1: {required: true, phoneUS: true},
			ff_email_address: {required: true, email: true},
			ff_zip: {required: true, digits: true},
			ff_notes: "required"
		},
		messages: {
			recipients: "Please select a recipient",
			ff_f_name: "Please enter your first name",
			ff_l_name: "Please enter your last name",
			ff_title: "Please enter your title name",
			ff_facility: "Please enter your facility name",
			ff_address1: "Please enter your address",
			ff_city: "Please enter your city",
			ff_state: "Please enter your state",
			ff_country: "Please enter your country",
			res: "Please select yes or no",
			ff_work_phone1: {required: "Please enter your phone number", phoneUS: "Please enter a valid phone number"},
			ff_email_address: {required: "Please enter your email address", email: "Please enter a VALID email address (e.g. name@company.com)"},
			ff_zip: {required:"Please enter your zip code", digits: "Please enter a valid zip code"},
			ff_notes: "Please enter a message"
		}
	});
	
	// Contact Us special handling of medical info (US vs. non-US)
	if ($("#contact_form input[name=recipients]:radio").length
		&& $("#contact_form input[name=res]:radio").length
		&& $("#contact_form select[name=ff_country]").length){
		$("#contact_form input[name=recipients]:radio,#contact_form input[name=res]:radio,#contact_form select[name=ff_country]").change(function(){
			$recipient = $("#contact_form input[name=recipients]:radio:checked");
			resident = $("#contact_form input[name=res]:radio:checked").val();
			country = $("#contact_form select[name=ff_country]").val();
			if ($recipient.val() !== undefined && resident !== undefined && country !== undefined
				&& $recipient.attr("data-us-email") !== undefined && $recipient.attr("data-non-us-email") !== undefined)
			{
				
				if (resident == 'Yes' && country == 'United States of America') // US resident
					$recipient.val($recipient.attr("data-us-email"));
				else // Non-US resident
					$recipient.val($recipient.attr("data-non-us-email"));
			}
		});
	}
	
	/*****
	 * Detect outside links and lightbox them w/ disclaimer
	 *****/

	$('a').filter(function() {
		return this.hostname && this.hostname !== location.hostname;
	}).addClass('external');

	$("a.external:not(.except)").click(function(){
		var dest = $(this).attr('href');
		var title = $(this).attr('title');
		$("#replace_me").attr('href',dest);
		$("#replace_me").attr('title',title);
		$("#disclaimer").overlay({api:true}).load();
		return false;
	});
	
	$("a#replace_me").click(function(){
		$("#studies-disclaimer").overlay().close();
		$("#disclaimer").overlay().close();
	});

	$('a.get_study').click(function(){
		$("#studies-disclaimer").overlay({api:true}).load();
		return false;
	});
	
	/*****
	 * Setup in-field labels for search form
	 *****/
	
	if($.browser.msie && parseInt($.browser.version) < 7.0){

	}else{
		$("#search :text").labelify();
	}
	
	/*****
	 * Track search queries
	 *****/

	if ($('#search form').length){
		$('#search form').submit(function(){
			$keywords = $(this).children('input[name=keywords]');
			if ($keywords.val() == ''){
				return false;
			}else{
				pageTracker._trackEvent('Searches', $keywords.val());
				return true;
			}
		});
	}
	
	/*****
	 * Bind Overlays
	 *****/
	
	$("img[rel]").overlay();
	$("a[rel]").overlay();
	
	/*****
	 * Superscript Tooltips
	 *****/
	
    $(".main span[title]").tooltip({
		tip: '#tooltip',
		offset: [0, 150]
	}).dynamic({
		bottom: {direction: 'down'}
	});
});

// fix lazy typers so that names are not all UPPER or lower case
var niceify_name = function($field){
	// get each name "mary-jo beth"
	var sp = $field.val().split(' ');
	for (var i = 0; i < sp.length; i++){
		var ds = sp[i].split('-');
		for (var j = 0; j < ds.length; j++){
			if (ds[j].length > 0 && (ds[j] == ds[j].toLowerCase() || ds[j] == ds[j].toUpperCase())){
				ds[j] = ds[j].substr(0,1).toUpperCase() + ds[j].substr(1).toLowerCase();
			}
		}
		sp[i] = ds.join('-');
	}
	$field.val(sp.join(' '));
}

var lower_email = function($field){
	// make email address all lower
	var email = $field.val();
	$field.val(email.toLowerCase());
}

var set_text; // conditionally defined function used by flash map
$(function() {

	/*****
	 * CCBM Map
	 *****/

	if ($('#the-map').length){
		var $baseHiddenURL = "clinician-resources/inomax-hospital-users-dev/hospitals";
		$('#geofinder_form .hiddenFields input[name="RP"]').attr('value',$baseHiddenURL+'/'+$('#geofinder_form #state').attr('value'));
		$('#geofinder_form #state').change(function(){
			var $hiddenURL = $baseHiddenURL+'/'+$(this).attr('value');
			$('#geofinder_form .hiddenFields input[name="RP"]').attr('value',$hiddenURL);
		});
		
		var isLoaded = false
		loadListContainers = function(){
			var $listContainer = $('#main_text');
			var $rightCol = $('<div style="position: relative; float: left; width: 50%;" id="rightCol"><h2 style="width: 225px; margin-left: -60px; background: none repeat scroll 0% 0% rgb(143, 14, 29); padding: 10px; color: rgb(255, 255, 255); border-top: 3px solid rgb(34, 34, 34);">Local Contacts</h2><div class="listContent"></div></div>');
			
			$listContainer.append($rightCol).append('<br class="clear"/>');
			$('.main,#geo-search-form').css({'position':'relative','float':'left'});
		}
		
		set_text = function(div_name){
			if(!isLoaded){
				isLoaded = true;
				loadListContainers();
			}
			var $listContainer = $('#main_text');
			var $hospitalContent = $('div#'+div_name+' div.hospital_list').html();
			var $ccbmsContent = $('div#'+div_name+' div.ccbm_list').html();
			
			$listContainer.find('#leftCol div.listContent').html($hospitalContent).end().find('#rightCol div.listContent').html($ccbmsContent);
			$('#leftCol div.listContent,#rightCol div.listContent').find('ul:odd').addClass('altListing');
			
		}

		show = function(url){
			newwin =top.window.open(url, '_blank', 'toolbar=no,location=no,status=no,menubar=no,resizable=no,directories=no,scrollbars=no,width=620,height=450');
		}

		MyF = function(partN){
			window.document.usa_locator_demo.SetVariable("perem1", "state" + partN);
		}
	}
});

$(function() {
	
	/*****
	 * Landing Page form validations
	 *****/
	
	// Golombek and Gonzalez now redirect to clinical studies
	// New landing pages have separate design/js
	// only add validation here for pages which use the sites design
	
	/*****
	 * Custom page behavior
	 *****/
	
	// Shared between Pre/Post Surveys
	
	// steals validation rules from JS version
	// and uses them in the jQuery version
	survey_rsv_validate = function(form, customValidation)
	{
		var formSubmit = form.attr('onsubmit');
		var m = /rules_survey_[0-9]+/.exec(formSubmit);
		if (m != null && m.length){
			var rules = window[m[0]];
			if ($.isArray(rules) && rules.length)
			{
				// remove old JS onsubmit
				// and bind jQuery in its place
				form.attr('onsubmit', '');
				form.RSV({
					customErrorHandler: function(f, errorInfo){
						// hide previous errors
						form.find('label.error').hide();
						
						// custom validation tests
						passedCustom = customValidation(form);
						
						if (passedCustom && errorInfo.length == 0)
							return true; // no validation errors, submit the form
						
						for (var i=0; i<errorInfo.length; i++){
							if (i == 0){
								errorInfo[i][0].focus();
							}
							if (errorInfo[i][0].name === undefined){
								var name = errorInfo[i][0][0].name
							}else{
								var name = errorInfo[i][0].name;
							}
							form.find('label[for='+name+']').show();
						}
						
						return false; // always return false! Otherwise the form will be submitted
					},
					rules: rules,
					displayType: 'display-html'
				});
			}
		}
	}
	
	// other shared survey functionality
	if ($('form.survey').length){
		
		// Remove non-numeric values from number fields
		$('form.survey input.numeric').keyup(function(){
			var txt = $(this).attr('value');
			if (txt != ''){
				var last = txt.charAt(txt.length-1);
				if (isNaN(parseInt(last))){
					$(this).attr('value', txt.substr(0, txt.length-1));
				}
			}
		});
		
		// Hide/Show other textbox for survey form
		var $otherfield = $('form.survey input.other_text');
		$otherfield.hide();
		$('form.survey input[name=learn]').click(function(){
			if ($('form.survey input[name=learn]:checked').attr('id')){
				$otherfield.fadeIn();
			}else{
				$otherfield.fadeOut().val('');
			}
		});
		
		// Prevent tie-rankings
		var prevRanks = new Object;
		$('div.ranking select[name^=rank]').change(function(){
			var thisVal = $(this).val();
			var name = $(this)[0].name;
			if (prevRanks[name] !== undefined && prevRanks[name] != ''){
				// re-enable the previous option
				oldVal = prevRanks[name];
				$("div.ranking select[name^=rank]").each(function(){
					$(this).find("option[value='"+oldVal+"']").removeAttr('disabled');
				});
			}
			if (thisVal != ''){
				// disable the item
				$("div.ranking select[name^=rank][name!='"+name+"']").each(function(){
					$(this).find("option[value='"+thisVal+"']").attr('disabled', 'disabled');
				});
			}
			prevRanks[name] = thisVal;
		});
	}
	
	// Pre-survey validation
	if ($('form#pre_survey')){
		// form validation
		survey_rsv_validate($('form#pre_survey'), function(form){
			// hide previous error
			if (form.find('input[name=learn]:checked').attr('id')){
				if (form.find('input.other_text').val() == ''){
					// show error
					$('label[for=learn_other]').show();
					return false;
				}
			}
			return true;
		});
	}
	
	if ($('form#post_survey')){
		
		// Compare questions 1 and question 2
		// if they don't match display a textarea for user to explain why
		$('select[name=oi_index_consider],select[name=oi_index_initiate]').change(function(){
			var $q1Val = $('select[name=oi_index_consider]').val();
			var $q2Val = $('select[name=oi_index_initiate]').val();
			
			if ($q1Val != $q2Val && $q1Val != '' && $q2Val != ''){
				$('#oi-difference').slideDown().find('textarea').val('');
			}else{
				$('#oi-difference').slideUp().find('textarea').val('');
			}
		});
		
		// form validation
		survey_rsv_validate($('form#post_survey'), function(form){
			// hide previous error
			var ret = true;
			if (form.find('input[name=learn]:checked').attr('id')){
				if (form.find('input.other_text').val() == ''){
					// show error
					$('label[for=learn_other]').show();
					ret = false;
				}
			}
			if ($('#oi-difference').is(':visible') && form.find('textarea[name=difference]').val() == ''){
				$('label[for=difference]').show();
				ret = false;
			}
			if ($('#survey-email').is(':visible') && form.find('input[name=survey_email]').val() == ''){
				$('label[for=survey_email]').show();
				ret = false;
			}
			return ret;
		});
	}
	
	// Reimbursement Forms
	if ($('#reimbursement_info').length){
		var formFields = ['ff_prefix','ff_f_name','ff_l_name','ff_title','ff_location_type','ff_work_phone1','ff_email_address'];
		$('.submit').click(function(){
			for (i=0; i < formFields.length; i++){
				jaaulde.utils.cookies.set(formFields[i],$('#'+formFields[i]).val());
			}
		});
		
		$("#reimbursement_info").validate({
			invalidHandler: function(form, validator) {
				//$(":text").labelify();
			},
			rules: {
				ff_prefix: "required",
				ff_f_name: "required",
				ff_l_name: "required",
				ff_title: "required",
				ff_location_type: "required",
				ff_work_phone1: {required: true, digits: true, minlength: 10, maxlength: 10},
				ff_email_address: {required: true, email: true}
			},
			messages: {
				ff_prefix: "Please enter your prefix",
				ff_f_name: "Please enter your first name",
				ff_l_name: "Please enter your last name",
				ff_title: "Please enter your title name",
				ff_location_type: "Please enter your institution",
				ff_work_phone1: {required: "Please enter your phone number (e.g. xxxxxxxxxx)", digits: "Please enter a valid phone number (e.g. xxxxxxxxxx)", minlength: "Please enter a valid phone number (e.g. xxxxxxxxxx)", maxlength: "Please enter a valid phone number (e.g. xxxxxxxxxx)"},
				ff_email_address: {required: "Please enter your email address", email: "Please enter a VALID email address (e.g. name@company.com)"}
			}
		});
	}
	if($('#reimbursement_follow_up').length){
		var $followUpRecipients = [];
		
		var formFields = ['ff_prefix','ff_f_name','ff_l_name','ff_title','ff_location_type','ff_work_phone1','ff_email_address'];
		
		for (i=0; i < formFields.length; i++){
			var $cookieValue = jaaulde.utils.cookies.get(formFields[i]);
			$('input#'+formFields[i]).val($cookieValue);
		}

		$('.submit').click(function(){
			var followUpRecipients = ['sean.gill@ikaria.com'];
			$('#reimbursement_follow_up :checked:checkbox').each(function(){
				followUpRecipients.push($(this).attr('data-email'));
			});
			$('#reimbursement_follow_up input[name=recipients]').val(followUpRecipients.join(','));
		});
		
		$("#reimbursement_follow_up").validate({
			rules: {
				'follow_up[]': {required: true}
			},
			messages: {
				'follow_up[]': {required: ""}
			},
			invalidHandler: function(form, validator) {
		      var errors = validator.numberOfInvalids();
		      if (errors) {
		        var message = errors == 1
		   	          ? 'Please check at least one of the boxes below.'
		   	          : 'The fields highlighted in red are required.';
		   	        $("div.errors").html(message).fadeIn('slow');
					if($.browser.msie && parseInt($.browser.version) < 8.0){
						$('#reimbursement_follow_up .checkboxes div:first span').css({'top':'0px'});
					}
		      } else {
		        $("div.errors").fadeOut('fast');
		      }
		    }
		});
	}
	
	

	// Professional Tips and Tools
	if ($('.tips-tools').length){
		
		$('.expand-tip').click(function(){
			$(this).next('.expanded-form').slideToggle();
			return false
		});
		$('.hide-tips-form').click(function(){
			$(this).parent().slideUp();
			return false
		});
		
		/**********************
		* NIV GUIDE
		**********************/
		
		$('form.tips-tools-form').each(function(){
			var dom_id ='#' + $(this).attr('id');
			if ($(dom_id).length){
				$(dom_id).validate();
				$(dom_id).submit(function(){
					// Only track events if form is valid
					isvalid = $(dom_id).validate().form();
					if (!isvalid){
						console.log('invalid!')
						return false;
					}

					// disable submit button to prevent double submits
					$(dom_id + " :submit").each(function(){
						$(this).attr('disabled', 'disabled').addClass('disabled');
					});

					//*******pageTracker._trackEvent('Forms', 'Requested NIV Guide');

					// make email address all lower
					var $field = $(dom_id + ' input[name=ff_email_address]');
					var email = $field.val();
					$field.val(email.toLowerCase());

					// Determine if user subscribed
					if ($(dom_id + ' input[name=ff_mail_ok]:checked').length){
						//*******pageTracker._trackEvent('Forms', 'Subscribed');
						$(dom_id + ' input[name=recipients]').val($(dom_id + ' input[name=ff_email_address]').val());
					}else{
						$(dom_id + ' input[name=recipients]').val("test@example.com");
					}

					// fix lazy typers so that names are not all UPPER or lower case
					var niceify_name = function($field){
						// get each name "mary-jo beth"
						var sp = $field.val().split(' ');
						for (var i = 0; i < sp.length; i++){
							var ds = sp[i].split('-');
							for (var j = 0; j < ds.length; j++){
								if (ds[j].length > 0 && (ds[j] == ds[j].toLowerCase() || ds[j] == ds[j].toUpperCase())){
									ds[j] = ds[j].substr(0,1).toUpperCase() + ds[j].substr(1).toLowerCase();
								}
							}
							sp[i] = ds.join('-');
						}
						$field.val(sp.join(' '));
					}

					var $lastname = $(dom_id + ' input[name=ff_l_name]');

					niceify_name($(dom_id + ' input[name=ff_f_name]'));
					niceify_name($lastname);

					var prefix = $(dom_id + ' select[name=ff_prefix]').val();

					$(dom_id + ' input[name=salu]').val(prefix + ' ' + $lastname.val());
				});
			}
		});
	}
});
