	function getCaretPosition (ctrl) {
		var CaretPos = 0;	// IE Support
		if (document.selection) {
		ctrl.focus ();
			var Sel = document.selection.createRange ();
			Sel.moveStart ('character', -ctrl.value.length);
			CaretPos = Sel.text.length;
		}
		// Firefox support
		else if (ctrl.selectionStart || ctrl.selectionStart == '0')
			CaretPos = ctrl.selectionStart;
		return (CaretPos);
	}
	
	function setCaretPosition(ctrl, pos){
		if(ctrl.setSelectionRange)
		{
			ctrl.focus();
			ctrl.setSelectionRange(pos,pos);
		}
		else if (ctrl.createTextRange) {
			var range = ctrl.createTextRange();
			range.collapse(true);
			range.moveEnd('character', pos);
			range.moveStart('character', pos);
			range.select();
		}
	}

	$(document).ready(function() {
		$('.auto_formatting').keyup( function(event) {
		
			var DASH = '-';
			var NDASH = '–';
			var MDASH = '—';
			var LQUOTE = '«';
			var RQUOTE = '»';
			var LQUOTE_SMALL = '„';
			var RQUOTE_SMALL = '“';
			
			var LETTERS = 'а-яА-ЯёЁa-zA-Z';
			
			var s = this.value;
			
			//Spaces
			s = s.replace(/ +/g,' ');
			
			//Dashes
			s = s.replace(RegExp(DASH+DASH,'g'),NDASH);
			s = s.replace(RegExp(NDASH+DASH,'g'),MDASH);
			s = s.replace(RegExp(DASH+NDASH,'g'),MDASH);
			s = s.replace(RegExp('['+DASH+NDASH+MDASH+']{2,}','g'),MDASH)
			
			s = s.replace(/^-/,MDASH);
			s = s.replace(/([\n\r])-/g,"$1"+MDASH);
			
			s = s.replace(RegExp(' ['+DASH+NDASH+'] ','g'),' '+MDASH+' ');
			s = s.replace(RegExp('(['+LETTERS+'])['+NDASH+MDASH+']','g'),'$1'+DASH);
			s = s.replace(RegExp('([0-9])['+DASH+MDASH+']([0-9])','g'),'$1'+NDASH+'$2');
			
			//Quotes
			s = s.replace(RegExp('['+LQUOTE+RQUOTE+LQUOTE_SMALL+RQUOTE_SMALL+']','g'),'"');
			s = s.replace(/^"/g,LQUOTE);
			s = s.replace(/([\n\r \(])"/g,"$1"+LQUOTE);
			s = s.replace(/"/g,RQUOTE);
			
			//Small quotes
			var depth = 0;
			var new_s='';
			for (var i = 0; i<s.length; i++)
			{
				if (s.charAt(i) == LQUOTE)
				{
					if (depth > 0)
						new_s += LQUOTE_SMALL;
					else 
						new_s += LQUOTE;
					depth++;
				}
				else if (s.charAt(i) == RQUOTE)
				{
					depth--;
					if (depth > 0)
						new_s += RQUOTE_SMALL;
					else 
						new_s += RQUOTE;				
				}
				else
					new_s += s.charAt(i);
			}
			s = new_s;
			
			if (this.value != s)
			{
				var caret = getCaretPosition(this);
				this.value = s;
				setCaretPosition(this,caret);
			}
		})
	});
	
	$(document).ready(function() {
		$('.auto_price').change( function(event) {
		
			var s = this.value;
	
			//Пустую строчку оставим в покое
			if (s.length == 0)
				return;
			//Заменим точки на запятые
			s = s.replace(/\./g,',');
			//Удалим все странные символы
			s = s.replace(/[^,0-9]/g,'');
			//Допишем копейки, если нет
			if (s.indexOf(',') == -1)
				s += ',00';
			if (s.indexOf(',') == s.length - 1)
				s += '00';
			if (s.indexOf(',') == s.length - 2)
				s += '0';		
			//Удалим ведущие нули
			s = s.replace(/^0+/g,'');
			//Допишем ноль рублей
			if (s.indexOf(',') == 0)
				s = '0' + s;
			//Удалим лишний хвост
			s = s.substr(0,s.indexOf(',') + 3);	
			//Если и после этого строка не отвечает шаблону - стереть
			if ( ! s.match(/^[0-9]+,[0-9]{2}$/) )
			{
				alert("Не удалось разобрать цену");
				s = '';
			}
			this.value = s;
	})});

