//
//  jQuery Slug Plugin by Perry Trinier (perrytrinier@gmail.com)
//  MIT License: http://www.opensource.org/licenses/mit-license.php

jQuery.fn.slug = function(options) {
	var settings = {
		slug: 'slug', // Class used for slug destination input and span. The span is created on $(document).ready()
		hide: true    // Boolean - By default the slug input field is hidden, set to false to show the input field and hide the span.
	};

	if(options) {
		jQuery.extend(settings, options);
	}

	$this = $(this);

	$(document).ready( function() {
		if (settings.hide) {
			$('input.' + settings.slug).after("<span class="+settings.slug+"></span>");
			$('input.' + settings.slug).hide();
		}
	});

	var transliterate = function(str) {
		var rExps=[
			{re: /ä|æ|ǽ/g, ch: 'ae'},
			{re: /ö|œ/g, ch: 'oe'},
			{re: /ü/g, ch: 'ue'},
			{re: /Ä/g, ch: 'Ae'},
			{re: /Ü/g, ch: 'Ue'},
			{re: /Ö/g, ch: 'Oe'},
			{re: /À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/g, ch: 'A'},
			{re: /à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/g, ch: 'a'},
			{re: /Ç|Ć|Ĉ|Ċ|Č/g, ch: 'C'},
			{re: /ç|ć|ĉ|ċ|č/g, ch: 'c'},
			{re: /Ð|Ď|Đ/g, ch: 'D'},
			{re: /ð|ď|đ/g, ch: 'd'},
			{re: /È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/g, ch: 'E'},
			{re: /è|é|ê|ë|ē|ĕ|ė|ę|ě/g, ch: 'e'},
			{re: /Ĝ|Ğ|Ġ|Ģ/g, ch: 'G'},
			{re: /ĝ|ğ|ġ|ģ/g, ch: 'g'},
			{re: /Ĥ|Ħ/g, ch: 'H'},
			{re: /ĥ|ħ/g, ch: 'h'},
			{re: /Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/g, ch: 'I'},
			{re: /ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/g, ch: 'i'},
			{re: /Ĵ/g, ch: 'J'},
			{re: /ĵ/g, ch: 'j'},
			{re: /Ķ/g, ch: 'K'},
			{re: /ķ/g, ch: 'k'},
			{re: /Ĺ|Ļ|Ľ|Ŀ|Ł/g, ch: 'L'},
			{re: /ĺ|ļ|ľ|ŀ|ł/g, ch: 'l'},
			{re: /Ñ|Ń|Ņ|Ň/g, ch: 'N'},
			{re: /ñ|ń|ņ|ň|ŉ/g, ch: 'n'},
			{re: /Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/g, ch: 'O'},
			{re: /ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/g, ch: 'o'},
			{re: /Ŕ|Ŗ|Ř/g, ch: 'R'},
			{re: /ŕ|ŗ|ř/g, ch: 'r'},
			{re: /Ś|Ŝ|Ş|Š/g, ch: 'S'},
			{re: /ś|ŝ|ş|š|ſ/g, ch: 's'},
			{re: /Ţ|Ť|Ŧ/g, ch: 'T'},
			{re: /ţ|ť|ŧ/g, ch: 't'},
			{re: /Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/g, ch: 'U'},
			{re: /ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/g, ch: 'u'},
			{re: /Ý|Ÿ|Ŷ/g, ch: 'Y'},
			{re: /ý|ÿ|ŷ/g, ch: 'y'},
			{re: /Ŵ/g, ch: 'W'},
			{re: /ŵ/g, ch: 'w'},
			{re: /Ź|Ż|Ž/g, ch: 'Z'},
			{re: /ź|ż|ž/g, ch: 'z'},
			{re: /Æ|Ǽ/g, ch: 'AE'},
			{re: /ß/g, ch: 'ss'},
			{re: /Ĳ/g, ch: 'IJ'},
			{re: /ĳ/g, ch: 'ij'},
			{re: /Œ/g, ch: 'OE'},
			{re: /ƒ/g, ch: 'f'}
		];
		for (var i=0, len=rExps.length; i<len; i++) {
			str = str.replace(rExps[i].re, rExps[i].ch);
		}
		return str;
	}

	makeSlug = function() {
		var slug = transliterate(jQuery.trim($this.val()))
			.replace(/\s+/g,'-').replace(/[^a-zA-Z0-9\-]/g,'').toLowerCase()
			.replace(/\-{2,}/g,'-')
			.replace(/\-$/, '')
			.replace(/^\-/, '')
			;
		$('input.' + settings.slug).val(slug);
		$('span.' + settings.slug).text(slug);
	}

	$(this).keyup(makeSlug);

	return $this;
};