//****************************************************
//*********** GET방식으로 전송하기
//****************************************************
function httpRequest( target_url, functionReference) {

	try {
		if( window.XMLHttpRequest ) {	// FireFox(2005.11현재 win용으로 var 1.0.7), Mac OS X 의 Safari 1.3, Opera 8.5에서 동작
			httpObj = new XMLHttpRequest();
		} else if( window.ActiveXObject) {	// IE에서 동작. IE에는 XMLHttpRequest오브젝트가 없다.
			httpObj = new ActiveXObject( "Microsoft.XMLHTTP" );
		} else {
			httpObj = false;
		}
	} catch( e ) {
		httpObj = false;
	}
	if( !httpObj ) {
		httpObjGenerateFail();
	}

	//timerId = setInterval( 'timeoutCheck()', 1000 );
	
	httpObj.open( "GET", target_url, true );

	// onreadystatechange : 오브젝트의 상태가 변경되였을 때 fire된다.
	// 즉 여기서는 httpObj오브젝트의 상태가 변경되였을 때 어느 함수를 호출하겠는가를 지정.
	httpObj.onreadystatechange = function() {

		// readyState : request의 처리상태를 표시하는 값.
		// 즉	0 : 미초기화상태(오브젝트는 생성되 있지만 open method는 호출되지 않은 상태)
		//		1 : request준비(open method는 호출되였지만 send methhod로 질문이 송신되지 않은 상태)
		//		2 : 질의완료(send method 로 질의는 송신되고 봉사기로 부터 응답을 기다리고 있는 상태)
		//		3 : 수신중(봉사기로 부터 응답을 수신하고 있는 상태. 이 단계에서는 수신한 자료를 취급할수는 없다)
		//		4 : 수신완료(봉사기로 부터 모든 응답을 수신한 상태.)
		// status : http protocol에서 리용되는 응답코드.
		// 즉	200 : 정상, 401 : unauthorised, 403 : Forbidden, 404 : Not Found, 500 : Internal Sever Error.
		// httpObj.status(응답코드), httpObj.statusText(응답메세지. 부라우저에 따라 이 값이 undefind일수도)
	
		if ( httpObj.readyState == 4 ) {
			//clearInterval( timerId);
			if ( httpObj.status == 200 ) {
				functionReference( httpObj.responseText );
			} else {
				alert( httpObj.status + ':' + httpObj.statusText );
				return false;
			}
		}
	}

	// GET인 경우에는 봉사기에 보내는 자료가 없다. POST인 경우 인수를 리용하여 봉사기에 보낼 자료를 정의.
	httpObj.send(null);

}

//****************************************************
//*********** POST방식으로 전송하기
//****************************************************

function newXMLHTTP() {
	if(window.XMLHttpRequest) {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch(e) {
			alert("XMLHTTP를 초기화할 수없습니다.");
			return false;
		}
	} else if(window.ActiveXObject) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				alert("XMLHTTP를 초기화할수 없습니다.");
				return false;
			}
		}
	} else {
		alert("XMLHTTP를 초기화할수 없습니다.");
		return false;

	}
	return xmlhttp;
}

function postForm(obj, callback) 
{

	// XMLHTTP 객체 생성
	var xmlhttp = newXMLHTTP();
	if(!xmlhttp) return false;

	var child = obj.elements;
	var data = new Array();
	for(i = 0; i < child.length;i++) {

		//폼 관련 태그가 아닌 경우 무시
		if(child[i].tagName != "INPUT" && child[i].tagName != "TEXTAREA" && child[i].tagName != "SELECT") continue;

		//button 무시
		if(child[i].type == "submit" || child[i].type == "button" || child[i].type == "reset") continue;

		//CHECK, RADIO단추 처리
		if((child[i].type == "radio" || child[i].type == "checkbox") && !child[i].checked) continue;

		//text,password type의 input이나 select에서 required="required"일때 value가 없으면 오유
		if(child[i].getAttributeNode("required") && !child[i].value) {
			child[i].style.backgroundColor = "#FF9";
			child[i].focus();
			alert("해당 항목의 값이 없거나 잘못되였습니다.");
			return false;
		}

	   	data.push ( child[i].name+"="+child[i].value);

	}

	senddata = data.join("&");
	xmlhttp.open("POST", obj.action,true);
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	xmlhttp.send(senddata);

	xmlhttp.onreadystatechange = function() {
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				callback(xmlhttp); //콜백 함수로 수신
			} else {
				alert("자료 전송중 오류가 발생했습니다:\r\n\r\n"+xmlhttp.status+" "+xmlhttp.statusText);
			}
		}
	}
}




