// Custom sorting plugin
(function($) {
	$.fn.sorted = function(customOptions) {
		var options = {
			reversed: false,
			by: function(a) { return a.text(); }
		};
		$.extend(options, customOptions);
		$data = $(this);
		arr = $data.get();
		arr.sort(function(a, b) {
			var valA = options.by($(a));
			var valB = options.by($(b));
			if (options.reversed) {
				return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;
			} else {
				return (valA < valB) ? -1 : (valA > valB) ? 1 : 0;
			}
		});
		return $(arr);
	};
})(jQuery);

jQuery(document).ready(function($) {

	$.iPhone.init();
	
 function pad(n, len) {
		s = n.toString();
		if (s.length < len) {
			s = ('0000000000' + s).slice(-len);
		}
		return s;
	}

	function SaveFileName(org) {
		s = org.replace("/", "_")
		return s;
	}


	$.expr[':'].icontains = function(obj, index, meta, stack) {
		return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
	};

	function depColor(s) {
		if (s == "VMS") {
			return "da251d";
		}
		else if (s == "VLS") {
			return "ec921a";
		}
		else if (s == "VPS") {
			return "711c76";
		}
		else if (s == "VRS") {
			return "0093dd";
		}
		return "000000";
	}

	var ul = $("#families");
	$.getJSON('../api/api.aspx?cmd=ListProductFamilies&apikey=x83nauitan2', function(xhrdata1) {
		this.ajaxFamilies = xhrdata1;
		for (var i = 0; i < xhrdata1.length; ++i) {
			var item = xhrdata1[i];
			var li2 = $("<li data-id='id-" + item.PFID + "' data-date='" + item.New + "' data-sort='" + pad(item.Sort, 3) + "' data-system='" + item.Dep + "'><div style='background-color: #" + depColor(item.Dep) + ";height: 3px;margin-bottom:2px;padding: 0 3px 0 3px;'></div><strong>" + item.PFName + "</strong></li>");
			li2.appendTo(ul);
			//li2.css("border-left", "solid 3px #" + depColor(item.Dep));
			//li2.css("border-right", "solid 3px #" + item.KRBg);
		}
		$dataFam = $families.clone();
	});

	var read_button = function(class_names) {
		var r = {
			selected: false,
			type: 0
		};
		for (var i = 0; i < class_names.length; i++) {
			if (class_names[i].indexOf('selected-') == 0) {
				r.selected = true;
			}
			if (class_names[i].indexOf('segment-') == 0) {
				r.segment = class_names[i].split('-')[1];
			}
		};
		return r;
	};

	var determine_selectedValue = function($buttons) {
		var $selected = $buttons.parent().filter('[class*="selected-"]');
		return $selected.find('a').attr('data-value');
	};

	var $preferences = {
		duration: 800,
		easing: 'easeInOutQuad',
		adjustHeight: false
	};
	
	var $MainLevel = 0;
	
	var updatePageLevel = function($level) {
		$MainLevel = $level;
		if ($level > 0) {
			$("#families").hide();
			$("#Level0Filter").hide();
			$("#Level1FilterMain").show();
			$("#Level1FilterSub").hide();
			$("#parts").show();
		} else {
			$("#families").show();
			$("#Level0Filter").show();
			$("#Level1FilterMain").hide();
			$("#Level1FilterSub").hide();
			$("#parts").hide();
		}
	};

	var updateFamilies = function($controls, $dataFam) {

		var filterSystem = determine_selectedValue($controls.eq(0).find('a'));
		var filterDate = determine_selectedValue($controls.eq(1).find('a'));
		var sortBy = determine_selectedValue($controls.eq(2).find('a'));
		//var search = $controls.eq(3).find('input').value;
		var search = $('#pfsearch')[0].value;

		var $filteredData = null;
		var $sortedData = null;

		if (filterSystem == 'all') {
			$filteredData = $dataFam.find('li');
		} else {
			$filteredData = $dataFam.find('li[data-system=' + filterSystem + ']');
		}

		if (filterDate == 'dateNew') {
			$filteredData = $($filteredData).filter('[data-date="true"]');
		}

		if (search != "") {
			$filteredData = $($filteredData).filter(':icontains(' + search + ')');
		}

		if (sortBy == 'sortCatalog') {
			$sortedData = $filteredData.sorted({
				by: function(v) {
					return $(v).attr("data-sort").toString();
				}
			});
		} else {
			// if sorted by name
			$sortedData = $filteredData.sorted({
				by: function(v) {
					return $(v).find('strong').text().toLowerCase();
				}
			});
		}

		$families.quicksand($sortedData, $preferences);
	};


	// get the first collection
	var $families = $('#families');
	var $parts = $('#parts');
	// clone applications to get a second collection
	var $dataFam = $families.clone();
	var $dataPart = $parts.clone();

	$("#families li").live('click', function(e) {
		e.preventDefault();

		var $control = $(this);
		var $famid = $control.attr("data-id").toString().slice(3);
		//ajaxParts = $('#result').load('ajax/test.html');
		//var $parts = $("#parts");
		/*$("#parts", $control).remove();
		var ul = document.createElement("ul");
		$(ul).attr("id", "parts");
		$(ul).addClass("part - grid");
		$(ul).appendTo($control);
		//$parts.empty();*/

		$.getJSON('../api/api.aspx?cmd=ListParts&ID=' + $famid + '&apikey=x83nauitan2', function(xhrdata3) {

			for (var i = 0; i < xhrdata3.length; ++i) {
				var item = xhrdata3[i];
				var li2 = $("<li data-id='id-" + item.ID + "' data-sort='" + pad(item.Sort, 3) + "'><table class=\"part-grid-tab\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td><img  src=\"../Generated/Images/Neutral/Products/Images.90/" + SaveFileName(item.No) + ".png\" /></td></tr><tr><td><strong>" + item.No + "</strong></td></tr><tr><td height=\"45px\">" + item.Desc + "</td></tr></table></li>");

				li2.appendTo(parts);
			}
			$dataPart = $parts.clone();
		}).addTouch();

		updatePageLevel(1);
	});

	var updateParts = function($controls, $dataPart) {
		var filterType = determine_selectedValue($controls.eq(4).find('a'));
		var filterDate = determine_selectedValue($controls.eq(5).find('a'));
		var sortBy = determine_selectedValue($controls.eq(6).find('a'));
		var search = $('#partsearch')[0].value;
		
		var $filteredParts = null;
		var $sortedParts = null;

		if (filterType == 'all') {
			$filteredParts = $dataPart.find('li');
		} else {
			$filteredParts = $dataPart.find('li[data-system=' + filterType + ']');
		}

		if (filterDate == 'dateNew') {
			$filteredParts = $($filteredParts).filter('[data-date="true"]');
		}

		if (search != "") {
			$filteredParts = $($filteredParts).filter(':icontains(' + search + ')');
		}

		if (sortBy == 'sortCatalog') {
			$sortedParts = $filteredParts.sorted({
				by: function(v) {
					return $(v).attr("data-sort").toString();
				}
			});
		} else {
			// if sorted by name
			$sortedParts = $filteredParts.sorted({
				by: function(v) {
					return $(v).find('strong').text().toLowerCase();
				}
			});
		}

		$parts.quicksand($sortedParts, $preferences);
	};

	var $controls = $('ul.splitter ul');
	$controls.each(function(i) {

		var $control = $(this);
		var $buttons = $control.find('a');
		var $inputs = $control.find('input');

		$inputs.bind('keyup', function(e) {
			var $input = $(this);
			if ($MainLevel == 0)
				updateFamilies($controls, $dataFam);
			else if ($MainLevel == 1)
				updateParts($controls, $dataPart);
		});

		$buttons.bind('click', function(e) {

			var $button = $(this);
			var $button_container = $button.parent();
			var button_properties = read_button($button_container.attr('class').split(' '));
			var selected = button_properties.selected;
			var button_segment = button_properties.segment;

			if (!selected) {

				$buttons.parent().removeClass('selected-0').removeClass('selected-1').removeClass('selected-2');
				$button_container.addClass('selected-' + button_segment);

				if ($MainLevel == 0)
					updateFamilies($controls, $dataFam);
				else if ($MainLevel == 1)
					updateParts($controls, $dataPart);
			}

			e.preventDefault();
		});

	});

	var $home = $('#home');

	$home.bind('click', function(e) {

		updatePageLevel(0);
		e.preventDefault();
	});

	updatePageLevel(0);
});



