/*
 ***********************************************
 * @source      : ajax.js
 * @description : �����ڹٽ�ũ��Ʈ
 ***********************************************
 * DATE         AUTHOR    DESCRIPTION
 * ---------------------------------------------
 *
 ***********************************************
*/

var xmlHttp;
var rfunction;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}

/*
 ***********************************************
 * insert,update,delete
 ***********************************************
*/
function cfAjaxExecute(url,form,rfunction) {
    
    this.rfunction = rfunction;
    var param = ajaxFormAction(form);//파라메터를 담는다.
    
    createXMLHttpRequest();
    
    xmlHttp.open("POST", url, true);
    xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=UTF-8');
    xmlHttp.setRequestHeader("Content-length", param.length);
    xmlHttp.setRequestHeader("Cache-Control","no-cache, must-revalidate");
    xmlHttp.setRequestHeader("Pragma","no-cache");
    xmlHttp.setRequestHeader("Connection", "close");
    xmlHttp.onreadystatechange = handleStateChangeExecute;
    xmlHttp.send(param);
}

function handleStateChangeExecute() {
    if(xmlHttp.readyState == 4) {
        rfunction(xmlHttp.responseText);
    }
}

/*
 ***********************************************
 * MultiPart upload
 ***********************************************
*/
function cfAjaxMultiPartExecute(url,form,rfunction) {
    var uploadHandler = {upload: function(o) {rfunction(o.responseText);}};
    
    foundation.util.Connect.setForm(form.name, true);
    foundation.util.Connect.asyncRequest('POST', url, uploadHandler);
}

/*
 ***********************************************
 * html obj
 ***********************************************
*/    
function ajaxFormAction(form){
    var param="";
    
    var inputObjs = form.getElementsByTagName("input");
    for(var i=0; i < inputObjs.length; i++){
        var inputObj = inputObjs[i];
        //if(inputObj.name && inputObj.value){
        if(inputObj.name){
            if(inputObj.type == "text" || inputObj.type == "hidden" || inputObj.type == "password"){
                param += inputObj.name + "=" + encodeURIComponent(inputObj.value) + "&";
                
                if(inputObj.tag == "isNull"){
                    if(cfIsNull(inputObj.value.trim())){
                        alert("Enter a vaule.");
                        inputObj.focus();
                        return false;
                    }
                }
                
                if(inputObj.tag == "isNuumber"){
                    if(!cfIsNuumber(inputObj.value.trim())){
                        alert("Input number only.");
                        inputObj.focus();
                        return false;
                    }
                }
                
            }else if(inputObj.type == "radio" || inputObj.type == "checkbox"){
                if(inputObj.checked){
                    param += inputObj.name + "=" + encodeURIComponent(inputObj.value) + "&";
                }
            }
            
        }
    }

    var selectObjs = form.getElementsByTagName("select");
    for(var i=0; i < selectObjs.length; i++){
        var selectObj = selectObjs[i];
        //if(selectObj.name && selectObj.value){
        if(selectObj.name){
            param += selectObj.name + "=" + encodeURIComponent(selectObj.value) + "&";
            
                if(selectObj.tag == "isNull"){
                    if(cfIsNull(selectObj.value)){
                        alert("Select a value.");
                        selectObj.focus();
                        return false;
                    }
                }
        }
    }
    
    var textAreaObjs = form.getElementsByTagName("textarea");
    for(var i=0; i < textAreaObjs.length; i++){
        var textAreaObj = textAreaObjs[i];
        //if(textAreaObj.name && textAreaObj.value){
        if(textAreaObj.name){
            param += textAreaObj.name + "=" + encodeURIComponent(textAreaObj.value) + "&";
        }
    }

    return param+"dummy="+ (new Date().getSeconds());
}