;(function($) {

var ver = 1.0;

//	Simple log function to log runtime errors, mainly
//	for development.
function log(message){

	if (window.console && window.console.log){
		window.console.log('[consumption calc] - '+message);
	}
};

$.fn.consumption = function(options) {
	
 	// get the current selector that called the function
	options.target = this.selector;
	
	// we need to return the jQuery to allow it to be chained
	// further, and we'll iterate on the matched nodeset.
	return this.each(function() {
	
		// extend the default options, since some of them are
		// optional.
		options = $.extend($.fn.consumption.defaults, options);
	
		var $this = $(this);
		
		// init function, will only be called once per node.
		var opts = init($this, options);
		
		if(opts === false){
		
			log("No construct div available, terminating.");
			return;
		}
	});
};

function init(container, options){
	
	$(options.target).css({
		width: options.width
	});

	setupDOM(options);
	// populate the drop down with values based on the data object
	
	$.each(data, function(i){
		$(options.list).append("<option value='"+(i)+"'>"+$(this)[0].construct+"</option>");
	});
	
	setUnit($("#material").val());
	if(options.target){
		
		$("input[name=amount]").live("focus blur", function(event){
			
			if(event.type === 'focusin'){
				if($(this).val() == options.input_text){
					$(this).val("");
				}
			}
			else if(event.type === 'focusout'){
				if($(this).val() == ""){
					$(this).val(options.input_text);
				}
			}
		});
		$("#count-consumption").live("click", function(event){
			event.preventDefault();
			$("#validation-errors").empty();
			var construct = $("#material").val();
			
			var amount = $("input[name=amount]").val();
		
			if(is_numeric(amount) && amount.length > 0 && construct > 0){
				
				if(amount.length > options.limit){
					$("#validation-errors").append("<h3>Du har fyllt i för många siffror i fältet för enhet</h3>");
					$("input[name=amount]").addClass("valdation-error");
				}
				else{
					$("input[name=amount]").removeClass("valdation-error");
					calcConsumption(construct, amount);
				}
			}
			else{
				if(construct == 0){
					$("#validation-errors").append("<h3>Ogiltigt konstruktion</h3>");
				}
				else{
					$("#validation-errors").append("<h3>Var vänlig fyll i endast siffror</h3>");
					$("input[name=amount]").addClass("valdation-error");
				}
			}
		});

		$("select[name=material]").live("click", function(event){
			event.preventDefault();
			construct = $("#material").val();

			setUnit(construct);
		});

		return true;
	}
	else{
		return false;
	}
};

function setupDOM(options){
		$(options.target).append("<div id='control-panel'></div>");
		$(options.target).find("#control-panel").append("<div class='control-item'><select id='material' name='material'><option value='0'>"+options.select_start_value+"</option></select></div>");
		$(options.target).find("#control-panel").append("<div class='control-amount'><input type='text' name='amount' value='"+options.input_text+"'/><div id='show-unit'></div></div>");
		$(options.target).find("#control-panel").append("<div class='control-button'><a href='#' id='count-consumption'>"+options.calc_button_text+"</a></div>");
		
		$(options.target).append("<div id='validation-errors'></div>");
		
		$(options.target).append("<div id='answer'></div>");
		$(options.target).find("#answer").append("<div id='consumption'></div>");
		$(options.target).find("#answer").append("<div id='recommended-tools' class='hidden'></div>");
		$(options.target).find("#recommended-tools").append("<h3>"+options.recommended_tools_text+"</h3>");
		$(options.target).find("#recommended-tools").append("<div id='tool-list'></div>");
		
		$(".control-button a").css({
			background: options.button_background
		});
}

function setUnit(construct){
	if(construct > 0){
		$("#show-unit").html(data[construct].unit);
	}
}

function is_numeric(input){
    return !isNaN(input);
  }


function calcConsumption(construct, amount){

	var total = parseInt(amount) * parseInt(data[construct].sum);
	
	links = data[construct].tools['name'].length;
	
	$("#tool-list").empty();
	for(i=0; i<links; i++){
		$("#tool-list").append("<p><a target='_blank' href='"+data[construct].tools['urls'][i]+"'>"+data[construct].tools['name'][i]+"</a></p>");
	}
	
	if(data[construct].sum == 0){
		$("#consumption").empty().append("<p>Antal spik enligt konstruktörens anvisningar</p>");
	}
	else{
		$("#consumption").empty().append("<h3>ca "+total+" "+data[construct].product+"</h3>");
	}
	
	$("#recommended-tools").removeClass("hidden");
}

//	Public default options for the plugin.
$.fn.consumption.defaults = {
	width: "500px",
	limit: 4,
	list: "#material",
	calc_button_text: "Beräkna åtgång",
	recommended_tools_text: "Rekommenderade verktyg",
	input_text: ""
};

//	Public function that returns the current version of the plugin.
$.fn.consumption.ver = function() { return ver; };

})(jQuery);
