var lastRead   = 0;
var uploadDone = 1;
var upStart    = 0;
/******************************************
* ch_mode(id)
* switch upload mode,and record the mode into cookie
* id:string file,url,ftp
******************************************/
function ch_mode(id)
{
    for(var i=1;i<=4;i++)
    {
       if(i==id)
       {
           currentmode=id;
           setcookie(CookiePrefix+'uploadmode',id);
           document.getElementById('uploadmode'+i).style.display='';
           if(currentmode==4) buildFlashUpload(flashPath);
           document.uploadform.action=actions[id];
       }
       else
       {
           if(is_object('uploadmode'+i))
           document.getElementById('uploadmode'+i).style.display='none';
       }
    }
}
/******************************************
* newUploadField(type)
* generate new upload files
* type:string file,url,ftp
******************************************/
var attaIdx=1;
var fileNum=1;
var urlNum=1;
var ftpNum=1;
function newUploadField(type)
{
    if(type=='file') attaIdx = fileNum;
    if(type=='url')  attaIdx = urlNum;
    if(type=='ftp')  attaIdx = ftpNum;

    if(attaIdx>=max_uploads) {alert(MaxUploadsGot);return;}

    var fileobj=document.getElementById(type+'_'+'wraper0');
    var filelist=document.getElementById(type+'list');
    var filecode = fileobj.innerHTML;

    //alert( filelist.innerHTML);

    filecode = filecode.replace(/_0/g,'_'+attaIdx+'');
    filecode = filecode.replace(/\[0\]/g,'['+attaIdx+']');

    //alert( filecode);
    new Insertion.After(type+'_'+'wraper'+(attaIdx-1), '<div id='+type+'_wraper'+attaIdx+'>'+filecode+'</div>');

    //clear out the filled values
    if(type!='file')
    document.getElementById('upload'+type+'_'+attaIdx).value='';

    document.getElementById(type+'_descr_'+attaIdx).value='';
    document.getElementById(type+'_password_'+attaIdx).value='';

    attaIdx++;

    if(type=='file') fileNum = attaIdx;
    if(type=='url')  urlNum  = attaIdx;
    if(type=='ftp')  ftpNum  = attaIdx;
}
/******************************************
* postIt()
* submit upload form
******************************************/
var rParam='';
function postIt()
{
    // reset the form action url
    document.uploadform.action=actions[currentmode];

    // upu uploader
    UPUENABLED =0;
    if(currentmode==1&&UPUENABLED==1)
    {
        startUploading();
        upuInit(document.uploadform);
        return 1;
    }

    // validate file types before uplaod
    var ok = validateUpload();

    if(ok==false) return false;

    // set uploading interface
    startUploading();

    // process flash upload
    if(currentmode==4)
    {
        flashObj("flashUpload").saveCookie(document.cookie);
        flashObj("flashUpload").uploadFiles();
        return;
    }

    // collect param to sen in progress url
    var sid = document.uploadform.sessionid.value;
	iTotal = escape("-1");
	rParam = "iTotal=" + iTotal;
	rParam += "&iRead=0";
	rParam += "&iStatus=1";
    //rParam += "&iNums="+max_uploads;
    rParam += "&iMode="+currentmode;
    rParam += "&dtstart="+upStart;
	rParam += "&sessionid=" + sid;
    rParam += "&dtnow="+upStart;

    // if progress is syn mode, disable the ajax use!
    if(currentmode==1&&cgi_prog_mode=='ajax') AjaxRequest(rParam);
    if(currentmode==2&&url_prog_mode=='ajax') AjaxRequest(rParam);
    if(currentmode==3&&ftp_prog_mode=='ajax') AjaxRequest(rParam);

    // submit form
 	document.uploadform.submit();
    return true;
}
/******************************************
* validateUpload()
* validate the uploads before submit
******************************************/
function validateUpload()
{
    var hasuploads=false;
    var invaliduploads = 0;
    var prefix = 'uploadfile';

    // prefix of field name
    if(currentmode==1) prefix = 'uploadfile';
    if(currentmode==2) prefix = 'uploadurl';
    if(currentmode==3) prefix = 'uploadftp';

    // flash will validate this itself!
    if(currentmode!=4&&!is_object(prefix+'s'))
    for(var i=0;i<max_uploads;i++)
    {
        if(!is_object(prefix+'_'+i)) continue;

        var filename=document.getElementById(prefix+'_'+i).value;

        if(filename.length) hasuploads = true;

        if(filename.length
           &&
           ((allowed_types&&!in_array(filename,allowed_types))
           ||
           (disabled_types&&in_array(filename,disabled_types)))
           )
         {
             document.getElementById(prefix+'_'+i).className='warn';
             invaliduploads++;
         }
         else
         {
             document.getElementById(prefix+'_'+i).className='textinput';
         }
    }
    if(currentmode!=4&&is_object(prefix+'s'))
    {
        var filename=document.getElementById(prefix+'s').value;

        if(filename.length) hasuploads = true;
    }
    // set hasFlashUploads from flash object
    if(currentmode==4)
    {
        hasuploads = hasFlashUploads;
    }

    // if no file select
    if(hasuploads==false)
    {
        alert(NoFileSelected);
        return false;
    }
    else if(invaliduploads)
    {
        if(allowed_types) alert(UploadInvalid+' '+allowed_types+' '+AllowedFiletypes);
        else alert(UploadInvalid+' '+disabled_types+' '+DisabledFiletypes);
        return false;
    }

    // detect the filed is available and check it meet the reqirement
    if(is_object('fromemail')&&is_object('toemail'))
    {
        var fromemail=document.getElementById('fromemail').value;
        var toemail=document.getElementById('toemail').value;
        if(fromemail.length&&!checkmail(fromemail))
        {
            alert(EmailInvalid);
            document.getElementById('fromemail').focus();
            return false;
        }
        if(fromemail.length==0&&toemail.length)
        {
            alert(SenderRequired);
            document.getElementById('fromemail').focus();
            return false;
        }
    }
    // check terms is aggreed
    if(is_object('terms'))
    {
        var terms=document.getElementById('terms');
        if(terms.checked==false)
        {
            alert(TOSUnchecked);
            document.getElementById('terms').focus();
            return false;
        }
    }

    return true;
}
/******************************************
* startUploading()
* initiate the upload interface once user click upload
******************************************/
function startUploading()
{
    try{
    // initiate upload status
    lastRead   = 0;
    uploadDone = 0;
    var myDate=new Date()
    upStart = parseInt(myDate.getTime()/1000)

    document.getElementById('uploaderror').style.display   = 'none';
    document.getElementById('emailwindow').style.display   = 'none';
    document.getElementById('uploadoverview').style.display= 'none';
    document.getElementById('uploadresults').style.display = 'none';
    
    document.getElementById('uploadwindow').style.display  = currentmode!=4 ? 'none' : 'block';
    document.getElementById('helpwindow').style.display    = currentmode!=4 ? 'block' : 'none';
    
    document.getElementById('progressbar').style.display   = 'block';
    document.getElementById('progressbar2').style.display  = 'block';


    // flash progress bar detect!
    if(use_flash_progress)
    {
        var version = deconcept.SWFObjectUtil.getPlayerVersion();
        if (document.getElementById && (version['major'] > 0)) {
            if(version['major']<6)
            {
                use_flash_progress = 0;
                document.getElementById('flash_progress_bar').style.display='none';
                document.getElementById('progBar').style.display='block';
            }
            else
            {
                if(typeof(flashObj('flash_progress_bar'))=='object') return '';
                var so = new SWFObject(flashProgressPath, "flash_progress_bar", "364", "40", "7", "#ffffff");
                so.addParam('allowScriptAccess','always');
                so.addParam('wmode','transparent');
                so.write("flashprogressobj");
                if(is_object('progBar')) document.getElementById('progBar').style.display='none';
            }
        }
    }

    }catch (e) {
        alert('startUploading:'+e)
    }
}
/******************************************
* submitEmailForm()
* submit email form after upload is done.
* Note:the form may be resubmitted for 10 times if no uploaded files is found at server
******************************************/
function submitEmailForm()
{
    // sending emails?
    if(document.emailform!=null)
    {
        //document.emailform.uploadmode.value = currentmode;
        setTimeout("document.emailform.submit();", 2000);
    }
    else
    {
        // get method to refresh emailframe page
        setTimeout("document.getElementById('emailframe').contentWindow.location = 'getlinks.php?sessionid='+document.uploadform.sessionid.value+'&submitnums=1'",2000);
    }
}
/******************************************
* showDownloadLinks()
* show the download links after the upload
******************************************/
function showDownloadLinks(totalsize)
{
    if(uploadDone==0)
    {
        calProgress(totalsize,totalsize,upStart);
        uploadDone = 1;
    }

    var uploadfrmdoc = document.getElementById('emailframe').contentWindow;

    document.getElementById('uploadresults').innerHTML = uploadfrmdoc.document.getElementById('linksholder').innerHTML;
    document.getElementById('uploadoverview').innerHTML = uploadfrmdoc.document.getElementById('uploadoverview').innerHTML;
    try{
       if(upload_window == 1) showDownloadLinksWindow();
       else
       {
           document.getElementById('uploadresults').innerHTML.evalScripts();
       }
    }
    catch (e) {alert('showDownloadLinks:'+e)}

    try{
       document.getElementById('uploadresults').style.display = 'block';
       document.getElementById('uploadresultsbar').style.display = 'block';
       document.getElementById('uploadoverview').style.display = 'block';
       document.getElementById('helpwindow').style.display = 'none';
       if(currentmode==4) document.getElementById('uploadwindow').style.display = 'none';
       document.title = document.getElementById('filename').innerHTML + document.getElementById('filesize').innerHTML;
    }
    catch (e) {alert('showDownloadLinks:'+e)}
}
var uploadresultswindow;
function showDownloadLinksWindow()
{
    uploadresultswindow=dhtmlmodal.open('uploadresultsbox', 'div', 'uploadresults', FileLinksWinTitle, 'width=590px,height=450px,center=1,resize=1,scrolling=1')
    uploadresultswindow.onclose=function(){
       document.getElementById('uploadresults').style.display = 'block';
       //remove original HTML to avoid DIV id repeatation
       this.contentarea.defaultHTML = this.contentarea.innerHTML;
       this.contentarea.innerHTML   = '';
       document.getElementById('uploadresults').innerHTML = this.contentarea.defaultHTML;//document.getElementById('uploadresults').defaultHTML;
       document.getElementById('uploadresults').innerHTML.evalScripts();
       return true;
    }
}
/******************************************
* showDownloadErrors()
* show the download errors if the upload fails
******************************************/
function showDownloadErrors()
{
    try{

    document.getElementById('uploaderror').style.display='block';
    document.getElementById('uperror').innerHTML=document.getElementById('uploadframe').contentWindow.document.getElementById('upload_errors').innerHTML;

    resetUploadInterface();

    stopUpload();

    }catch (e) {
        alert('showDownloadErrors:'+e)
    }
}
/******************************************
* resetUploadInterface()
* show the upload interface again if the upload fails
******************************************/
function resetUploadInterface()
{
    try{
    lastRead=0;
    uploadDone=1;

    document.getElementById('uploadwindow').style.display = 'block';
    document.getElementById('emailwindow').style.display  = 'block';
    document.getElementById('uploadoverview').style.display = 'none';
    document.getElementById('uploadresults').style.display = 'none';
    document.getElementById('progressbar').style.display = 'none';
    document.getElementById('progressbar2').style.display = 'none';
    document.getElementById('helpwindow').style.display = 'none';

    }catch (e) {
        alert('resetUploadInterface:'+e)
    }
}
/******************************************
* resetProgressBar()
* show the progress bar
******************************************/
function resetProgressBar()
{
    document.getElementById('bread').innerHTML = 'unknown';
    document.getElementById('itotal').innerHTML = 'unknown';
    document.getElementById('dtremainingf').innerHTML = 'unknown';
    document.getElementById('dtelapsedf').innerHTML = 'unknown';
    document.getElementById('bspeedf').innerHTML = 'unknown';

    if(use_flash_progress)
    {
        document.flash_progress_bar.SetVariable("/:percentage", 0);
    }
    else
    {
        document.getElementById('progBar').innerHTML= "";
    }
}
/******************************************
* newUploadSession()
* restart a new upload session without reloading pages
******************************************/
function newUploadSession()
{
    try{
        var success	= function(t){
            //get a new upload session,
            var params=t.responseText;
            parts = params.split(',');
            var newsessionid = parts[0];
            var newaccesskey = parts[1];

            var oldsessionid = document.uploadform.sessionid.value;
            var oldaccesskey = document.uploadform.AccessKey.value;

            actions[1] = actions[1].replace('='+oldsessionid,'='+newsessionid);
            actions[1] = actions[1].replace('='+oldaccesskey,'='+newaccesskey);

            flashPath  = flashPath.replace('='+oldsessionid,'='+newsessionid);
            flashPath  = flashPath.replace('='+oldaccesskey,'='+newaccesskey);

            document.uploadform.action = document.uploadform.action.replace('='+oldsessionid,'='+newsessionid);
            document.uploadform.action = document.uploadform.action.replace('='+oldaccesskey,'='+newaccesskey);
            document.uploadform.sessionid.value = newsessionid;
            document.uploadform.AccessKey.value = newaccesskey;
            if(document.uploadform.APC_UPLOAD_PROGRESS!=null) document.uploadform.APC_UPLOAD_PROGRESS.value = newsessionid;

            window.frames["emailframe"].location.replace("about:blank");
            if(document.emailform)
            {
                document.emailform.sessionid.value = newsessionid;
                document.emailform.AccessKey.value = newaccesskey;
            }

            resetUploadInterface();
            resetProgressBar();
            return '';
        }
        
	    var failure	= function(t){alert('New upload session fails');}
        var myAjax = new Ajax.Request(
                     'newuploadsession.php',
                     {method: 'get', parameters: '', onComplete: success, onFailure: failure}
                     );
    }catch (e) {
        alert('newUploadSession:'+e)
    }
    
    return false;
}
/******************************************
* showResponse()
* process the response of progress bar
******************************************/
function showResponse(originalRequest)
{
    var parts= new Array();
    var params=originalRequest.responseText;

    //alert('Response:'+params);

    var myDate=new Date()
    var dtnow = parseInt(myDate.getTime()/1000)

    //start to upload,
    if(params.substring(0,5)=='start')
    {
        rParam = params.substring(6);
        rParam = rParam + '&dtnow=' + dtnow;

        //alert('start to obtain progress:'+rParam);
        setTimeout("AjaxRequest(rParam);",2000);
    }
    else
    {
        parts = params.split(',');
        if(parts.length>5)
        {
            var url = parts[6];

            // fail to get the correct data, use lastSuccessParam
            if(url.substring(0,7)!='iTotal=' && url!='')
            {
                var url = lastSuccessParam;
            }
            else
            {
                showProgress(params);
            }
        }
        else
        {
            //alert('Fail Response:'+params+lastSuccessParam);
            var url = lastSuccessParam;
        }

        if(url.length>5)
        {
            url = url + '&dtnow=' + dtnow;
            setTimeout("AjaxRequest('"+url+"');",2000);
        }
    }
}
/******************************************
* stopUpload()
* disable future ajax request of progress bar
******************************************/
function stopUpload()
{
    var tmp = document.createElement("DIV");
    tmp.innerHTML = document.getElementById('helpwindow').innerHTML;
    if(uploadDone==0)
    return (trim(tmp.textContent||tmp.innerText));
}
/******************************************
* calsize()
* output the nice format of bytes
******************************************/
function calsize(obj,str)
{
    var size=obj.value;
    var unit = 'B';
    if(size=='') size=0;
    if(size>1024) { size=size/1024; unit='KB'; }
    if(size>1024) { size=size/1024; unit='MB'; }
    if(size>1024) { size=size/1024; unit='GB'; }
    size = Math.round(size*100)/100;

    document.getElementById(str).innerHTML=size+' '+unit;
}
/******************************************
* convertsize()
* output the raw format of bytes
******************************************/
function convertsize(size,unittype)
{
    var unit = 'B';
    var ok = 1;
    var sizestr = new String(size);
    if(size=='unknown') return size;
    if(sizestr.lastIndexOf(' ')!=-1)
    {
        var sizeunit=sizestr.substring(sizestr.lastIndexOf(' ')+1)
        if(sizeunit=='B'||sizeunit=='KB'||sizeunit=='MB'||sizeunit=='GB') return size;
    }
    size=parseInt(size);
    if(isNaN(size)) size = 0;
    if(unittype==unit) ok=0;
    if(size>1024&&ok) { size=size/1024; unit='KB';}
    if(unittype==unit) ok=0;
    if(size>1024&&ok) { size=size/1024; unit='MB';}
    if(unittype==unit) ok=0;
    if(size>1024&&ok) { size=size/1024; unit='GB';}

    size = Math.round(size*100)/100;

    return size+' '+unit;
}
