

PasteSplitter = (Prototype.Browser.IE || Prototype.Browser.Gecko || Prototype.Browser.Opera) ? function() {
	var me = this;
	this.flds = new Array();
	for (var i = 0; i < arguments.length; i++) {
		this.flds[i] = $(arguments[i]);
	}
	this.max_length = this.flds[0].maxLength;
	if (this.flds.length > 0) {
		var fld1 = this.flds[0];
		fld1.observe('keydown', function(event) {
			me.extendMaxLength(event);
		});
		fld1.observe('keyup', function() {
			me.splitPaste();
		});
		if (typeof fld1.onbeforepaste != "undefined") {
			fld1.observe('beforepaste', function(event) {
				me.extendMaxLength(event);
			});
		}
		if (typeof fld1.onpaste != "undefined") {
			fld1.observe('paste', function() {
				setTimeout(function() {
					me.splitPaste();
				}, 10);
			});
		}
	}
} : function() {};

PasteSplitter.prototype.extendMaxLength = function(evt) {
	if (!evt) evt = event;
	if (evt.ctrlKey || evt.type == "beforepaste" || evt.type == "dragenter") {
		var len = this.max_length;
		for (var i = 1; i < this.flds.length; i++) {
			len += this.flds[i].maxLength;
		}
		// add for extra trash characters
		this.flds[0].maxLength = len + 5;
	}
};

PasteSplitter.prototype.splitPaste = function() {
	var s = this.flds[0].value;
	
	s = s.replace(/\D/g, "");
	
	var len = s.length;
		
	if (len <= this.max_length) {
		this.flds[0].value = s;
		if (this.flds.length > 1 && len == this.max_length) {
			this.flds[1].focus();
		}
		return;
	} else {
		var len = 0,
			start = 0,
			el;
		for (var i = 0; i < this.flds.length; i++) {
			el = this.flds[i];
			len = (i > 0) ? el.maxLength : this.max_length;
			el.value = s.substr(start, len);
			if (el.value == "" || el.value.length < len) {
				el.focus();
				el.value = el.value;
				return;
			}
			start += len;
		}
	}
	
	this.flds[0].maxLength = this.max_length;
	
	if (this.flds[0].value == "") {
		this.flds[0].focus();
	}
	if (this.flds[this.flds.length - 1].value != "") {
		this.flds[this.flds.length - 1].focus();
	}
};

PasteSplitter.prototype.splitValue = function(value) {
	if (this.flds.length > 0) {
		this.flds[0].maxLength = value.length;
		this.flds[0].value = value;
		this.splitPaste();
	}
};

