
// ****************************************************************************************************
//
// Filename		:	ajax.js
// Create Date	:	2006-07-12
// Modify Date  :   
// Description	:	XMLHttpRequest Ã³¸®¸¦ À§ÇÑ Class
// Reference	:	
//
// ****************************************************************************************************


// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : XMLHttpRequest °´Ã¼¸¦ »ý¼ºÇÏ´Â »ý¼ºÀÚ
//
// ****************************************************************************************************

var AJAX = {
	XmlHttp : null,
    create: function () 
    {
		if ( window.XMLHttpRequest )								// branch for native XMLHttpRequest object
		{
			try 
			{
				AJAX.XmlHttp = new XMLHttpRequest();
                // ÀÏºÎÀÇ ¸ðÁú¶ó ¹öÀüÀ»Àº readyState property, onreadystate event
                // ¸¦ Áö¿øÇÏÁö ¾ÊÀ¸¹Ç·Î. - from xmlextrs
                if ( this.XmlHttp.readyState == null ) 
                {
                    this.XmlHttp.readyState = 1;
                    this.XmlHttp.addEventListener("load", function () {
                            this.XmlHttp.readyState = 4;
                            if ( typeof this.XmlHttp.onreadystatechange == "function" )
                                    this.XmlHttp.onreadystatechange();
                    }, false);
                }
		    } 
		    catch(e) 
		    {
				AJAX.XmlHttp = false;
				alert("Your browser does not support XmlHttp objects");
		    }
		} 
		else if ( window.ActiveXObject )							// branch for IE/Windows ActiveX version
		{
		   	try 
		   	{
		    	AJAX.XmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		  	} 
		  	catch(e) 
		  	{
		    	try 
		    	{
		      		AJAX.XmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		    	} 
		    	catch(e) 
		    	{
		      		AJAX.XmlHttp = false;
					alert("Your browser does not support XmlHttp objects");
		    	}
			}
		}
    }
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö¿¡¼­ ÀÀ´ä¹Þ´Â µ¥ÀÌÅÍ°¡ XML ÇüÅÂÀÏ¶§
//	2. Parameters
//		- method : GET, POST
//      - url : ¿äÃ»ÇÒ URL
//      - async : µ¿±â(false), ºñµ¿±â(true)
//		- uname : ÇØ´ç ÆÄÀÏÀÇ ±ÇÇÑ À¯Àú¸í
//		- pswd : ÇØ´ç ÆÄÀÏÀÇ ±ÇÇÑ ÆÐ½º¿öµå
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.openXML = function ( method, url, async, uname, pswd ) 
{
    if ( AJAX.XmlHttp != null ) 
    {
        if ( uname == undefined ) 
        {
            AJAX.XmlHttp.open( method, url, async );
        } 
        else 
        {
            AJAX.XmlHttp.open( method, url, async, uname, pswd );
        }
		AJAX.XmlHttp.onreadystatechange = function () 
		{
		    if ( AJAX.XmlHttp.readyState == 4 ) 
		    {
		        if ( AJAX.XmlHttp.status == 200 ) 
		        { // 200 Àº HTTP¿¡¼­ ¼º°ø i.e) 404 : not found
                    AJAX.statusSuccessHandler( AJAX.XmlHttp.responseXML.xml );
		        } 
		        else 
		        {
		            AJAX.statusErrorHandler();					
		            alert('Error while loading!');
		        }
		    }
		}
    } 
    else 
    {
        alert("need to create xmlhttp object");
    }
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö¿¡¼­ ÀÀ´ä¹Þ´Â µ¥ÀÌÅÍ°¡ TEXT ÇüÅÂÀÏ¶§
//	2. Parameters
//		- method : GET, POST
//      - url : ¿äÃ»ÇÒ URL
//      - async : µ¿±â(false), ºñµ¿±â(true)
//		- uname : ÇØ´ç ÆÄÀÏÀÇ ±ÇÇÑ À¯Àú¸í
//		- pswd : ÇØ´ç ÆÄÀÏÀÇ ±ÇÇÑ ÆÐ½º¿öµå
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.openText = function ( method, url, async, uname, pswd ) 
{
    if ( AJAX.XmlHttp != null ) 
    {
        if ( uname == undefined ) 
        {
            AJAX.XmlHttp.open( method, url, async );
        } 
        else 
        {
            AJAX.XmlHttp.open( method, url, async, uname, pswd );
        }
        AJAX.XmlHttp.onreadystatechange = function () {
            if ( AJAX.XmlHttp.readyState == 4 ) 
            {
                if ( AJAX.XmlHttp.status == 200 ) 
                { // 200 Àº HTTP¿¡¼­ ¼º°ø i.e) 404 : not found
                    AJAX.statusSuccessHandler( AJAX.XmlHttp.responseText );
                } 
                else 
                {
                    AJAX.statusErrorHandler();					
                    alert('Error while loading!');
                }
            }
        }
    } 
	else 
	{
        alert("need to create xmlhttp object");
    }
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·Î µ¥ÀÌÅÍ¸¦ Àü¼ÛÇÒ¶§
//	2. Parameters
//		- content : ¼­¹ö·Î Àü¼ÛÇÒ µ¥ÀÌÅÍ
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.send = function ( content ) 
{
    if ( content == undefined )
        AJAX.XmlHttp.send( null );
    else
        AJAX.XmlHttp.send( content );
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú¿¡ ´ëÇÑ »óÅÂÄÚµå°¡ º¯°æµÇ¾úÀ» ¶§ ¼öÇàÇØ¾ß ÇÏ´Â ½ºÅ©¸³Æ® ÇÔ¼ö¸¦ ÁöÁ¤
//	2. Parameters
//		- funcname : ÇÔ¼ö¸í
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.setOnReadyStateChange = function ( funcname ) 
{
    if ( AJAX.XmlHttp ) 
    {
        AJAX.XmlHttp.onreadystatechange = funcname;
    } 
	else 
	{
        alert ("need to create xmlhttp object");
    }
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú°¡ ¼º°ø(200) ÀÏ ¶§ ±âº» Ã³¸® ÇÔ¼ö
//	2. Parameters
//		- data : ÀÀ´ä µ¥ÀÌÅÍ
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.statusSuccessHandler = function ( data ) 
{
    //alert(data);
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú°¡ ½ÇÆÐ(200À» Á¦¿ÜÇÑ ´Ù¸¥ ÄÚµå) ÀÏ ¶§ ±âº» Ã³¸® ÇÔ¼ö
//	2. Parameters
//		- data : ÀÀ´ä µ¥ÀÌÅÍ
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.statusErrorHandler = function ( status ) 
{
    AJAX.rtnText = AJAX.XmlHttp.responseText;
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú°¡ ¼º°ø(200) ÀÏ ¶§ Ã³¸® ÇÔ¼ö ÁöÁ¤
//	2. Parameters
//		- funcname : ÇÔ¼ö¸í ¹× ³»¿ë
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.setStatusSuccessHandler = function ( funcname ) 
{
    AJAX.statusSuccessHandler = funcname;
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : ¼­¹ö·ÎºÎÅÍÀÇ Ã³¸® °á°ú°¡ ½ÇÆÐ(200À» Á¦¿ÜÇÑ ´Ù¸¥ ÄÚµå) ÀÏ ¶§ Ã³¸® ÇÔ¼ö ÁöÁ¤
//	2. Parameters
//		- funcname : ÇÔ¼ö¸í ¹× ³»¿ë
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.setStatusErrorHandler = function ( funcname ) 
{
    AJAX.statusErrorHandler = funcname;
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : HTTP HeaderÀÇ label°ú value¸¦ Á¤ÀÇ
//	2. Parameters
//		- label : Header¸í
//		- value : Header°ª
//	3. Return Value : ¾øÀ½ 
//
// ****************************************************************************************************

AJAX.setRequestHeader = function ( label, value )
{
	AJAX.XmlHttp.setRequestHeader( label, value );
}

// ****************************************************************************************************
//
// Create Date : 2006-07-12
// Modify Date :   
//
//	1. Description : Form µ¥ÀÌÅÍµéÀÇ °ªµéÀ» URLEncodeÇÏ¸é¼­ QueryString ÇüÅÂ·Î ¸¸µç´Ù.
//	2. Parameters
//		- docForm : Form¸í
//	3. Return Value : String
//
// ****************************************************************************************************

AJAX.formData2QueryString = function ( docForm ) 
{
	var submitContent = '';
	var formElem;
	var lastElemName = '';
	  
	for( i = 0; i < docForm.elements.length; i++ ) 
	{
		formElem = docForm.elements[i];
		switch( formElem.type ) 
		{
			// Text fields, hidden form elements
			case 'text':
			case 'hidden':
			case 'password':
			case 'textarea':
			case 'select-one':
				submitContent += formElem.name + '=' + escape(formElem.value) + '&'
				break;
			// Radio buttons
			case 'radio':
				if ( formElem.checked ) 
				{
					submitContent += formElem.name + '=' + escape(formElem.value) + '&'
				}
				break;
			// Checkboxes
			case 'checkbox':
				if ( formElem.checked ) 
				{
					// Continuing multiple, same-name checkboxes
					if ( formElem.name == lastElemName ) 
					{
						// Strip of end ampersand if there is one
						if ( submitContent.lastIndexOf('&') == submitContent.length - 1 ) 
						{
							submitContent = submitContent.substr(0, submitContent.length - 1);
						}
						
						// Append value as comma-delimited string
						submitContent += ',' + escape(formElem.value);
					}
					else 
					{
						submitContent += formElem.name + '=' + escape(formElem.value);
					}
			
					submitContent += '&';
					lastElemName = formElem.name;
				}
				break;
		}
	}

	// Remove trailing separator
	submitContent = submitContent.substr(0, submitContent.length - 1);
	return submitContent;
}

// ****************************************************************************************************
//
// »ç¿ë¹ý
//        AJAX.create();
//        AJAX.openText('GET','jsontest.php', true);
//        AJAX.setStatusSuccessHandler(proc);
//        AJAX.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
//        AJAX.send("test=Å×½ºÆ®");
//
//        function proc(abc)
//        {
//                document.getElementById('test').innerHTML = abc;
//        }
//
// ****************************************************************************************************

