/******************************************************************************
 * authors: Jan "Hlava" Hlavicka (avaloh@avaloh.cz)
 * created: 6.5.2008
 * last update: 2.6.2010
 * description: Javascript function for using ajax
 * ***************************************************************************/

function ajaxCreateHttp() {
    xmlHttp = ajaxGetHttp();
}

function ajaxGetHttp() {
    var tmp = false;;
    try  {
        // Firefox, Opera 8.0+, Safari
        tmp=new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try {
            tmp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
              tmp=new ActiveXObject("Microsoft.XMLHTTP");
            }  catch (e) {
               alert("Your browser does not support AJAX!");
            }
        }
    }
    return tmp;
}

function ajaxError() {
    alert('Bad using of CMS.valham Ajax, please, contact CMS.valham support');
}


/**
 * this has to be called if you want to change something by ajax
 * you need have some element, which has only one element child. This child
 * will be change.
 * This functions needs several obligatory parametrs. First is the parent
 * element, second is callback function, where to get new data. This
 * funciton is PHP function and has to be static. i.e:
 * vh_module_authentication::getTableData.
 */
function ajaxProcess() {
    var argv = ajaxProcess.arguments;
    var argc = argv.length;
    if (argc < 2) {
        ajaxError();
        return
    }
    if (xmlHttp) {
        try{
            processingElement = argv[0];
            var cb = argv[2];
            var file = argv[1];
            var params = "callback="+cb+"&ajaxfile="+file;
            if (argc>3) {
                params = params + "&otherparams=";
                for (var i=3; i<argc ;i++ ) {
                    params = params + argv[i];
                    if ((i+1) != argc) params = params + "+++";
                }
            }
            xmlHttp.open("POST", "ajax.php", true);
            xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
            xmlHttp.onreadystatechange = handleRequestStateChange;
            xmlHttp.send(params);
        } catch (e) {
            alert("Can't connect to server:\n" + e.toString());
        }
    } else {
        ajaxError();
    }
}


function ajaxNoResponse(cb, params) {
    ajaxCreateHttp();
    if (xmlHttp) {
        try{
        xmlHttp.open("POST", "ajax.php", true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
        xmlHttp.onreadystatechange = handleRequestDump;
        params = "cb="+cb+"&ajaxcmd=noresp&"+params;
        xmlHttp.send(params);
        } catch (e) {
        }
    }
}


function handleRequestDump() {
}


function handleRequestStateChange() {
    //request state has changed
    if (xmlHttp.readyState==4) {//process is completed
        if (xmlHttp.status==200) {
        //http status is OK
        try {
            processingElement.innerHTML = xmlHttp.responseText;
            if (savebackground != 'nosave') {
                processingElement.style.background = savebackground;
            }
        } catch (e) {
            alert(e);
            ajaxError();
        }
        }
    } else if (savebackground == 'nosave') {
        savebackground = processingElement.style.background;
    }
}

var savebackground = 'nosave'
var processingElement;
var response;
var xmlHttp;
ajaxCreateHttp();


function vh_openAjaxWindow(cb, w, h, params) {
    var wín;
    if ($("#vh_ajax_window").length>0) {
        win = $("#vh_ajax_window");
        $(win).dialog("destroy");
    } else {
        win = document.createElement("div");
    }
    $(win).attr("id","vh_ajax_window");
    $(win).attr("title", jsTranslate("loading"));
    $(win).html("<p>"+jsTranslate("loadingPleaseWait")+"</p>");
    $("body").append(win);
    $(win).dialog({
      height: h,
      width: w,
      modal: true
    });
    loadAjaxWindow(cb, params);
}


var https_obj_win;
function loadAjaxWindow(cb, paramsadd) {
    https_obj_win = ajaxGetHttp();

    var params = "ajaxcmd=ajaxWindow&cb="+cb;

    if (paramsadd) params = params + "&" + paramsadd;

    https_obj_win.open("POST", "ajax.php", true);
    https_obj_win.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
    https_obj_win.onreadystatechange = ajaxWindowHandle;
    https_obj_win.send(params);
}


function ajaxWindowHandle() {
    if (https_obj_win.readyState == 4) {
        var resp = https_obj_win.responseText;
        var endline = resp.indexOf("\n");
        var title = resp.substr(0, endline);
        var body = resp.substring((endline+1));
        $("#ui-dialog-title-vh_ajax_window").html(title);
        $("#vh_ajax_window").html(body);
    }
}


var https_grf;
function ajaxRemoveGalleryFile(fn){
    if (!confirm(jsTranslate("confirmDeleteImage"))) {
       return;
    }


    var params = "fn="+fn+"&ajaxcmd=ajaxWindow&cb=vh_gallery::deleteImage";
    https_obj_win.open("POST", "ajax.php", true);
    https_obj_win.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
    https_obj_win.onreadystatechange = ajaxDeleteGalleryHandle;
    https_obj_win.send(params);
}


function ajaxDeleteGalleryHandle() {
    if (https_obj_win.readyState == 4) {
        vh_openAjaxWindow('vh_gallery::manageImagesAjax', 800, 600);
    }
}

