function format_date(object) {
	if(!object.value){
		return;
	}

	var tokenized = ((object.value.replace(/[^\/0-9a-zA-Z]/g, "")).toUpperCase()).split("/");

	if(!tokenized[1]){
		if(tokenized[0].length<=6){
			tokenized[2] = tokenized[0].substring(4,6);
			tokenized[1] = tokenized[0].substring(2,4);
			tokenized[0] = tokenized[0].substring(0,2);
		}
		else{
			tokenized[2] = tokenized[0].substring(4,8);
			tokenized[1] = tokenized[0].substring(2,4);
			tokenized[0] = tokenized[0].substring(0,2);
		}
	}


	//Year check
	tokenized[2] = tokenized[2].replace(/[^0-9]/g, "");
	if(tokenized[2]*1<100){
		tokenized[2] = "20" + tokenized[2];
	}

	if(tokenized[2]*1>2038){
		tokenized[2] = "2037";
	}
	else if(tokenized[2]*1<2000){
		tokenized[2] = "2008";
	}

	//Month check
	switch(tokenized[0]){
		case "JAN":
		case "JANUARY":
			tokenized[0] = "01";
			break;
		case "FEB":
		case "FEBRUARY":
			tokenized[0] = "02";
			break;
		case "MAR":
		case "MARCH":
			tokenized[0] = "03";
			break;
		case "APR":
		case "APRIL":
			tokenized[0] = "04";
			break;
		case "MAY":
			tokenized[0] = "05";
			break;
		case "JUN":
		case "JUNE":
			tokenized[0] = "06";
			break;
		case "JUL":
		case "JULY":
			tokenized[0] = "07";
			break;
		case "AUG":
		case "AUGUST":
			tokenized[0] = "08";
			break;
		case "SEP":
		case "SEPTEMBER":
			tokenized[0] = "09";
			break;
		case "OCT":
		case "OCTOBER":
			tokenized[0] = "10";
			break;
		case "NOV":
		case "NOVEMBER":
			tokenized[0] = "11";
			break;
		case "DEC":
		case "DECEMBER":
			tokenized[0] = "12";
			break;
	}
	if(tokenized[0]*1>12){
		tokenized[0] = "12";
	}
	else if(tokenized[0]*1<1 || isNaN(tokenized[0])){
		tokenized[0] = "01";
	}
	else if(tokenized[0]*1<10){
		tokenized[0] = "0" + tokenized[0]*1;
	}

	//Day check
	if(tokenized[1]*1>28){
		if(tokenized[1]*1>31){
			tokenized[1] = "31";
		}
		else{
			switch(tokenized[0]){
				case "02":
					tokenized[1] = "28";
					//Leap year check
					if(tokenized[2]%4==0 && (tokenized[2]%100>0 || (tokenized[2]%100==0 && tokenized[2]%400==0))){
						tokenized[1] = "29";
					}
					break;
				case "04":
				case "06":
				case "09":
				case "11":
					if(tokenized[1]*1>30){
						tokenized[1] = "30";
					}
					break;
			}
		}
	}
	else if(tokenized[1]*1<1){
		tokenized[1] = "01";
	}
	else if(tokenized[1]*1<10){
		tokenized[1] = "0" + tokenized[1]*1;
	}

	object.value = tokenized[0] + "/" + tokenized[1] + "/" + tokenized[2];
}

function format_time(object) {
	if(!object.value){
		return;
	}

	time = object.value.replace(/[^0-9]/g, "");

	if(time.length<3){
		object.value = "12:00";
		return;
	}
	else if(time.length==3){
		time = time.substring(0,1) + ":" + time.substring(1);
	}
	else if(time.length>3){
		time = time.substring(0,2) + ":" + time.substring(2);
	}

	var tokenized = time.split(":");

	if(object.value.indexOf("p")==object.value.length-1 && tokenized[0]<=12){
		tokenized[0] += 12;
	}
	if(object.value.indexOf("a")==object.value.length-1 && tokenized[0]>=12){
		tokenized[0] -= 12;
	}
	tokenized[0]%=24;
	tokenized[1]%=60;

	object.value = (tokenized[0]<10?"0":"") + tokenized[0] + ":" + (tokenized[1]<10?"0":"") +  tokenized[1];
}

function format_name(object) {
	if(!object.value){
		return;
	}

	var name = (object.value.replace(/[^a-zA-Z .\'`-]/g, "")).toLowerCase();

	if(!name.replace(/[ -]/g, "")){
		return;
	}

	var tokenized_hyphen = object.value.split("-");

	object.value="";

	for(index = 0; index < tokenized_hyphen.length; index++){
		if(index){
			object.value += "-";
		}

		var tokenized_space = tokenized_hyphen[index].split(" ");

		for(index2 = 0; index2 < tokenized_space.length; index2++){
			if(index2){
				object.value += " ";
			}

			switch(tokenized_space[index2]){
				case "de":
				case "la":
				case "van":
					break;
				default:
					tokenized_space[index2] = (tokenized_space[index2].substring(0,1)).toUpperCase() + (tokenized_space[index2].substring(1)).toLowerCase();
					if(tokenized_space[index2].substring(0,2)=="Mc" || tokenized_space[index2].substring(0,2)=="La" || tokenized_space[index2].substring(1,2)=="'"){
						tokenized_space[index2] = tokenized_space[index2].substring(0,2) + (tokenized_space[index].substring(2,3)).toUpperCase()  + (tokenized_space[index2].substring(3)).toLowerCase();
					}
					else if(tokenized_space[index2].substring(0,3)=="Mac" || tokenized_space[index2].substring(0,3)=="Van"){
						tokenized_space[index2] = tokenized_space[index2].substring(0,3) + (tokenized_space[index2].substring(3,4)).toUpperCase()  + (tokenized_space[index2].substring(4)).toLowerCase();
					}
					break;
			}

			object.value += tokenized_space[index2];
		}
	}
}

function format_number(object) {
	if(!object.value){
		object.value = "0";
	}

	var number = object.value.replace(/[^.0-9-]/g, "");
	number = number.substring(0,1) + (number.substring(1)).replace(/-/g, "");

	var tokenized = number.split(".");

	if(tokenized.length==1){
		number = tokenized[0];
	}
	else if(tokenized.length>1){
		number = tokenized[0] + "." + tokenized[1];
	}

	if(isNaN(number)){
		object.value = "0";
	}
	else{
		object.value = number;
	}
}

function format_phone(object){
	var phone = object.value.replace(/[^0-9a-zA-Z#*]/g, "");
	phone = phone.replace(/[abcABC]/g, "2");
	phone = phone.replace(/[defDEF]/g, "3");
	phone = phone.replace(/[ghiGHI]/g, "4");
	phone = phone.replace(/[jklJKL]/g, "5");
	phone = phone.replace(/[mnoMNO]/g, "6");
	phone = phone.replace(/[pqrsPQRS]/g, "7");
	phone = phone.replace(/[tuvTUV]/g, "8");
	phone = phone.replace(/[wxyzWXYZ]/g, "9");

	if(!object.value){
		return;
	}
	else if(phone.length<7){
		object.value = "";
	}
	else if(phone.length==7){
		object.value = phone.substring(0,3) + "-" + phone.substring(3,7);
	}
	else if(phone.length<10){
		object.value = phone.substring(0,3) + "-" + phone.substring(3,7) + " ext." + phone.substring(7,9);
	}
	else if(phone.length==10){
		object.value = "1 (" + phone.substring(0,3) + ") " + phone.substring(3,6) + "-" + phone.substring(6,10);
	}
	else if(phone.length==11){
		object.value = "1 (" + phone.substring(1,4) + ") " + phone.substring(4,7) + "-" + phone.substring(7,11);
	}
	else{
		object.value = "+0" + phone;
	}
}

function format_zip(object){
	if(!object.value){
		return;
	}

	var zip_code = (object.value.replace(/[^0-9a-zA-Z -]/g, "")).toUpperCase();

	if((zip_code.split("-")).length>2 || (zip_code.split(" ")).length>2){
		object.value = "";
		return;
	}

	if(zip_code.length<5){
		object.value = "";
	}
	else if(zip_code.length>10){
		object.value = zip_code.substring(0,10);
	}
	else{
		object.value = zip_code;
	}
}

function format_email(object){
	var email = (object.value.replace(/[^0-9a-zA-z.@_!#$%*\/?|\^{}`~&\'+=_-]/g, "")).replace(/[\\]/g, "");

	var tokenized = email.split("@");
	if(tokenized.length!=2){
		object.value = "";
	}
	else{

		tokenized_user = tokenized[0].split(".");
		tokenized_domain = (tokenized[1].replace(/[^0-9a-zA-z.-]/g, "")).split(".");
		if(tokenized_domain.length<2){
			object.value = "";
		}
		else{
			for(index=0; index<tokenized_user.length; index++){
				if(!tokenized_user[index].length){
					object.value = "";
					return;
				}
			}
			for(index=0; index<tokenized_domain.length; index++){
				if(!tokenized_domain[index].length && index!=tokenized_domain.length-1){
					object.value = "";
					return;
				}
			}
			object.value=email;
		}
	}

}

function format_string(object) {
}
