﻿/*
v1.0.0 - first release
*/
var YsCzechLocale = function() {
	var diacritics = [
		[/[\u00c0-\u00c5]/g, 'A'],
		[/[\u00c8-\u00cb]/g, 'E'],
		[/[\u00cc-\u00cf]/g, 'I'],
		[/[\u00d2-\u00d6]/g, 'O'],
		[/[\u00d9-\u00dc]/g, 'U'],
		[/[\u00e0-\u00e5]/g, 'a'],
		[/[\u00e8-\u00eb]/g, 'e'],
		[/[\u00ec-\u00ef]/g, 'i'],
		[/[\u00f2-\u00f6]/g, 'o'],
		[/[\u00f9-\u00fc]/g, 'u'],
		[/[\u00fd]/g, 'y'],
		[/[\u00dd]/g, 'Y'],
		[/[\u010c]/g, 'C'],
		[/[\u010d]/g, 'c'],
		[/[\u010e]/g, 'D'],
		[/[\u010f]/g, 'd'],
		[/[\u011a]/g, 'E'],
		[/[\u011b]/g, 'e'],
		[/[\u0147]/g, 'N'],
		[/[\u0148]/g, 'n'],
		[/[\u0158]/g, 'R'],
		[/[\u0159]/g, 'r'],
		[/[\u0160]/g, 'S'],
		[/[\u0161]/g, 's'],
		[/[\u0164]/g, 'T'],
		[/[\u0165]/g, 't'],
		[/[\u016e]/g, 'U'],
		[/[\u016f]/g, 'u'],
		[/[\u017d]/g, 'Z'],
		[/[\u017e]/g, 'z']
	];
	
	
	function replaceNationalChars(str) {
		var s = str;
		for (var i = 0; i < diacritics.length; i++) {
			s = s.replace(diacritics[i][0], diacritics[i][1]);
		}
		return s;
	}

	/**
	 * Czech sort function
	 */
	function czechSort(arr) {
	    var map = {};
	    var index;
	    var _chars = ' aáäaaâbcćčdďeéěëeefghhiíiiîjklĺľmnńňnoóôooöőpqrŕřsśštťuúuůüuuvwxyýzźž0123456789'.toUpperCase();
	    for (var i = 0, item; i < arr.length; i++) { //pro každý prvek
		index = []; //reset indexu
		item = arr[i];
		item.replace("/\s+/g", " ");
		for (var j = 0, ch, pos; j < item.length; j++) {
		    ch = item.substr(j, 1).toUpperCase();
		    //test na ch
		    if (j + 1 < item.length && ch == "C" && item.substr(j + 1, 1).toUpperCase() == "H") {
			pos = 22; //ch je na pozici 22
			j++;
		    } else { //zjistíme správnou pozici písmene
			pos = _chars.indexOf(ch);
		    }

		    index.push(pos < 10? "0" + pos : pos); //potřebujeme 0 prefix
		}
		//uložíme index prvku do mapy
		map[item] = index.join("");
	    }

	    //nyní sortujeme podle nalezených indexů
	    return arr.sort(function(a, b) {
		//získáme indexy
		var a2 = map[a];
		var b2 = map[b];

		if (a2 > b2) { return 1;}
		if (a2 < b2) { return -1;}
		return 0;
	    });
	}

	return {
		replaceNationalChars : function(str) {
			return replaceNationalChars(str);
		},
		czechSort : function(arr) {
			return czechSort(arr);
		}
	};
}();
