$(function(){
    
    function prepareBuffer()
    {
        var objNew = document.createElement('p');
        var objHidden = document.createElement('input');

        objHidden.setAttribute('type', 'hidden');
        objHidden.setAttribute('value', '1');
        objHidden.setAttribute('id', 'virtualbufferupdate');
        objHidden.setAttribute('name', 'virtualbufferupdate');

        objNew.appendChild(objHidden);
        document.body.appendChild(objNew);
    }
    
    function updateBuffer()
    {
        var objHidden = document.getElementById('virtualbufferupdate');

        if (objHidden)
        {
            if (objHidden.getAttribute('value') == '1')
                objHidden.setAttribute('value', '0');
            else
                objHidden.setAttribute('value', '1');
        }
    }
    
    prepareBuffer();
    
    $('#park_search').clearDefault();
    
    //url that returns data given a state
    //will be given one get variable
    //ex: /volunteer/statedata?state=MD
	
	var ALLPARK_URL = "/pwr/customcf/apps/park-search/feeds/getParkResults_JSON.cfm?searchType=volunteer";	
	
    var STATE_URL = "/pwr/customcf/apps/park-search/feeds/getParkResults_JSON.cfm?searchType=volunteer";
    
    var ZIP_URL = "/pwr/customcf/apps/park-search/feeds/getParkResults_JSON.cfm?searchType=volunteer";
 
    var VOLGOV_URL = "/pwr/customcf/apps/park-search/feeds/getParkResults_JSON.cfm?searchType=opportunityList";
  
    var get_state_list = function(state, callback) {
        $.getJSON(STATE_URL + "&stateList=" + state, callback);
    }
    
    var get_zip_list = function(zip, callback) {
        $.getJSON(ZIP_URL + "&zs_zipcode=" + zip, callback);
    }
    
    var get_volgov_list = function(state, callback) {
        $.getJSON(VOLGOV_URL + "&stateList=" + state, callback);
    }
    

    //sorted data cache
    var CURRENT_ZIP;
    var ZIP_NAME;
    var ZIP_DISTANCE;
    var DISTANCE_UNIT = 'mi';
    //generate sorted data
    var cache_zip_parks = function(parks) {
        //deep copy, then sort
        ZIP_NAME = $.extend(true, [], parks).sort(function(a,b){return (a['name']>b['name'])});
        ZIP_DISTANCE = $.extend(true, [], parks).sort(function(a,b){return (a['distance_mi']>b['distance_mi'])});
    }
    
    //function clears results div and sets back to initial state
    var clear_results = function() {
        $('#results_bar').removeClass('bar_active');
      //  $('#results').css('display', 'none');
        $('#results_body').height($('#results_body').height());
        $('#results_body').html('<p class="loading">Loading...</p>');
        //$('#results_title').text('');
    }
    
    var populate_state = function(parks) {
        var ul = $('<ul class="results_list"></ul>');
        $.each(parks, function(index, item) {
            var first = 'class="clearfix"';
            if (index == 0)
                first = 'class="first clearfix"';
            ul.append($('<li ' + first +'><a href="'+item['url']+'">'+item['name']+'</a></li>'));
        });
		
        $('#results_body').html('').append(ul);
        $('#results_body').css('height', 'auto');
        $('#results').css('display', 'block');
    }
    
    var populate_zip = function(parks) {
         var ul = $('<ul class="results_list"></ul>');
           $.each(parks, function(index, item) {
               var first = 'class="clearfix"';
               if (index == 0)
                   first = 'class="first clearfix"';
               var unit = 'km';
               if (DISTANCE_UNIT == 'mi')
                   unit = 'miles';
               ul.append($('<li ' + first +'>' +
                    '<a href="'+item['url']+'"><span class="name">'+item['name']+'</span>' +
                    ' <span class="distance"><span class="distance_number">' + item['distance_'+DISTANCE_UNIT] + '</span>' +
                         ' <span class="distance_unit">' + unit + '</span> away' + '</span></a>' +
               '</li>'));
           });
           $('#results_body').html('').append(ul);
           $('#results_bar').addClass('bar_active');
           $('#results_body').css('height', 'auto');
           $('#results').css('display', 'block');
    }
    
    var populate_volgov = function(posits) {
        var ul = $('<ul class="results_list"></ul>');
        $.each(posits, function(index, item) {
            var first = 'class="clearfix"';
            if (index == 0)
                first = 'class="first clearfix"';
            ul.append($('<li ' + first + '>' +
                '<h4>'+item['title']+'</h4>' +
                '<p><a href="' + item['url']+'">' + item['location'] + '</a></p>' +
                '<p>Activities: ' + item['activities'] + '</p>' +
                '<p>Suitable for: ' + item['suitable'] + '</p>' +
                '<p>Dates: ' + item['dates'] + '</p>' + 
            '</li>'));
        });
        $('#results_body').html('').append(ul);
        $('#results_body').css('height', 'auto');
        $('#results').css('display', 'block');
    }


    //called by event attched in state_submit click
    var govopen_click = function(e) {
        var state = $('#by_state').val();
        clear_results();
        get_volgov_list(state, function(data) {
            $('#results_title').html('');
            $('#results_title').text('Opportunities in ' + data['state'] + ' from Volunteer.gov');
            $('#results_title').append($('<a id="view_park_names" href="#">&laquo; View Park Names</a>'));
            $('#view_park_names').click(state_click);
            populate_volgov(data['positions']);
            updateBuffer();
            location.hash = "results_title_skip2";
            
        });
        e.preventDefault();
    }
    
    //when user picks a state
    var state_click = function(e){
        var state = $('#by_state').val();
        //if the blank choice (select a state) is chosen, do nothing.
        if (!state) { e.preventDefault(); return; } 
        clear_results();
        get_state_list(state, function(data) {	
            $('#results_title').html('');
            $('#results_title').text('Parks in ' + data['state']);
            $('#results_title').append($('<a id="gov_openings" href="#">View Current Opportunities through Volunteer.gov &raquo;</a>'));
            $('#gov_openings').click(govopen_click);
            populate_state(data['parks']);
            updateBuffer();
            location.hash = "results_title_skip3";
        });
        e.preventDefault();
    }
    
    $('#state_submit').click(state_click);
    
    $('#zip_submit').click(function(e){
       var zip = $('#by_zip').val();
       if (!zip) { e.preventDefault(); return; }
       clear_results();
       get_zip_list(zip, function(data){
           $('#results_title').html('');
           $('#results_title').text('Parks near ' + data['zip']);
           cache_zip_parks(data['parks']);
           CURRENT_ZIP = ZIP_NAME;
           populate_zip(CURRENT_ZIP);
           updateBuffer();
           location.hash = "results_title_skip1";
       });     
       e.preventDefault();       
    });
    
    $('.distance_link').click(function(e){
        e.preventDefault();
        $('.name_link').removeClass('name_link_active');
        $(this).addClass('distance_link_active');
        CURRENT_ZIP = ZIP_DISTANCE;
        populate_zip(CURRENT_ZIP);        
    });

    $('.name_link').click(function(e){
        e.preventDefault();
        $('.distance_link').removeClass('distance_link_active');
        $(this).addClass('name_link_active');
        CURRENT_ZIP = ZIP_NAME;
        populate_zip(CURRENT_ZIP);        
    });
    
    $('.km_link').click(function(e){
       e.preventDefault();
       $('.mi_link').removeClass('mi_link_active');
       $(this).addClass('km_link_active');
       DISTANCE_UNIT = 'km';
       $('.results_list li').each(function(index){
            $(this).find('.distance_number').text(CURRENT_ZIP[index]['distance_'+DISTANCE_UNIT]);
            $(this).find('.distance_unit').text('km');
       });
    });

    $('.mi_link').click(function(e){
       e.preventDefault();
       $('.km_link').removeClass('km_link_active');
       $(this).addClass('mi_link_active');
       DISTANCE_UNIT = 'mi';
       $('.results_list li').each(function(index){
            $(this).find('.distance_number').text(CURRENT_ZIP[index]['distance_'+DISTANCE_UNIT]);
            $(this).find('.distance_unit').text('miles');
       });
    });

	
	
	
	
	/* START: Park Name Search (aR) */
	
	// defaults
	var txtSearchTitle = "Parks Matching Your Search";
	var txtSearchField = "Start typing a park name here...";
	
	// get the master list and put it into a variable for safe keeping
	var parkMasterList = "";
	$.getJSON(
		ALLPARK_URL,
		function(data){
			parkMasterList = "<ul class=\"results_list\">"
			var count = 0;
			$.each(data.parks, function(i,park){
				if (count == 0) {
					var thisClass = "first clearfix";
				} else {
					var thisClass = "clearfix";
				}
				var thisRow =
					"<li class=\"" + thisClass + "\">"
					+"<a href=\""+ park.url +"\">"+ park.name +"</a>"
					+"</li>";
				parkMasterList = parkMasterList + thisRow;
				count++; 
			});
			parkMasterList = parkMasterList + "</ul>";
		}
	);	


	$('#park_search').focus(function() {  

		// if content is not filled, or focus has left this search type, refill	contents
		if ($("#results_title").text != txtSearchTitle) {
			$("#results_title").text(txtSearchTitle);
			$('#results_bar').removeClass('bar_active');
			$("#results_body").html(parkMasterList);
			$("#results").show();	
		}
		
		if (this.value == txtSearchField)  this.value = '';

	});     

	// filter the result set.  hide the inappropriate ones.
	$("#park_search").keyup(function () {
	
	    var filter = $(this).val(), count = 0;
	    $("#results_body ul li").each(function () {  
	        if ($(this).text().search(new RegExp(filter, "i")) < 0) {
	            $(this).addClass("hidden");
	        } else {
	            $(this).removeClass("hidden");
	            if (count==0) { 
	            	$(this).addClass("first");
	            } else {
	            	$(this).removeClass("first");
	            }
	            count++;
	        }
	    });
	});

	//when user clicks go
    $('#park_submit').click(function(e){
		location.hash = "results_title_skip";
        e.preventDefault();
    });
	
	/* END: Park Name Search (aR) */	
	
	
	
	
    
});