jQuery.noConflict();

jQuery(document).ready( function() {
	jQuery('.selectmultiple').multiSelect({ oneOrMoreSelected: '*', selectAll : false, noneSelected : '' });
	jQuery('.advanced label, h2').simpletooltip();
	jQuery('#DisplayOptionsForm input').change(setWhichAttributesToShow); //hack to work on IE
});


/** PROTOTYPE **/
$(document).observe('dom:loaded', function(e) {	
	$('DisplayOptionsForm').className = 'hidden';
	$('DisplayOptionsForm').hide();
	
	$('chem-table').observe('click', tableClicked);
	$('search').observe('submit', submitSearch);
	$('reset-search').observe('click', clearSearch);
	$('show-all').observe('click', showAll);
	$('listDisplayOptionsButton').observe('click', ToggleDisplayOptions);
	//$('#DisplayOptionsForm').observe('change', setWhichAttributesToShow); //doesn't work on IE
	$('SelectAll_Button').observe('click', selectAllCheckboxes);
	$('UnSelectAll_Button').observe('click', unselectAllCheckboxes);
});

var loaded = false;

function startLoading() {
	loaded = false;
	window.setTimeout('showLoadingImage()', 200);
}

function showLoadingImage() {
	if (!loaded) {
		$('loader').show();
	}
}

function stopLoading() {
	$('loader').hide();
	loaded = true;
}

Ajax.Responders.register({
	onCreate : startLoading
});

function tableClicked(event) {
	var el = event.element();
	var tr = $(el).up('tr');
	
	if (!tr) {
		return;
	}

	if ($(tr).up('thead')) {
		changeSorting(el);
		return;
	}
	
	if ($(el).hasClassName('groupLink')) {
		// användaren klickade på en grupp och vi ska således inte expandera raden.
		event.stop();
		return;
	}
	
	if ($(el).hasClassName('knapp2')) {
		// användaren klickade på en en knapp (t.ex. print eller export to csv)
		event.stop();
		return;
	}
	
	var id = $(tr).readAttribute('id').split(/_/)[1];
		
	if (!id) {
		return;
	}
	
	startLoading();
	
	if ($(tr).hasClassName('active')) {
		$(tr).removeClassName('active');
		
		if ($('chem_' + id + '_info')) {
			$('chem_' + id + '_info').hide();
		}
		
		$('chem_' + id).down('.more').update('<span class="moreInfoSpan">More info</span>');
		stopLoading();
		return;
	} else {
		$(tr).addClassName('active');
		
		$('chem_' + id).down('.more').update('<span class="moreInfoSpan">Hide info</span>');
		
		populateTable(id);		
	}
}

function changeSorting(el) {
	var column = $(el).readAttribute('id').split(/_/)[1];
	
	if (!column) {
		return;
	}
	
	new Ajax.Request('/index/set-sorting-order/', {
		method: 'post',
		parameters: { col: column },
		onSuccess: function (transport) {
			var sortingDirection = transport.responseJSON;
			
			if (sortingDirection) {
				$$('.ASC, .DESC').each(function(e) { $(e).removeClassName('ASC').removeClassName('DESC'); }); // ta bort pilarna på alla element som inte används för sortering längre...
				
				$(el).className = sortingDirection;
				
				fetchChemicals();
			} /*else {
				alert(transport.responseText); // debug
			}*/
		}
	});	
}

function toggleShowGroupMembersForChemicalInTR(group) {
	if ($$('.hiddenMember.' + group).length) { // om det finns dolda gruppmedlemmar...
		$$('.' + group + ':not([class~=hiddenMember]) td').each(function(e) {
			// ta bort border-bottom på gruppmedlemmarna när vi vill expandera listan för att visa de dolda gruppmedlemmarna.
			$(e).addClassName('noBorderBottom');
		});
		
		$$('.hiddenMember.' + group).each(function(e) {
			$(e).toggle();
			
			// highlighta för att tydligt visa att det ploppat upp fler kemikalier i listan
			new Effect.Highlight(e, { startcolor: '#dcdc4a', endcolor: rgbToHex($(e).getStyle('background')) });
		});
	}
	return false;
}

function selectAllCheckboxes(event) {
	event.stop();
	
	$$('#DisplayOptionsForm input').each(function(e) {
		$(e).checked = true;
	});
	setWhichAttributesToShow();
}

function unselectAllCheckboxes(event) {
	event.stop();
	
	$$('#DisplayOptionsForm input').each(function(e) {
		$(e).checked = false;
	});
	setWhichAttributesToShow();
}

function setWhichAttributesToShow() {
	var elements = $('DisplayOptionsForm').serialize(true);
	
	new Ajax.Request('/index/set-attributes-to-show/', {
		method: 'post',
		parameters: elements,
		onSuccess: function () {
			// för alla kemikalier vi redan tittat på detaljinfon för - resetta dessa så bara attributen vi är intresserade av syns...
			$$('tr.active').each(function(e) {
				var id = $(e).readAttribute('id').split(/_/)[1];
				
				if (id) {
					populateTable(id);
				}
			});
			
			stopLoading();
		}
	});
}

function populateTable(id) {
	new Ajax.Request('/index/info/id/' + id, {
		method: 'get',
		onSuccess: function (transport) {
			var obj = transport.responseJSON;
			
			if (obj && obj.fields) {
				// om infon redan visas radera den...
				if ($('chem_' + id + '_info')) {
					$('chem_' + id + '_info').remove();
				}
				
				var templateRowsMedSource = new Template('<tr><th title="#{title}" class="label">#{key}</th><td>#{value}. <em>Source: #{source}</em></td></tr>');
				var templateRowsUtanSource = new Template('<tr><th title="#{title}" class="label">#{key}</th><td>#{value}</td></tr>');
				
				var html = '<tr id="chem_' + id + '_info" style="display:none;"><td colspan=5 class=active-list><table border=0 cellspacing=0 cellpadding=0>';
				var slicing_point = Math.floor(obj.fields.length / 2);
				
				obj.fields.each(function(el, i) {
					
					if (el.value_source) {
						html += templateRowsMedSource.evaluate({
							key:	el.name,
							value:	el.value,
							title:	el.description,
							source:	el.value_source
						});
					} else {
						html += templateRowsUtanSource.evaluate({
							key:	el.name,
							value:	el.value,
							title:	el.description,
							source:	el.value_source
						});
					}
					
					if (!integrated && (i == slicing_point)) {
						html += '</table><table border=0 cellspacing=0 cellpadding=0>';
					}
				});
				
				html += '</table>'
				
				html += '<div class="kemikalieknappar-wrapper"><div class="kemikalieknappar">';
				html += '<a href="" class="knapp2" onclick="javascript:return popupChemical(' + id + ', 1);" style="margin-right:5px;">Print</a>';
				html += '<a href="" class="knapp2" onclick="window.location=\'/index/csv/id/' + id + '\';" style="margin-right:5px;">Export to Excel (.csv)</a>';
				html += '<a href="" class="knapp2" onclick="javascript:return popupChemical(' + id + ', 0);" >Open in popup</a>';
				html += '</div></div>';
				
				html += '</td></tr>';
				
				$('chem_' + id).insert({ after: html });
				Effect.Appear($('chem_' + id + '_info'), { duration: 0.3 });
				jQuery('.label').simpletooltip();
			} /*else {
				alert(transport.responseText); // debug
			}*/
			
			stopLoading();
		}
	});
}

function popupChemical(id, print) {
	var url = '/chemical/' + id + '/';
	
	if (print) {
		url += '?print';
	}
	
	window.open(url, 'chemicalpopup', 'width=500,height=600,scrollbars=1');
	
	return false;
}

function clearSearch(event) {
	$('keywords').value = '';
	
	$$('#menu input[type="checkbox"]').each(function(input) {
		$(input).checked = false;
	});
	
	$$('#menu LABEL.checked').each(function(label) {
		$(label).removeClassName('checked');
	});
	
	$$('.multiSelect').each(function(select) {
		$(select).title = "";
		$(select).update('<span style="width:138px;"></span>');
	});
	
	$$('.printknapp').each(function(e) { $(e).hide(); });
	$('search_tips').hide();
	$('chem-table').down('thead').hide();
	$('chem-table').down('tbody').update();
	
	$('search-result').update().hide();
}

function submitSearch(event) {
	event.stop();
	
	var elements = Form.serialize('search', true);

	new Ajax.Request('/index/search/', {
		method: 'post',
		parameters: elements,
		onSuccess: function(transport) {
			// efter att vi skickat våra nya söksträngar ladda om listan med kemikalier...
			fetchChemicals();
		}
	});
	
	return false;
}

function fetchChemicals() {
	new Ajax.Request('/index/fetch-chemicals/', {
		method: 'get',
		onSuccess: function(transport) {
			var obj = transport.responseJSON;
			
			if (obj) {
				var result_message = obj.chemicals;
				
				if (obj.chemicals == 1) {
					result_message += ' substance were found';
				} else {
					result_message += ' substances and substance groups were found';
				}
				
				if (obj.search_string.length > 0) {
					result_message += ' when you searched for <em>' + obj.search_string + '</em>.';
				} else {
					result_message += '.';
				}
				
				$('search-result').update(result_message).show();
				
				if (obj.html) {
					$('chem-table').down('thead').show();
					$('chem-table').down('tbody').update(obj.html);
					$('search_tips').show();
					$$('.printknapp').each(function(e) { $(e).show(); });
				} else {
					$('chem-table').down('thead').hide();
					$('chem-table').down('tbody').update();
				}
			} /*else {
				alert(transport.responseText); // debug
			}*/
			
			stopLoading();
		}
	});
}

function ToggleDisplayOptions(event) {
	event.stop();

	if($('DisplayOptionsForm').className == 'hidden') {
		// show the form
		$('DisplayOptionsForm').show().className = 'shown';
		$('listDisplayOptionsButton').update('Hide list display options');
	} else {
		// hide the form
		$('DisplayOptionsForm').hide().className = 'hidden';
		$('listDisplayOptionsButton').update('Show list display options');
	}
}

function showAll(event) {
	clearSearch(event);
	submitSearch(event);
}

function rgbToHex(str) {
   str = str.replace(/rgb\(|\)/g, '').split(',');
   str[0] = parseInt(str[0], 10).toString(16).toLowerCase();
   str[1] = parseInt(str[1], 10).toString(16).toLowerCase();
   str[2] = parseInt(str[2], 10).toString(16).toLowerCase();
   str[0] = (str[0].length == 1) ? '0' + str[0] : str[0];
   str[1] = (str[1].length == 1) ? '0' + str[1] : str[1];
   str[2] = (str[2].length == 1) ? '0' + str[2] : str[2];
   return ('#' + str.join(''));
}


/**
*
*	simpleTooltip jQuery plugin, by Marius ILIE
*	visit http://dev.mariusilie.net for details
*
**/
(function($){ $.fn.simpletooltip = function(){
	return this.each(function() {
		var text = $(this).attr("title");
		$(this).attr("title", "");
		if(text.length > 0) {
			$(this).hover(function(e){
				var tipX = e.pageX + 12;
				var tipY = e.pageY + 12;
				$(this).attr("title", ""); 
				$("body").append("<div id='simpleTooltip' style='position: absolute; z-index: 9999999999; display: none;'>" + text + "</div>");
				if($.browser.msie) var tipWidth = $("#simpleTooltip").outerWidth(true)
				else var tipWidth = $("#simpleTooltip").width()
				$("#simpleTooltip").width(tipWidth);
				$("#simpleTooltip").css("left", tipX).css("top", tipY).fadeIn("medium");
			}, function(){
				$("#simpleTooltip").remove();
				$(this).attr("title", text);
			});
			$(this).mousemove(function(e){
				var tipX = e.pageX + 12;
				var tipY = e.pageY + 12;
				var tipWidth = $("#simpleTooltip").outerWidth(true);
				var tipHeight = $("#simpleTooltip").outerHeight(true);
				if(tipX + tipWidth > $(window).scrollLeft() + $(window).width()) tipX = e.pageX - tipWidth;
				if($(window).height()+$(window).scrollTop() < tipY + tipHeight) tipY = e.pageY - tipHeight;
				$("#simpleTooltip").css("left", tipX).css("top", tipY).fadeIn("medium");
			});
		}
	});
}})(jQuery);
