dojo.registerModulePath("TE.ProductSelector", "/product_selector/js/ProductSelector");

dojo.require('TE.ProductSelector.Creator');
dojo.addOnLoad(function(){

	var getColumn = function(name) {
		switch (name) {
			case 'Name': return 0; break;
			case 'Link': return 1; break;
			case 'Datasheet': return 2; break;
			case 'Description': return 3; break;
			case 'Features': return 4; break;
			case 'Category': return 5; break;
			case 'Type': return 6; break;		
			case 'HalogensFree': return 7; break;
			case 'FlameRetardant': return 8; break;
			case 'OperatingTemp': return 9; break;
			case 'TempMin': return 10; break;
			case 'TempMax': return 11; break;
			case 'MinShrinkTemp': return 12; break;
			case 'Availability': return 13; break;
			case 'AvailabiliyEMEA': return 14; break;
			case 'AvailabiliyUS': return 15; break;
		}
		console.error("column " + name + " not found.");
		return -1;
	}
	
	var getData = function(obj, column_name) {
		var id = getColumn(column_name);
		if (id < 0) return "";
		return obj.aData[id];
	}

	var addTableColumn = function(table, place) {
		var td_node = dojo.doc.createElement('td');
		td_node.appendChild( dojo.doc.createTextNode( '0' ) );
		
		var th_node = dojo.doc.createElement('th');
		th_node.appendChild( dojo.doc.createTextNode( '0' ) );
		
		dojo.query('thead th:nth-child(' + place + ')', table).forEach(function(th) {
			dojo.place(dojo.clone(th_node), th, "after");
		});
		dojo.query('tbody td:nth-child(' + place + ')', table).forEach(function(td) {
			dojo.place(dojo.clone(td_node), td, "after");
		});
	};
	
	var add_hover_info = function(element, info) {
		return '<span title="' + info + '" style="border-bottom: 1px dotted #bbb; cursor: help;">' + element + '</span>';
	}
	
	var convert_truefalse_to_yesno = function(value) {
		if (value == "True") return "Yes";
		else if (value == "False") return "No";
		else return value;
	}	
	
	var render_truefalse_as_yesno = function (obj) {
		var value = obj.aData[obj.iDataColumn];
		return convert_truefalse_to_yesno(value);
	}
		
	var render_availability_column = function(obj) {
		var emea 	= getData(obj, "AvailabiliyEMEA");
		var us	 	= getData(obj, "AvailabiliyUS");
		
		if (emea == "True" && us == "True") return "Worldwide";
		else if (emea == "True") return "EMEA";
		else if (us == "True") return "US";
		else return "N/A";	
	}
	
	var render_temperature_column = function (obj) {
		var min 	= getData(obj, "TempMin");
		var max 	= getData(obj, "TempMax");
		var r = min + '&deg; C to ' + max + '&deg; C';
		if (max <= 80) r = add_hover_sensitive_substrates(r);
		return r;
	}
	
	var add_hover_sensitive_substrates = function(element) {
		return add_hover_info(element, "Suitable for temperature sensitive substrates");
	}
	
	var render_shrinktemperature_column = function(obj) {
		var min 	= getData(obj, "MinShrinkTemp");
		if (min) {
			var r = min + ' &deg; C';
			if (min <= 80) r = add_hover_sensitive_substrates(r);
			return r;
		}
		else return "N/A";
	}
		
	var render_features = function(obj) {
		//var category	= getData(obj, "Category");
		var type 		= getData(obj, "Type");
		var halogens 	= getData(obj, "HalogensFree");
		var flameret 	= getData(obj, "FlameRetardant");
		
		var r = type;
		if (halogens == "True") {
			r += ",<br/>Halogen free";
			
		}
		else if (halogens == "False") {
			r += ",<br/>Added Halogens";
			if (type == "Dual Wall") r += "&nbsp;(jacket&nbsp;only)"; 
		}
		
		if (flameret == "True") r += ",<br/>Flame retardant";
		else if (flameret == "False") r += ",<br/>Not flame retardant";

		return r;
	}
	
	var render_name = function(obj) {
		var name 		= getData(obj, "Name");
		var link 		= getData(obj, "Link");
		var datasheet	= getData(obj, "Datasheet");
		var description	= getData(obj, "Description");
		var category	= getData(obj, "Category");
		
		if (link != "") {
			name = "<a href=\"" + link + "\">" + name + "</a>";
		}
		
		var r = '<strong>' + name + '</strong>';
		
		if (datasheet != "") {
			r += ' (<a href="' + datasheet + '">Datasheet</a>)';
		}
		
		r += '<br/>';
		
		if (category != "") {
			r += category + '<br/>';
		}
		
		r += description;
		
		return r;
	}
	
	addTableColumn(dojo.byId('tubing_products'), getColumn("Features"));
	addTableColumn(dojo.byId('tubing_products'), getColumn("OperatingTemp"));
	addTableColumn(dojo.byId('tubing_products'), getColumn("Availability"));

	var TPS = new TE.ProductSelector.Creator('tubing_products', {
		columns: [
			/*0 Name*/ {
				bVisible: false
			},
			/*1 Link */ {
				fnRender: render_name,
				iDataSort: getColumn("Name"),
				sTitle: "Product"
			},
			/*2 Datasheet */ {
				bVisible: false
			},
			/*3 Description*/ {
				bVisible: false
			},
			/*4 Features */ {
				bSortable: false,
				fnRender: render_features,
				sTitle: "Features"	
			},
			/*5 Category */ {
				bVisible: false
			},
			/*6 Type*/ {
				bVisible: false
			},
			/*7 HalogenFree*/ {
				bVisible: false
			},
			/*8 FlameRetardant*/ {
				bVisible: false
			},
			/*9 Operating Temperature */ {
				sTitle: "Operating Temperature",
				fnRender: render_temperature_column,
				iDataSort: getColumn("TempMax")
			},
			/*10 TempMin*/ { 
				bVisible: false
			}, 
			/*11 TempMax*/ {
				bVisible: false
			}, 
			/*12 Min Shrink Temp*/ {
				fnRender: render_shrinktemperature_column,
				bUseRendered: false // sort with original data
			}, 
			/*13: Availability */ {
				sTitle: "Availability",
				fnRender: render_availability_column,
				bSortable: false
			},
			/*14 Availability EMEA */ {
				bVisible: false
			},
			/*15 Availability US */ {
				bVisible: false
			}
		],
		filters: [
			{
				column_id: getColumn("Category"),
				name: "Category"
			},{
				column_id: getColumn("Type"),
				name: "Type"
			},{
				column_id: getColumn("HalogensFree"),
				buttons: [
					{ label: "Yes", value: "True" },
					{ label: "No", value: "False" }
				]
			},{
				column_id: getColumn("FlameRetardant"),
				buttons: [
					{ label: "Yes", value: "True" },
					{ label: "No", value: "False" }
				]
			},{
				filter: "num_greater",
				column_id: getColumn("TempMax"),
				sort_cmp: function(a,b){return a - b}
			},{
				//filter: "num_lesser",
				column_id: getColumn("MinShrinkTemp"),
				sort_cmp: function(a,b){return a - b}
			},{	
				name: "Availability",
				buttons: [
					{ column_id: getColumn("AvailabiliyEMEA"), value: "True", label: "EMEA" },
					{ column_id: getColumn("AvailabiliyUS"), value: "True", label: "US" }
				]
			}
		]
	});
	
	TPS.startup();
});
