// +--------------------------------------------------------+
// | License : BSD                                          |
// +--------------------------------------------------------+
//
// $Id: jquery.format.tel.0.0.5.js, 2009. 5. 1. crucify Exp $

var XENOTEL_TYPEPATTERN = /^(?:0(?:(1[016789][1-9])|(2|3[123]|4[123]|5[12345]|6[1234][1-9])|(70[78])|(80))|(15(?:44|88|99)|16(?:44:88)))/;
var XENOTEL_CELLPATTERN = /^(0(?:1[016789]))([1-9]\d{2,3})(\d{4})$/;
var XENOTEL_TELPATTERN = /^(0(?:2|3[123]|4[123]|5[12345]|6[1234]))([1-9]\d{2,3})(\d{4})$/;
var XENOTEL_INTERNETPATTERN = /^(070)([78]\d{3})(\d{4})$/;
var XENOTEL_FREEPATTERN = /^(080)(\d{3})(\d{4})$/;
var XENOTEL_KEYPATTERN = /^(15(?:44|88|99)|16(?:44:88))(\d{4})$/;

function XenoTelNumFormatterFormat()
{
	var val = this.value.replace(/[^\d]/g, '');
	if(this.value != val) {
		var caret = $(this).caret();
		caret = this.value.substr(0, caret).replace(/[^\d]/g, '').length;
		this.value = val;
		$(this).caret(caret);
	}
	this.xenotnfres = XenoTelNumDetector(this.value);
	if(this.xenotnfres.type == 0) {
		$(this).addClass('wrongTelNum');
	} else {
		$(this).removeClass('wrongTelNum');
	}
}

function XenoTelNumFormatterBlur()
{
	$(this).each(XenoTelNumFormatterFormat);
	if(this.xenotnfres.type != 0) {
		this.value = this.xenotnfres.values.join('-');
	}
}

function XenoTelNumDetector(telnum)
{
	var result = new Object();
	result.type = 0;
	result.values = new Array();
	if(XENOTEL_TYPEPATTERN.test(telnum)) {
		if(RegExp.$1 != '') {
			result.type = 1;
		} else if(RegExp.$2 != '') {
			result.type = 2;
		} else if(RegExp.$3 != '') {
			result.type = 3;
		} else if(RegExp.$4 != '') {
			result.type = 4;
		} else if(RegExp.$5 != '') {
			result.type = 5;
		}
		switch(result.type) {
			case 1:
				if(XENOTEL_CELLPATTERN.test(telnum)) {
					result.values.push(RegExp.$1);
					result.values.push(RegExp.$2);
					result.values.push(RegExp.$3);
				} else {
					result.type = 0;
				}
				break;
			case 2:
				if(XENOTEL_TELPATTERN.test(telnum)) {
					result.values.push(RegExp.$1);
					result.values.push(RegExp.$2);
					result.values.push(RegExp.$3);
				} else {
					result.type = 0;
				}
				break;
			case 3:
				if(XENOTEL_INTERNETPATTERN.test(telnum)) {
					result.values.push(RegExp.$1);
					result.values.push(RegExp.$2);
					result.values.push(RegExp.$3);
				} else {
					result.type = 0;
				}
				break;
			case 4:
				if(XENOTEL_FREEPATTERN.test(telnum)) {
					result.values.push(RegExp.$1);
					result.values.push(RegExp.$2);
					result.values.push(RegExp.$3);
				} else {
					result.type = 0;
				}
				break;
			case 5:
				if(XENOTEL_KEYPATTERN.test(telnum)) {
					result.values.push(RegExp.$1);
					result.values.push(RegExp.$2);
				} else {
					result.type = 0;
				}
				break;
			default:
				result.type = 0;
				break;
		}
	}
	return result;
}

function PhoneFormatterSet()
{
	$(this).keyup(XenoTelNumFormatterFormat).focus(XenoTelNumFormatterFormat).blur(XenoTelNumFormatterBlur).each(XenoTelNumFormatterBlur);
}

