YAHOO.namespace("jolkona");
YAHOO.namespace("jolkona.container");

YAHOO.jolkona.waitDuration = 0;
YAHOO.jolkona.dataTimer = null;

// Bind function to DOM ready
jQuery(function($){

	bindProjectFilter();
			
});

function bindProjectFilter() {

	$ = jQuery;

	$('#projectViewFilter select[name="mindonation"]').bind('change', function(){
		var maxDonation = '';
		var minDonation = $(this).val();
		if (minDonation == 1) maxDonation = 50;
		if (minDonation == 50) maxDonation = 100;
		if (minDonation == 100) maxDonation = 200;
		if (minDonation == 200) maxDonation = 300;
		$('#projectViewFilter input[name="maxdonation"]').val(maxDonation);
	});
	$('#projectViewFilter select').bind('change', loadDataWait);

}

function loadDataWait() {

	// Reset timer
	clearTimeout(YAHOO.jolkona.dataTimer);
	
	// Give the user a few seconds to make changes before loading data
	YAHOO.jolkona.dataTimer = setTimeout(loadData, YAHOO.jolkona.waitDuration);
	
}

function loadData() {

	// Show loading screen
	YAHOO.jolkona.container.wait.show();

	// Force a half-second delay to prevent the loading screen from rapidly appearing and
	// then disappearing when the remote data is cached or loaded fast
	setTimeout(function(){
		var url = Jolkona.baseUrl + 'projects/?' + $('#projectViewFilter').serialize() + '&nocache=' + Math.random();
		// Load content
		$('#content').load(url, null, function(){
			// Rebind controls
			bindProjectFilter();
			// Hide loading screen
			YAHOO.jolkona.container.wait.hide();
		});
	}, 500);
}

YAHOO.util.Event.onDOMReady(function() {
	if (!YAHOO.jolkona.container.wait) {
		// Initialize the temporary Panel to display while waiting for external content to load
		YAHOO.jolkona.container.wait = 
				new YAHOO.widget.Panel("wait",  
												{ width: "240px", 
												  fixedcenter: true, 
												  close: false, 
												  draggable: false, 
												  underlay: 'none',
												  modal: true,
												  visible: false
												} 
											);
		YAHOO.jolkona.container.wait.setHeader("Updating projects list...");
		YAHOO.jolkona.container.wait.setBody("<img src=\"http://us.i1.yimg.com/us.yimg.com/i/us/per/gr/gp/rel_interstitial_loading.gif\"/>");
		YAHOO.jolkona.container.wait.render(document.body);
	}
});

function initSlider() {
	
	var sliderTimer = null;
	
	// Sliders have a range of 165 pixels
	var range = 165;
		
	// Set up a function to convert the min and max values into something useful
	var convertMin = function (val) {
		return Math.round(val * (sliderMax / range));
	};
	var convertMax = function (val) {
		return Math.round(val * (sliderMax / range));
		//return Math.round(val * (sliderMax / range) + (((range - val) / range) * 200));
	};		

	// Setup sliders when DOM is ready
	YAHOO.util.Event.onDOMReady(function () {
		
		// Create min slider
		var minSlider = YAHOO.widget.Slider.getHorizSlider("minDonationAmountSlider", "minSliderThumb", 0, 165);
		// Create max slider
		var maxSlider = YAHOO.widget.Slider.getHorizSlider("maxDonationAmountSlider", "maxSliderThumb", 0, 165);
		
		// Initalize sliders
		minSlider.setValue(sliderMinInit, true, true, true);
		maxSlider.setValue(sliderMaxInit, true, true, true);
		
		// Custom function to update the text fields, the converted value
		// report and the slider's title attribute
		var updateUI = function () {
			min = minSlider.getValue();
			max = maxSlider.getValue();
			YAHOO.util.Dom.get("donationAmountFrom").innerHTML = convertMin(min);
			YAHOO.util.Dom.get("donationAmountTo").innerHTML   = convertMax(max);
			YAHOO.util.Dom.get("donationAmountMin").value   = convertMin(min);
			YAHOO.util.Dom.get("donationAmountMax").value   = convertMax(max);
			//if (min > max) maxSlider.setValue(min, true, true, true);
			//if (max < min) minSlider.setValue(max, true, true, true);
		};
				
		// Subscribe to slider events
		minSlider.subscribe('change', updateUI);
		minSlider.subscribe('slideEnd', function(){
			// Pause for a short while to give the user a chance to make more changes
			sliderTimer = setTimeout(loadData, 1000);
		});
		minSlider.subscribe('slideStart', function(){
			// Cancel timer
			clearTimeout(sliderTimer);
		});
		maxSlider.subscribe('change', updateUI);
		maxSlider.subscribe('slideEnd', function(){
			// Pause for a short while to give the user a chance to make more changes
			sliderTimer = setTimeout(loadData, 1000);
		});
		maxSlider.subscribe('slideStart', function(){
			// Cancel timer
			clearTimeout(sliderTimer);
		});		
				
		// Attach the sliders to the YAHOO.jolkona namespace for public probing
		YAHOO.jolkona.minSlider = minSlider;		
		YAHOO.jolkona.maxSlider = maxSlider;		
		
				
	});
	
	/*
	var sliderTimer = null;
	
	// Slider has a range of 165 pixels
	var range = 165;

	// No ticks for this example
	var tickSize = 0;

	// We'll set a minimum distance the thumbs can be from one another
	var minThumbDistance = 1;

	// Initial values for the thumbs
	var initValues = [sliderMinInit,sliderMaxInit];

	// Set up a function to convert the min and max values into something useful
	var convert = function (val) {
		return Math.round(val * (sliderMax/range));
	};

	// Setup slider when DOM is ready
	YAHOO.util.Event.onDOMReady(function () {
		var sliderElement = YAHOO.util.Dom.get("donationAmountSlider");

		// Create the DualSlider
		var slider = YAHOO.widget.Slider.getHorizDualSlider(sliderElement,
			"donationAmountSliderMin", "donationAmountSliderMax",
			range, tickSize, initValues);

		slider.minRange = minThumbDistance;
        
		// Custom function to update the text fields, the converted value
		// report and the slider's title attribute
		var updateUI = function () {
			YAHOO.util.Dom.get("donationAmountFrom").innerHTML = convert(slider.minVal);
			YAHOO.util.Dom.get("donationAmountTo").innerHTML   = convert(slider.maxVal);
			YAHOO.util.Dom.get("donationAmountMin").value   = convert(slider.minVal);
			YAHOO.util.Dom.get("donationAmountMax").value   = convert(slider.maxVal);
		};

		// Subscribe to the dual thumb slider's change and ready events to
		// report the state.
		slider.subscribe('ready', updateUI);
		slider.subscribe('change', updateUI);
		slider.subscribe('slideEnd', function(){
			// Pause for a short while to give the user a chance to make more changes
			sliderTimer = setTimeout(loadData, 1000);
		});
		slider.subscribe('slideStart', function(){
			// Cancel timer
			clearTimeout(sliderTimer);
		});			
		
		// Attach the slider to the YAHOO.jolkona namespace for public probing
		YAHOO.jolkona.slider = slider;		
	});
	*/
};
initSlider();
