// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

var zInfoScroller;

function loadContact(item) {
	var id = item.value.key;
	
	$('contact_id_tag').value = id;
	$('location_name').update(item.value.location);
	pulsate('location_name');
	
	var url = $('info_uri').innerHTML.gsub('contact_id', id);
	
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
			var data = transport.responseJSON;
			updateInfo(data);
		}
	});
	
}

function loadInfo(item) {
	var id = item.value.key;
	var url = $('info_uri').innerHTML.gsub('item_id', id);
	
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(transport) {
			var data = transport.responseJSON;
			loadImage(item, 'next', null, data);
		}
	});
}

function loadImage(item, direction, image_id, item_data) {
	showSpinner();
	
	var id = item.value.key;
	var url = $('image_uri').innerHTML.gsub('item_id', id);
	var aNext = $('paginator').select('.navButton.next').first();
	var aPrev = $('paginator').select('.navButton.previous').first();
	
	new Ajax.Request(url, {
		method: 'get',
		parameters: {
			image_id: image_id,
			direction: direction
		},
		onFailure: function(transport) {
			aNext.hide();
			aNext.stopObserving('click');
			
			aPrev.hide();
			aPrev.stopObserving('click');
			
			updateInfo(item_data);
			
			var imgs = $('image').select('img').each(function(img){ img.remove(); })
			
			hideSpinner();
		},
		onSuccess: function(transport) {
			var data = transport.responseJSON;
			
			aNext.hide();
			aNext.stopObserving('click');
			
			aPrev.hide();
			aPrev.stopObserving('click');
			
			if(data.has_next) {
				aNext.show();
				aNext.observe('click', function(event){
					loadImage(item, 'next', data.id);
					this.stopObserving('click');
					Event.stop(event);
				});
			}
			
			if(data.has_prev) {
				aPrev.show();
				aPrev.observe('click', function(event){
					loadImage(item, 'prev', data.id);
					this.stopObserving('click');
					Event.stop(event);
				});
			}
			
			if(data.image_url) {
				var img = new Element('img');
						
				img.observe('load', function(event){
					if(item_data) updateInfo(item_data);
					else if(data.description) updateDescription(data);
					
					hideSpinner();
					
					new Effect.Appear(img, {
						duration: 1,
						afterFinish: function(){
							var imgs = $('image').select('img');
							for(var i=0; i<imgs.length-1; i++) imgs[i].remove();
						}
					});
				});
				
				$('image').insert({bottom: img});
				img.writeAttribute("src", data.image_url);
				img.hide();
			}
			else {
				var imgs = $('image').select('img').each(function(img){ img.remove(); })
				if(item_data) updateInfo(item_data);
				else if(data.description) updateDescription(data);
				hideSpinner();
			}
		}
	});	
}

function hideSpinner(){
	new Effect.Fade('spinner', { duration: 0.5, queue: { position: 'end', scope: 'spinner' } });
}

function showSpinner() { 
	$('spinner').show();
	new Effect.Appear('spinner', { duration: 0.5, queue: { position: 'front', scope: 'spinner' } }); 
}

function updateInfo(data){
	if(!data) return;
	updateDescription(data);
	
	if(data.link) {
		$('item_link').writeAttribute('href', data.link);
		$('item_link').writeAttribute('target', "_blank");
		$('item_link').show();
		pulsate('item_link');
	} else {
		$('item_link').hide();
	}
	
	if(data.pdf_url) {
		$('item_pdf').writeAttribute('href', data.pdf_url);
		$('item_pdf').show();
		pulsate('item_pdf');
	} else {
		$('item_pdf').hide();
	}
	
}

function updateDescription(data){
	if(!data) return;
	
	if(data.description) {
		if(zInfoScroller == null) zInfoScroller = new ZScroll('vertical', 'info_scrollbar_track', 'info_scrollbar_content');
		
		$('info_scrollbar_content').update(data.description);
		zInfoScroller.reset();
		new Effect.Pulsate('info_scrollbar_content', { pulses:1, duration:0.2 });
	} else {
		$('info_scrollbar_content').update('');
	}
}

function pulsate(element){
	new Effect.Pulsate(element, { pulses:1, duration:0.2 });
}