/* http://www.nycgovparks.org/web/fitness/js/getfitnyc.js
Modified: 12.15.10
Modified by: leigh.mcconnell // added add to calendar functionality
-----------------------------------*/

$(document).ready(function(){
   var mobile_url = document.location.href.replace(/befitnyc/i,"befitnyc/mobile");
   $("#feedback_module").before('<div style="margin: 30px 10px 0; border-top: 1px dotted #DADADA; padding-top: 20px;"><a href="'+mobile_url+'">View Mobile Version</a></div>');
   
   //Changing borough or zip zeroes out the other
   $("#boro").change(function(){
      $("#zip").val("[Zip]");
   });
   $("#zip").change(function(){
      $("#boro").val("0");
   });
	
   // focusing on zip should get rid of "Zip Code", unfocusing with empty should put it back in
   $("#zip").focus(function(){
      if ($(this).val() == "[Zip]") {
         $(this).val("");
      }
      $(this).select();
   }).blur(function(){
      if ($(this).val() == "") {
         $(this).val("[Zip]");
      }
   });
	
   //date picker
   $(".date_field").datepicker({
      dateFormat: 'm/d/yy',
      changeMonth: true,
      changeYear: true,
      onSelect: function(dateText, inst)
               {
                  var parent_form = $(this).parents("#filter_form");
                  if(parent_form.get().length > 0)
                     parent_form.submit();
               }
   });
	
   // hide program details in facilities list
   $(".getfit_facility_prg_hidden").hide();
   $(".getfit_facility_prg_moreinfo_close").text("Close");
   $(".getfit_facility_prg_moreinfo").toggle(function(){
      var arr = $(this).attr("id").split("_");
      var id = arr[arr.length - 1];
      $("#getfit_facility_prg_hidden_" + id).show();
   }, function(){
      var arr = $(this).attr("id").split("_");
      var id = arr[arr.length - 1];
      $("#getfit_facility_prg_hidden_" + id).hide();
   });
   $(".getfit_facility_prg_moreinfo_close").click(function(){
      var arr = $(this).attr("id").split("_");
      var id = arr[arr.length - 1];
      $("#getfit_facility_prg_hidden_" + id).hide();
      return false;
   });
	
	// hide site details in programs list
	$(".getfit_prg_facility_hidden").hide();
	$(".getfit_prg_more_info").text("More site info");
	$(".getfit_prg_more_info_close").text("Close");
	$(".getfit_prg_more_info").click(function(){
		var arr = $(this).attr("id").split("_");
		var id = arr[arr.length - 1];
		$("#getfit_prg_facility_hidden__" + id).show();
		$("#getfit_prg_more_info__" + id).hide();
		return false;
	});
	$(".getfit_prg_more_info_close").click(function(){
		var arr = $(this).attr("id").split("_");
		var id = arr[arr.length - 1];
		$("#getfit_prg_facility_hidden__" + id).hide();
		$("#getfit_prg_more_info__" + id).show();
		return false;
	});
	
	// keep you in leagues/programs when you switch pages there
	if(typeof change_tab == 'function')
		change_tab($("#getfit_selected_tab").val());
	
	//hide/show add to calendar links
	$('.cal_service_links ul').css({'position' : 'absolute'});

	$('.cal_service_links ul').hide();
    $('.add_to_cal_head a').attr("href", "#");
    $('.add_to_cal_head').one('click', openMenu);
    $('.cal_subscribe').css({
        position: "absolute",
        left: "175px",
        top: "2px"
    });
    function openMenu(e) {
        var button = $(this);
        var menu = $(this).parent().children("ul");
        menu.click(function (e) {
            e.stopPropagation();
        }).show('fast', function () {
            $('.add_to_cal_head').one('click', {
                button: button,
                menu: menu,
                returnval: false
            }, closeMenu);
            $(document).one('click', {
                button: button,
                menu: menu,
                returnval: true
            }, closeMenu);
        });
        return false;
    }
    function closeMenu(e) {
        e.data.menu.hide('slow');
        e.data.button.one('click', openMenu);
        return e.data.returnval;
    }
	
	// form validation
	$("#befit_submission").submit(function() {
		$(".required").remove();
		var false_check = 0;
		$(".req").each(function () {
			if (!$(this).val()) {
				$(this).after('<span class="required">&nbsp;Required</span>');
				false_check = 1;
				this.focus();
				return false;
			}
		});
		if(false_check == 0)
		{
			var filter = /^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|AERO|ARPA|ASIA|BIZ|CAT|COM|COOP|EDU|GOV|INFO|INT|JOBS|MIL|MOBI|MUSEUM|NAME|NET|ORG|PRO|TEL|TRAVEL)$/i;
			$(".val_email").each(function(){
				if (!filter.test($(this).val())){
					$(this).after('<span class="required">&nbsp;Email is not valid</span>');
					false_check = 1;
					this.focus();
					return false;
				}
			});
		}
		if(false_check == 0)
		{
			var email="";
			$(".nlemail").each(function(){
				if(email.length==0) email=$(this).val();
				else if ($(this).val()!=email) {
					$(this).after('<span class="required">&nbsp;Email does not match</span>');
					false_check = 1;
					this.focus();
					return false;
				}
			});
		}
		return !false_check;
	});
	/*
	//remove external links for presentation
		$("a[@href*=http://]").click(function() {
			return false;
   		});
		
		$("a[@href*=http://]").each(function() {
			$(this).replaceWith($(this).html());
   		});
		
		$("map").each(function() {
			$(this).remove();
   		});
   		*/
		/*Hide/Show more information on programs/calsses tab*/
		$('div.more_program_info').hide();
	$('p.more_program_info_link').css('color','#457E00').css('textDecoration','underline').css('cursor','pointer');
	$('p.more_program_info_link').hover(function() {
		$(this).css('color','#036');
	}, function() {
		$(this).css('color','#457E00');
	});
	$('p.less_program_info_link').css('color','#457E00').css('textDecoration','underline').css('cursor','pointer');
	$('p.less_program_info_link').hover(function() {
		$(this).css('color','#036');
	}, function() {
		$(this).css('color','#457E00');
	});
	$('p.more_program_info_link').click(function() {
		$(this).next('div').slideToggle()
		.siblings('div.more_program_info:visible').slideUp('fast');	
		$(this).hide();
	});
	$('p.less_program_info_link').click(function() {
		$(this).parent('div.more_program_info').slideUp();	
		$('p.more_program_info_link').show();
	});


   $(".r_handle").each(function(){
      handle_id = $(this).attr("id");
      obj_name = handle_id.substring(0,handle_id.indexOf("_title"));
      obj_name += "_group";
      $("#"+obj_name).show();
      $(this).data("obj_name",obj_name);
      $(this).click(function(){
         handle_ = $(this);
         $("#"+$(this).data("obj_name")).toggle('200',function(){
            if($(this).is(":hidden"))
               handle_.removeClass("r_handle_less");
            else
               handle_.addClass("r_handle_less");
         });
      });
   });
	
   /** Show applicable fitlers based on tab selection and show facilities tab if programs tab doesn't exist**/
   var applic_filters = {'programs':["interest","location","age","intensity","date","time","day","accessible"],
                         'facilities':["interest","location","age","date","time","day","accessible"],
	                 'leagues':["interest","location","age"],
                         'events':["interest","location","age","intensity","date","time","day","accessible"],
	                 'master': ["interest","location","age","intensity","date","time","day","accessible"]};
	                      
   var has_programs = false,
       has_facilities = false,
       has_leagues = false,
       has_events = false,
       window_hash = window.location.hash,
       existing_tabs = new Array;
	
   function showFilters(list)
   {
      $.each(applic_filters.master, function (i, type){
         has_no_title = (type == "accessible") ? true : false;
         title = $("#" + type + "_title");
         group = $("#" + type + "_group");
         if($.inArray(type, list) > -1)
         {
            if(!has_no_title && !title.is(".r_handle"))
               group.show();
            if(has_no_title)
               group.show();
            else
            {
               title.show();
               group.show();
               if(title.is(".r_handle") && group.is(":hidden"))
                  title.removeClass("r_handle_less");
               else if(title.is(".r_handle") && !group.is(":hidden"))
                  title.addClass("r_handle_less");    
            }
         }
         else
         {
            if(has_no_title)
               group.hide();
            else
               title.hide()
            group.hide();
         }
      });
   }
	
   $("#befit_tabs a").each(function(index){
      //attach event handlers to make filters applicable
      $(this).click(function(){
         var _this = $(this);
         var _attr = _this.attr("href");
         if(_attr == "#programs")
            list = applic_filters.programs;
         else if(_attr == "#facilities")
            list = applic_filters.facilities;
         else if(_attr == "#leagues")
            list = applic_filters.leagues;
         else if(_attr == "#events")
            list = applic_filters.events;         
         showFilters(list);
         make_floating_menu();
         window.location = _attr;
      });
      
      //get all existing tabs
      existing_tabs[index] = $(this).attr("href");
   });
   
   if(existing_tabs.length > 0)
   {
      //find out what tabs exist
      if($.inArray("#programs", existing_tabs) > -1)
         has_programs = true;
      if($.inArray("#facilities", existing_tabs) > -1)
         has_facilities = true;
      if($.inArray("#leagues", existing_tabs) > -1)
         has_leagues = true;
      if($.inArray("#events", existing_tabs) > -1)
         has_events = true;

      //move tab to facility if programs doesn't exit
      if(!has_programs && has_facilities && (window_hash == "#" || window_hash == ""))
      {
         window.location = "#facilities";
         showFilters(applic_filters.facilities);
      }
      //show applicable filters onload
      else if(has_programs && (window_hash == "#" || window_hash == "" || window_hash == "#programs"))
      {
         showFilters(applic_filters.programs);
      }
      else if(has_facilities && (window_hash == "#facilities"))
      {
         showFilters(applic_filters.facilities);
      }
      else if(has_leagues && (window_hash == "#leagues"))
      {
         showFilters(applic_filters.leagues);
      }
      else if(has_events && (window_hash == "#events"))
      {
         showFilters(applic_filters.events);
      }
   }
   /** End of Show applicable fitlers... **/
   
   	
   /** Move left filter menu with scroll **/
   var $leftbar   = $("#search_filter_form"),
       $rightbar  = $("#search_results_right_col"),
       $outerdiv = $("#search_results_output"),
       $window    = $(window);
   if($leftbar.offset())
   {
       var left_offset = $leftbar.offset(),
           right_offset = $rightbar.offset(),
           css_norm = false,
           css_fixed = false,
           css_bottom = false,
           old_min_height = 0;
   }

   function make_floating_menu()
   {
      if($leftbar.offset())
      {
      left_height = $leftbar.outerHeight();
      if($rightbar.outerHeight() > left_height)
      {
         scrollTop = $window.scrollTop();
         left_top = $leftbar.offset().top;
         left_bottom = left_top + left_height;
         minheight = $rightbar.height();
      
         upper_limit = left_offset.top;
         lower_limit = right_offset.top + $rightbar.outerHeight() - 40;
      
         if(old_min_height != minheight)
         {
            $outerdiv.css("min-height",minheight + "px");
            old_min_height = minheight; 
         }
      
         if (!css_norm && scrollTop <= upper_limit) {
            $leftbar.removeClass("fixed").removeClass("bottom");
            css_norm = true;
            css_fixed = false;
            css_bottom = false;
         }
         else if ((!css_fixed && (scrollTop > upper_limit)) || (css_bottom && (scrollTop < left_top))) {
            $leftbar.removeClass("bottom").addClass("fixed");
            css_norm = false;
            css_fixed = true;
            css_bottom = false;
         }
         else if(!css_bottom && left_bottom > lower_limit)
         {
            $leftbar.removeClass("fixed").addClass("bottom");
            css_norm = false;
            css_bottom = true;
         }
      }
      else
      {
         $outerdiv.css("min-height","0px");
      }
      }
   }
   //if filter exists
   if($leftbar.offset())
   {
      //make the call on load
      make_floating_menu();
      //attach event handler to scroll
      $window.scroll(make_floating_menu);
   }
   /** End of Move left filter menu with scroll **/
  
  
   /** Time of Day Slider **/
   var time_start_tag = $('#time_start_tag'),
       time_end_tag = $('#time_end_tag');
       from_time = $('#from_time'),
       to_time = $('#to_time');
   var selected_from_time = from_time.val();
   var selected_to_time = to_time.val();
   var default_start_time = selected_from_time ? convertTimetoInt(selected_from_time) : -30;
   var default_end_time = selected_to_time ? convertTimetoInt(selected_to_time) : 1440;
   var start_time = selected_from_time ? selected_from_time : "Any";
   var start_time_form = selected_from_time;
   var end_time = selected_to_time ? selected_to_time : "Any";
   var end_time_form = selected_to_time;
       
   time_start_tag.html(start_time);
   time_end_tag.html(end_time);
   $('#slider_group').show();
   $('#non_slider_group').hide();
   
   $("#time-range").slider({
      range: true,
      min: -30,
      max: 1440,
      values: [default_start_time, default_end_time],
      step: 30,
      slide: function(e, ui) {
         if(ui.values[0] == -30 || ui.values[0] == 1440)
         {
            start_time = "Any";
            start_time_form = "";
         }
         else
         {
            hours_start = Math.floor(ui.values[0] / 60);
            minutes_start = ui.values[0] - (hours_start * 60);
            am_pm_start = (hours_start < 12 || hours_start >= 24) ? ' am':' pm';
            hours_start = (hours_start > 12 || hours_start == 0) ? Math.abs((hours_start - 12)) : hours_start;
            if(minutes_start.toString().length == 1) minutes_start = '0' + minutes_start;
            start_time = hours_start+':'+minutes_start+am_pm_start;
            start_time_form = start_time;
         }
         
         if(ui.values[1] == -30 || ui.values[1] == 1440)
         {
            end_time = "Any";
            end_time_form = "";
         }
         else
         {
            hours_end = Math.floor(ui.values[1] / 60);
            minutes_end = ui.values[1] - (hours_end * 60);
            am_pm_end = (hours_end < 12 || hours_end >= 24) ? ' am':' pm';
            hours_end = (hours_end > 12 || hours_end == 0) ? Math.abs((hours_end - 12)) : hours_end;
            if(minutes_end.toString().length == 1) minutes_end = '0' + minutes_end;
            end_time = hours_end+':'+minutes_end+am_pm_end;
            end_time_form = end_time;
         }
            
         time_start_tag.html(start_time);
         time_end_tag.html(end_time);
         from_time.val(start_time_form);
         to_time.val(end_time_form);
      },
      stop: function(e, ui){
         $("#filter_form").submit();
      }
   });
   
   function convertTimetoInt(time_string)
   {
      var int_time = 0;
      if(time_string != ""){
         time_arr = time_string.split(":");
         hour = time_arr[0];
         minute_ampm = time_arr[1].split(" ");
         minute = minute_ampm[0];
         ampm = minute_ampm[1];
         ampm_addition = (ampm == "pm") ? 12 : 0;
         hour = parseInt(hour);
         hour = (hour == 12 && ampm == "am") ? 0 : hour;
         hour = (hour + ampm_addition) * 60;
         minute = parseInt(minute);
         int_time = hour + minute;
      }
      return int_time;
   }
   /** End of Time of Day Slider **/

   /** Autosubmit event handler on filter */
   $("#filter_form select, #filter_form input[type=checkbox]").change(function(){
      $("#filter_form").submit();
   });
   //remove submit button
   $("#filter_form input[type=submit]").hide();
   /** End of Autosubmit event handler on filter */
});
