function getXMLHttpRequest() {
	try {
		return new XMLHttpRequest();
	} catch(e) {
		try {
			return new ActiveXObject('Msxml2.XMLHTTP');
		} catch(e) {
			try {
				return new ActiveXObject('Microsoft.XMLHTTP');
			} catch(e) {
				return null;
			}
		}
	}
}

function formSerialize(form) {
	var elements = form.elements;
	var serializedString = '';

	for(var i = 0; i < elements.length; i++) {  
		if(elements[i].disabled || !elements[i].name) {
			continue;
		}
		serializedString += (i ? '&' : '') + elements[i].name + '=' + encodeURIComponent(elements[i].value);
	}
	return serializedString;
}

function contentFormCheck(form) {
	var invalidInput = null;

	if(form.elements['name'] && !trim(form.elements['name'].value)) {
		alert('이름을 입력해주세요.');
		invalidInput = form.elements['name'];
	} else if(form.elements['password'] && !trim(form.elements['password'].value)) {
		alert('비밀번호를 입력해주세요.');
		invalidInput = form.elements['password'];
	} else if(form.elements['title'] && !trim(form.elements['title'].value)) {
		alert('제목을 입력해주세요.');
		invalidInput = form.elements['title'];
	} else if(form.elements['content'] && !trim(form.elements['content'].value)) {
		alert('내용을 입력해주세요.');
		invalidInput = form.elements['content'];
	}

	if(invalidInput) {
		invalidInput.focus();
		return false;
	} else {
		window.onbeforeunload = null;
		return true;
	}
}

function searchFormCheck(form) {
	if(!trim(form.elements['keyword'].value)) {
		alert('검색어를 입력해주세요.');
		form.elements['keyword'].focus();
		return false;
	}
	return true;
}

function loginFormCheck(form) {
	var invalidInput = null;

	if(!trim(form.elements['id'].value)) {
		alert('아이디를 입력해주세요.');
		invalidInput = form.elements['id'];
	} else if(!isValidId(form.elements['id'].value)) {
		alert('아이디는 영문, 숫자, _ 로만 이루어져야 합니다.');
		invalidInput = form.elements['id'];
	} else if(!trim(form.elements['password'].value)) {
		alert('비밀번호를 입력해주세요.');
		invalidInput = form.elements['password']
	}

	if(invalidInput) {
		invalidInput.focus();
		return false;
	} else {
		return true;
	}
}

function joinFormCheck(form) {
	var invalidInput = null;

	if(!trim(form.elements['id'].value)) {
		alert('아이디를 입력해주세요.');
		invalidInput = form.elements['id'];
	} else if(!isValidId(form.elements['id'].value)) {
		alert('아이디는 영문, 숫자, _ 로만 이루어져야 합니다.');
		invalidInput = form.elements['id'];
	} else if(!trim(form.elements['password'].value)) {
		alert('비밀번호를 입력해주세요.');
		invalidInput = form.elements['password'];
	} else if(!trim(form.elements['passwordCheck'].value)) {
		alert('재확인 비밀번호를 입력해주세요.');
		invalidInput = form.elements['passwordCheck'];
	} else if(form.elements['password'].value != form.elements['passwordCheck'].value) {
		alert('입력하신 비밀번호와 재확인 비밀번호가 다릅니다.');
		invalidInput = form.elements['passwordCheck'];
	} else if(!trim(form.elements['name'].value)) {
		alert('이름을 입력해주세요.');
		invalidInput = form.elements['name'];
	} else if(!trim(form.elements['nickname'].value)) {
		alert('닉네임을 입력해주세요.');
		invalidInput = form.elements['nickname'];
	} else if(!trim(form.elements['email'].value)) {
		alert('이메일 주소를 입력해주세요.');
		invalidInput = form.elements['email'];
	} else if(!isValidEmailAddress(form.elements['email'].value)) {
		alert('올바른 이메일 주소가 아닙니다.');
		invalidInput = form.elements['email'];
	} else if(!isValidDate(form.elements['birthdayYear'].value, form.elements['birthdayMonth'].value, form.elements['birthdayDay'].value)) {
		alert('올바른 생일 날짜가 아닙니다.');
		invalidInput = form.elements['birthdayYear'];
	}

	if(invalidInput) {
		invalidInput.focus();
		return false;
	} else {
		return true;
	}
}

function memberEditFormCheck(form) {
	var invalidInput = null;

	if(form.elements['password'].value != form.elements['passwordCheck'].value) {
		alert('입력하신 비밀번호와 재확인 비밀번호가 다릅니다.');
		invalidInput = form.elements['passwordCheck'];
	} else if(!trim(form.elements['name'].value)) {
		alert('이름을 입력해주세요.');
		invalidInput = form.elements['name'];
	} else if(!trim(form.elements['nickname'].value)) {
		alert('닉네임을 입력해주세요.');
		invalidInput = form.elements['nickname'];
	} else if(!trim(form.elements['email'].value)) {
		alert('이메일 주소를 입력해주세요.');
		invalidInput = form.elements['email'];
	} else if(!isValidEmailAddress(form.elements['email'].value)) {
		alert('올바른 이메일 주소가 아닙니다.');
		invalidInput = form.elements['email'];
	} else if(!isValidDate(form.elements['birthdayYear'].value, form.elements['birthdayMonth'].value, form.elements['birthdayDay'].value)) {
		alert('올바른 생일 날짜가 아닙니다.');
		invalidInput = form.elements['birthdayYear'];
	}

	if(invalidInput) {
		invalidInput.focus();
		return false;
	} else {
		return true;
	}
}

function isValidId(id) {
	return (/(^[a-zA-Z0-9_]+$)/.test(id));
}
function isValidEmailAddress(address) {
	return (/^([a-zA-Z0-9_-]+)@([a-zA-Z0-9_-]+)(\.[a-zA-Z0-9_-]+){1,2}$/.test(address));
}
function isValidDate(year, month, day) {
    var dateVar = new Date(year, month, day);
    return (dateVar.getFullYear() == year && dateVar.getMonth() == month && dateVar.getDate() == day);
}

function trim(str) {
   return str.replace(/^\s*/, '').replace(/\s*$/, '');
}
