/************************************************************************************************
 * ÇÁ·Î±×·¥¸í : Ajax Engine
 * ÀÛ¼ºÀÚ : Á¤ÈÆÈñ
 * ÀÛ¼ºÀÏ : 2007-03-03
 * Âü°íÃ¥ÀÚ : Ajax In Action
 * ¼Ò½º´Â Ajax In Action¿¡ ÀÖ´Â ¿Ï¼ºÆÇ¼Ò½º¸¦ ±×´ë·Î °¡Á®´Ù »ç¿ëÇßÀ¸¸ç ÁÖ¼® ¼³¸í¸¸ º»ÀÎÀÌ °øºÎÇÏ¸é¼­ ÀÛ¼ºÇßÀ½.
************************************************************************************************/
 
	/* ³×ÀÓ½ºÆäÀÌ½º¿ë °´Ã¼ »ý¼º */
	var net=new Object();
	
	/* »óÅÂ¸¦ ³ªÅ¸³»´Â º¯¼ö ¼±¾ð. °¡µ¶¼ºÀ» ÁÁ°Ô ÇÏ±â À§ÇÏ¿©  ´ë¹®ÀÚ·Î Ç¥±â (»ó¼ö°³³äÀÌ ¾Æ´Ô) */
	net.READY_STATE_UNINITIALIZED=0;
	net.READY_STATE_LOADING=1;
	net.READY_STATE_LOADED=2;
	net.READY_STATE_INTERACTIVE=3;
	net.READY_STATE_COMPLETE=4;
	
	/** STEP.1
	 ****************  ÄÁÅÙÃ÷·Î´õ : ºñµ¿±âÅë½ÅÀ» À§ÇÑ Á¢±Ù ¸Þ¼Òµå ( ÀÌ ¸Þ¼Òµå¸¸ »ç¿ëÇÏ¸é µÈ´Ù.)
	 * <±â´É¼³¸í>
	 * º¯¼ö ÃÊ±âÈ­¸¦ ÇÑ ÈÄ loadJSONDoc() ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù.
	 * <»ç¿ë¹æ¹ý>
	 * var netObj = new new net.ContentLoader(url,onload,onerror,method,params,contentType);  ÀÌ·¸°Ô ÇÏ¸é ¿äÃ»ÀÌ ½ÃÀÛµÈ´Ù.
	 * <ÆÄ¶ó¹ÌÅÍ ¼³¸í>
	 * url : [ÇÊ¼ö] ¿äÃ»¿¡ ÀÀ´äÇÒ ÆäÀÌÁö¸í(°æ·ÎÆ÷ÇÔ) 
	 * onload : [ÇÊ¼ö] ¿äÃ»ÀÇ ÀÀ´äÀÌ ¿Ï·áµÇ¾úÀ»°æ¿ì È£ÃâµÉ ÇÔ¼ö¸í (ÀÌÈÄÃ³¸®)
	 * onerror : [»ý·«°¡´É] ¿¡·¯¹ß»ý½Ã Ã³¸®ÇÒ ÇÔ¼ö¸í
	 * method : [ÇÊ¼ö] GET or POST
	 * params : [»ý·«°¡´É] ¿¬¼ÓµÈ ÆÄ¶ó¹ÌÅÍ ½ºÆ®¸µ ex) name=Hunhee&age=26
	 * contentType : [»ý·«°¡´É] ÄÁÅÙÃ÷À¯Çü
	 */
	net.ContentLoader=function(url,onload,onerror,method,params,contentType) {
		this.req=null;
		this.onload=onload;	//¿Â·Îµå ÀÌº¥Æ®ÇÔ¼ö¿¡ ÀÌÈÄÃ³¸®ÇÒ ÇÔ¼ö¸íÀ» ÁöÁ¤ÇØµÐ´Ù.
		this.onerror=(onerror) ? onerror : this.defaultError;			//µû·Î ÀÛ¼ºÇÑ ErrorÁ¦¾îÇÔ¼ö¸¦ ÀÛ¼º½Ã ÁöÁ¤ÇÑ´Ù.
		this.loadJSONDoc(url,method,params,contentType);		//STEP.2·Î ÀÌµ¿
	}
	
	/** STEP.2
	 **************** JSON¹®¼­·Î´õ
	 * <±â´É¼³¸í>
	 * 1. ³Ñ°Ü¹ÞÀº Method¿Í Content-Type(»ý·«°¡´É)À» ¼³Á¤ÇÑ´Ù.
	 * 2. °¢ ºê¶ó¿ìÁ®º°·Î XMLHttpRequest °´Ã¼¸¦ »ý¼ºÇÑ´Ù.
	 * 3. °´Ã¼°¡ »ý¼ºµÇ¾úÀ»½Ã ¼­¹ö¿¡ ¿äÃ»À» ÇÑ´Ù.
	 */
	net.ContentLoader.prototype.loadJSONDoc=function(url,method,params,contentType) {
		if (!method) {
			method="GET";
		}
		if (!contentType && method=="POST") {
			contentType='application/x-www-form-urlencoded';
		}
		if (window.XMLHttpRequest) {
			this.req=new XMLHttpRequest();		// IE7 , Mozila FireFox , ±âÅ¸ºê¶ó¿ìÀú..
		} else if (window.ActiveXObject) {
			this.req=new ActiveXObject("Microsoft.XMLHTTP");	// IE5 , IE6
		}
		if (this.req) {
			try {
				var loader=this;
				//readyState »óÅÂ°¡ º¯µ¿ µÉ¶§ ½ÇÇàµÇ´Â ÀÌº¥Æ® ÇÔ¼ö. (ÄÝ¹éÇÔ¼ö¶ó ºÒ¸°´Ù.)  *Á¦ÀÏ Áß¿äÇÑ ÇÙ½ÉÇÔ¼ö¶ó ÇÒ ¼ö ÀÖ´Ù.
				this.req.onreadystatechange=function() {
					net.ContentLoader.onReadyState.call(loader);
				}
				//readyState¸¦ ·ÎµùÇÑ´Ù. readyState¸¦ ·ÎµùÇÒ°æ¿ì »óÅÂº¯È­´Â 1¹ø¸¸ ÀÖ´Ù.
				//¿©±â¼­ readyState »óÅÂ°¡ º¯µ¿µÇ¹Ç·Î À§ÀÇ ÀÌº¥Æ® ÇÔ¼ö(ÄÝ¹éÇÔ¼ö)¸¦ È£ÃâÇÑ´Ù.
				this.req.open(method,url,true);
				if (contentType) {
					this.req.setRequestHeader('Content-Type', contentType);
				}
				//ÀÌÁ¦ ¿äÃ»À» ³¯¸°´Ù!! ¿ª½Ã onready »óÅÂ°¡ º¯µ¿µÇ¹Ç·Î ÀÌº¥Æ®ÇÔ¼ö¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ÀÌ send() ¸Þ¼Òµå¸¦ ½ÇÇàÇÏ¸é 4´Ü°èÀÇ »óÅÂº¯È­¸¦ °ÅÄ£´Ù.
				//±×¸®°í url¿¡ ÇØ´çÇÏ´Â ÆÄÀÏÀÌ ¾øÀ»°æ¿ì³ª ±âÅ¸ ¿¡·¯¹ß»ý½Ã catch·Î Á¦¾î±ÇÀÌ ³Ñ¾î°¡°í ¿¡·¯¸Þ¼¼Áö¸¦ È£ÃâÇÏ°Ô µÈ´Ù.
				this.req.send(params);
			} catch (err) {
				this.onerror.call(this);
			}
		}
	}
	
	/* readyState»óÅÂ¸¦ Ã¼Å©ÇÏ°í ±×¿¡ ¸Â´ëÀÀÇÏ´Â ÇÔ¼ö */
	net.ContentLoader.onReadyState=function() {
		var req=this.req;
		var ready=req.readyState;

		//»óÅÂ¸¦ È®ÀÎÇÑ´Ù. ready°¡ 4ÀÌ¸é ÀÀ´äÀÌ ¿Ï·áµÈ°ÍÀÌ´Ù.
		if (ready==net.READY_STATE_COMPLETE) {
			var httpStatus=req.status;
			//¿äÃ»ÀÌ Á¤»óÀûÀ¸·Î ¸¶ÃÆ´Ù¸é onloadÀÌº¥Æ®¸¦ ¹ß»ý½ÃÄÑ À§¿¡¼­ ÁöÁ¤ÇØµÎ¾ú´ø ¸Þ¼Òµå(ÀÌÈÄÃ³¸®)¸¦ È£ÃâÇÑ´Ù.
			if (httpStatus==200 || httpStatus==0) {
				this.onload.call(this);
			} else {
				this.onerror.call(this);
			}
		}
	}	
	
	/* ¿¡·¯ Ãâ·ÂÇÔ¼ö */
	net.ContentLoader.prototype.defaultError=function() {
		alert("error fetching data!"
		+"\n\nreadyState:"+this.req.readyState
		+"\nstatus: "+this.req.status
		+"\nheaders: "+this.req.getAllResponseHeaders());
	}

	