/*
	allow for formatting of strings like such:
	
	"hello {name}, how are you doing {when}".template({name:"bob",when:"tonight"});
	
	returns "hello bob, how are you doing tonight"
	
*/

String.prototype.template = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );

};

/* if the user doesnt have firebug , dont freak out, just capture everything */
if(typeof(console)!="object"){
  var console = {
    log: function() {},
    debug: function() {},
    timer: function() {},
    timerEnd: function() {},
    time: function() {},
    timeEnd: function() {}
  };
}


	/*
		make it so whenever the search charities input field is typed in
		that we send a request to the server with the parameters
		
		rendering the results in a table row
		
	*/
	
var set_charity_value = function(){
	var row = $(this);
	var charity_name = row.children('.charity_name_descr').children('h4').html();
	var charity_id = row.attr('id').split('-')[2];
	var results_container = $('#charity-dropdown-results > tbody:last');
	
	$('#search_charities').attr('value', charity_name);
	$('#user_preferred_charity_id').attr('value', charity_id);
	
	results_container.children().remove();		
};

var make_charity_row = function(charity){
	var html = '<tr class="charity-results-row" id="charity-id-{id}"><td class="charity_name_descr"><h4>{name}</h4><p>{short_description}</p></td><td class="charity_location"> <p>{location}<span class="charity_country">{country}</span></p></td></tr>';
	//this should prevent duplicates
	if( !$('#charity-id-' + charity.id) || $('#charity-id-' + charity.id).length == 0 ){
		return html.template(charity);
	}
};

var make_search_result_row = function(result){
	var html = '<tr class="search-results-row" id="search-row-{id}"><td class="charity_name_descr"><h4><a href="{url}">{name}</a></h4></td></tr>';

	if( !$('#search-row-' + result.id) || $('#search-row-' + result.id).length == 0 ){
		return html.template(result);
	}
};

$(document).ajaxSend(function(event, request, settings) {
  if (typeof(AUTH_TOKEN) == "undefined") return;
  // settings.data is a serialized string like "foo=bar&baz=boink" (or null)
  settings.data = settings.data || "";
  settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN);
});

$(document).ready(function(){
	var global_search_form = $('#global_search');
	var global_search_results = $('#smart-search-drop');

	$('.thickbox-button.confirm-support-this-charity').bind('click',function(){
		var button_id = $(this).attr('id');
		var charity_id = button_id.split('-')[2];
		
		if($.post('/charities/confirm_select/' + charity_id)){
			parent.tb_remove();
			parent.window.location = parent.window.location;
		};
	});
	
	$('#global_search_field').bind('keydown',function(){
		var value = $(this).attr('value');
		var results_table = $('#smart-search-drop');
		var results_container = $('#smart-search-drop > tbody:last');
		
		results_container.children().remove();
		
		var url='';
		var search_type = '';
		
		if($('#stores_radio').attr('checked')){
			url = "/search/store_by_name?name=" + value;
			search_type = 'store';
		}
		
		if($('#charities_radio').attr('checked')){
			url = "/search/charity_by_name?name=" + value;
			search_type = 'charity';
		}
		
		if(value.length >= 3){
			results_table.show();
			
			$.getJSON(url, function(data){
				$.each(data,function(index,result){
					results_container.append( make_search_result_row(result) );
					/*
					$('tr.search-results-row').bind('click', function(){
						window.location = result.url;
					});
					*/					
				});
			});
			
			
		}
	});	
	
	
	if($(".stores_lst_std")){
		$(".stores_lst_std").sortable({ 
		handle : '.dragHandle', 
		update : function (event,ui) { 
			var container = $('#favorite-stores-list');
			var sort_map = {};
			
			container.children().each(function(index,listing){
				var store_id = $(listing).attr('id').split(/-/)[3];
				sort_map[index] = store_id;
			});
			
			$.post("/user_stores/update_order",{"sortmap": $.param(sort_map) });
		} 
	  }); 
	}
  
	$('.global_search_target').bind('click',function(){
		var field = $(this).attr('value');
		//$('#global_search_field').attr('value','');
		
		if(!field){
			if($('#stores_radio').attr('checked')){
				field == 'stores';
			}
			if($('#charities_radio').attr('checked')){
				field == 'charities';
			}
		}
		
		if(field == 'charities'){
			global_search_form.attr('action','/charities/search');
		}
		if(field == 'stores'){
			global_search_form.attr('action','/stores/search');
		}
	});

	$(function() {
			$('#charity-dropdown-results tr').hover(function(){
				   $(this).addClass('table_row_over');
			}, function() {
				   $(this).removeClass('table_row_over');
			});
	});

	
	$('#search_charities').bind('keydown',function(){
		var value = $(this).attr('value');
		var results_table = $('#charity-dropdown-results');
		var results_container = $('#charity-dropdown-results > tbody:last');
		var query = $('#search_charities').attr('value');
		
		results_container.children().remove();

		if(value.length >= 3){
			results_table.show();
			
			$.getJSON("/search/charity_by_name?name=" + query, function(data){
				$.each(data,function(index,charity){
					results_container.append( make_charity_row(charity) );
					$('tr.charity-results-row').bind('click', set_charity_value );
				});
			});
			
			
		}
	});
	
		
	if($('#charity-selection-container').length){
		$('.charity-selection-toggle').bind('click',function(){
			if($(this).attr('value')=='manual'){
				$('#charity-selection-container').addClass('active');
			} else {
				$('#charity-selection-container').removeClass('active');
			}
		});
	}
	
	$("a.account-edit.change_link").bind('click',function(){
		var y = $(this).offset().top;
		var x = $(this).offset().left;
		
		if(y){
			//$.scrollTo({top: y, left: x});
		}
		
		if($(this).hasClass('cancel-changes-link')){
			$('.account_edit').hide();
			$('.account_view').show();
			return true;
		}
		
		if($(this).attr('id')=='charity-change-link'){
			$('#charity-selection-container').addClass('active');
		}
		
		var parent = $(this).parent('.account_view');
		var edit_form_id = parent.attr('id').replace(/view/,'edit');
		var edit_form = $('#'+edit_form_id);
		
		parent.hide();
		edit_form.show();
	});

	
 	$("h1.charities_title").randombg({
			directory: "/images/charities_stock_headers/", //directory to image folder
			howmany: 7 //how many images are in this folder
	});

	$("#site-legal > li").click(function() {
		var qu = $(this).attr("id");
		var an = "#" + qu.replace("term","a");

		$.scrollTo(an, {duration: 800, axis:"y", offset: {top:-100}, onAfter:function(){
			 // step 9
			$(an).effect("highlight", {color: "#99c0e1"}, 2000); }
		});
	});

	$('.toggle-expires-at').bind('click', function(){
		var cb = $(this);
		var target = cb.parent().siblings('.form-item.expires-at');
		
		if(cb.attr('checked')){
			target.hide();
		} else {
			target.show();
		}
	});
	
	$('.cancel-form').bind('click', function(){
		$(this).parent().hide();
		$(this).parent().siblings('table.admin-results').show();
	});

});