function CH_AjaxRequest( post, reply_to, showLoading ) {
    
    if(showLoading != "no") {
        CH_PushContent( languageLoading, reply_to );
    }
    
    var data = new Array();
    data = post.split("?");
    var url = data[0];
    var postString = data[1];
    
    var oXHR = zXmlHttp.createRequest();
    oXHR.open("post", MainURL+url, true);
    oXHR.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    oXHR.onreadystatechange = function() {
        if (oXHR.readyState == 4) {
            CH_AjaxReply( oXHR.responseText, reply_to );
        }
    }
    oXHR.send( postString );
    
}

function CH_AjaxFormSubmit( formName, fields, reply_to ) {
    var fieldsArray = new Array();
    fieldsArray = fields.split(",");
    var postString = "";
    for(i=0;i<fieldsArray.length;i++){
        var fieldInfo = new Array();
        var fieldValue = "";
        fieldInfo = fieldsArray[i].split(":");
        switch(fieldInfo[1]) {
            case 'selectMultiple':
                fieldValue = CH_GetSelectMultipleValue( formName, fieldInfo[0] );
                break;
            case 'textfieldSet':
                fieldValue = CH_GetTextfieldSetValue( formName, fieldInfo[0] );
                break;
            case 'radio':
                fieldValue = CH_GetRadioValue(document.forms[formName].elements[fieldInfo[0]]);
                break;
            case 'dropdown':
                fieldValue = CH_GetDropdownValue(document.forms[formName].elements[fieldInfo[0]]);
                break;
            default:
                fieldValue = document.forms[formName].elements[fieldInfo[0]].value;
                break;
        }
        if(fieldInfo[1] != "selectMultiple" && fieldInfo[1] != "textfieldSet")
            postString+= fieldInfo[0]+"="+encodeURIComponent( fieldValue )+"&";
        else
            postString+= fieldValue;
    }
    var post = "ajax.php?"+postString;
    CH_AjaxRequest( post, reply_to );
    return false;
}

function CH_AjaxReply ( content, reply_to ) {
    var js = content.substring( 0, 2 );
    if(js == "js") {
        var jscode = content.substring( 3, 6 );
        switch(jscode){
            case 'CH1':
                CH_DelayedHide( reply_to );
                break;
            case 'CH2':
                var vid_id = content.substring( 7 );
                CH_CreateNewPlaylist( vid_id );
                content = "";
                break;
            case 'CH3':
                CH_SetThanksInfo();
                break;
            case 'CH4':
                CH_SwitchSubscribeButton();
                CH_DelayedHide( reply_to );
                break;
        }
        var push = content.substring( 6 );
    } else {
        var push = content;
    }
    CH_PushContent( push, reply_to );
}

function CH_HideHandler( handlerID ){
    var Handler = document.getElementById( handlerID );
    Handler.style.display = "none";
}

function CH_DelayedHide( handlerID ) {
    setTimeout( "CH_HideHandler('"+handlerID+"')" , 2000 );
}

function CH_PushContent( content, handlerID ) {
    var Handler = document.getElementById( handlerID );
    Handler.innerHTML = content;
    if(Handler.style.display == "" || Handler.style.display == "none"){
        Handler.style.display = "block";
    }
}

function CH_GetSelectMultipleValue( formName, fieldName ) {
    var fieldHandler = document.forms[formName].elements[fieldName+"[]"];
    var optionsLength = fieldHandler.options.length;
    var postString = "";
    for(var i=0;i<optionsLength;i++){
        if(fieldHandler.options[i].selected == true){
            postString+= fieldName+"[]="+encodeURIComponent( fieldHandler.options[i].value )+"&";
        }
    }
    return postString;
}

function CH_GetTextfieldSetValue( formName, fieldName ) {
    var postString = "";
    for(var i=0; i < document.forms[formName].elements.length; i++){
        if(document.forms[formName].elements[i].name == fieldName+"[]") {
            postString+= fieldName+"[]="+encodeURIComponent( document.forms[formName].elements[i].value ) + "&";
        }
    }
    return postString;
}

function CH_GetRadioValue(radioObj) {
    if(!radioObj)
        return "";
    var radioLength = radioObj.length;
    if(radioLength == undefined)
        if(radioObj.checked)
            return radioObj.value;
        else
            return "";
    for(var i = 0; i < radioLength; i++) {
        if(radioObj[i].checked) {
            return radioObj[i].value;
        }
    }
    return "";
}

function CH_GetDropdownValue(dropdownObj) {
    var Ind = dropdownObj.options.selectedIndex;
    return dropdownObj.options[Ind].value;
}
