var xmlhttp =  createRequestObject();
var refresh_time = 1000;
var req_timer;
var upload_inprogress = false;
var req_inprogress = false;
var getinfo = false;
var ajax_canceled = false;
var succeeded = false;
var searching = false;
var uk = '';

var iTotal, iRead, iStatus, sessionid, dtstart;

function enableControls(active)
{
      var form = document.forms[0];
      for(i = 0; i < form.length; i++)
      {
          form.elements[i].disabled = !active;
      }
}

function check_types() {
        var allowed_type = /(\.jpg)|(\.gif)|(\.png)$/i;
        var fieldname = /^filename/;
        with(document.forms[0])
        {
                for(i=0 ; i < elements.length ; i++)
                {
                        if(!elements[i].value.match(allowed_type) &&
                            elements[i].name.match(fieldname) &&
                            elements[i].value.length)
                        {
                                alert('Sorry ' + elements[i].value + ' is not allowed');
                                return false;
                        }
                }
        }
        return true;
}

function beginUpload()
{
        if (check_types() == false)
                return false;
        uk = document.getElementById("uploadkey").value;
        if (!uk.length)
        {
             alert("Upload key is required");
             return false;
        }

        // after images are uploaded
        if (succeeded)
        {
            location.replace('');
            return false;
        }

        if (upload_inprogress) return;

        sessionid = document.forms[0].sessionid.value;
        iTotal = -1;
        iRead = 0;
        iStatus = 1;
        dtstart = -1;

        document.getElementById("begin").disabled = true;

        document.getElementById("waitmsg").innerHTML = "Please wait... uploading ";
        document.getElementById("status").innerHTML = "";

        document.getElementById("resultlayer").innerHTML = document.getElementById("progresslayer").innerHTML;

        req_inprogress = false;
        req_timer = setInterval("refreshProgress()", refresh_time);
        getinfo = false;
        document.forms[0].action += '&uk=' + uk;
        document.forms[0].submit();
}

// create object
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

function submitRequest(reqList)
{
    xmlhttp.open('get', reqList, true);

    /* The callback function */
    xmlhttp.onreadystatechange = responseHandler;
    xmlhttp.send(null);
}

function responseHandler()
{
   if (ajax_canceled) return;
   if (xmlhttp.readyState == 4)
   {
       req_inprogress = false;
       if (xmlhttp.status == 200)
       {
           if (getinfo)
           {
               showInfo(xmlhttp.responseText);
           }
           else
           if (searching)
           {
               displayPage(xmlhttp.responseText);
           }
           else
               readResponse(xmlhttp.responseText);
       }
   }
}

function refreshProgress() {
    if (req_inprogress) return;

    var reqList = '/cgi-bin/progress.cgi';
    reqList += "?iTotal=" + escape(iTotal);
    reqList += "&iRead=" + escape(iRead);
    reqList += "&iStatus=" + escape(iStatus);
    reqList += "&sessionid=" + escape(sessionid);
    reqList += "&dtstart=" + escape(dtstart);
    reqList += "&uk=" + escape(uk);
    req_inprogress = true;
    submitRequest(reqList);
}

function readResponse(responseText) {
    var items = new Array();
    // response is: iTotal|iRead|iStatus|dtstart|percent|msg
    items = responseText.split("|");

    iTotal = items[0];
    iRead = items[1];
    iStatus = items[2];
    dtstart = items[3];

    var percent = items[4];
    var msg = items[5];

    if (iStatus == "2")
    {
        // completed
        clearInterval(req_timer);
        document.getElementById("resultlayer").innerHTML = document.getElementById("successlayer").innerHTML;

        getinfo = true;
        var reqURL = "getinfo.php?i=" + sessionid;
        submitRequest(reqURL);
    }
    else
    if (iStatus == "4")
    {
        // completed with error
        clearInterval(req_timer);
        //enableControls(false);
        document.getElementById("begin").disabled = false;
        //document.getElementById("begin").value = "Upload another files";
        upload_inprogress = false;
        succeeded = false;
        document.getElementById("resultlayer").innerHTML = document.getElementById("successlayer").innerHTML;
        document.getElementById("successbar").innerHTML = "Upload key is incorrect";
        enableControls(true);
    }
    else
    {
        // update progress
        if (percent > 5)
            document.getElementById("progressbar").style['width'] = percent+'%';
        else
            document.getElementById("progressbar").style['width'] = '5%';
        items = percent.split(".");
        percent = items[0];
        if (items.length > 1)
            percent += '.' + items[1].substr(0,2);
        document.getElementById("progressvalue").innerHTML = percent+'%';
        document.getElementById("status").innerHTML = msg;
    }
}

function showInfo(responseText)
{
    var items = new Array();
    // response is: status|msg
    items = responseText.split("|");
    enableControls(false);
    document.getElementById("begin").disabled = false;
    document.getElementById("begin").value = "Upload another files";
    upload_inprogress = false;
    succeeded = true;
    if (items[0] == "OK")
    {
        document.getElementById("successbar").innerHTML = responseText.substring(3, responseText.length - 3);
    }
    else
    {
        document.getElementById("successbar").innerHTML = responseText;
    }
}

function goSearch()
{
         var txt = document.getElementById("txtsearch").value;
         if (!txt.length)
         {
              alert('no text to search');
              return false;
         }
         searching = true;
         var reqURL = "imagesearch.php?page=0&txt=" + txt;
         submitRequest(reqURL);
         return false;
}

function changePage(url)
{
         searching = true;
         var reqURL = "imagesearch.php?" + url;
         submitRequest(reqURL);
}

function displayPage(responseText)
{
         document.getElementById("searchresult").innerHTML = responseText;
         searching = false;
}

