// require translit class (http://pixel-apes.com/translit)
Element.Autotranslit = Class.create({
	initialize: function(element, dest, options) {
		this.options = options || {};
		this.source = $(element);
		this.dest = $(dest);
		this.interval = null;
		this.timeout = this.options['timeout'] || 100;
		this.tr = new Translit();
		
		this.source.observe('focus', this.startObserve.bind(this));
		this.source.observe('blur', this.stopObserve.bind(this));
	},
	
	startObserve: function() {
		if (Autotranslit.enabled) {
			this.interval = window.setInterval(function() {this.sync()}.bind(this), this.timeout);
		}			
	},
	
	stopObserve: function() {
		clearInterval(this.interval);	
	},
	
	sync: function() {
		this.dest.value = this.tr.UrlTranslit(this.source.value, false);
	} 
});

Element.addMethods({
	autotranslit: function(element, dest, options) {
		return new Element.Autotranslit(element, dest, options); 
	}
});

var Autotranslit = {
	enabled: true,
	source_rule: '.translit_source',
	dest_rule: '.translit_dest',
	field_class_prefix: 'tf_',
	
	enable: function() {
		this.enabled = true;
	},
	
	disable: function() {
		this.enabled = false;
	},
	
	bindByRule: function(rule) {
		if (!this.enabled) { return; }
		var rule = rule || '';
		if (rule.length) { rule += ' '; }
		var source_rule = rule + this.source_rule; 
		var dest_rule = rule + this.dest_rule; 
		var prefix = this.field_class_prefix; 
		
		$$(source_rule).each(function(source) {
			var field_class = source.classNames().find(function(name) { return name.substr(0, prefix.length) == prefix; });
			if (!Object.isUndefined(field_class)) { 
				var dest = $$(dest_rule + '.' + field_class).first();
				if (!Object.isUndefined(dest)) {
					source.autotranslit(dest);
				} 
			}
		});
	}	
};


