﻿var intervalID = 0;
var progressBar;
var fileUpload;
var form;
var token;
var cancelled = false;
var areasInfo = new Array();
var currentAreaID = null;
var uploadDeleteHandlerUrl;
var uploadProgressUrl;
var saveAdmin;

function registerUploadControls(form, fileUpload, saveAdmin) {
    //  register the form
    this.form = form;
    this.fileUpload = fileUpload;
    this.saveAdmin = saveAdmin;
}


function checkExtensions() {
    var found = false;
    $.each(areasInfo[currentAreaID].allowedExtensions.split(','), function() {
    if (this == fileUpload.getFileInputs()[0].value.substring(fileUpload.getFileInputs()[0].value.lastIndexOf(".")).toLowerCase())
            found = true;
    });
    return found;
}
function onUploadClick() {

    var a = new Array();

    if (!areasInfo[currentAreaID].isAdmin && fileUpload.getFileInputs()[0].value.length <= 0) {
        updateMessage('error', UploadRes.Upload_YouNeedToSelectFile);
    } else if (!areasInfo[currentAreaID].isAdmin && !checkExtensions()) {
        updateMessage('error', UploadRes.Upload_InvalidExtension);

    } else {
        cancelled = false;
        $get('upload').disabled = 'disabled';
        updateMessage('info', !areasInfo[currentAreaID].isAdmin ? UploadRes.Upload_UploadingFilexxx : UploadRes.Upload_UploadingFilexxxAdmin);

        Sys.UI.DomElement.addCssClass($get('uploadFrame'), 'hidden');
        progressBar.show();

        !areasInfo[currentAreaID].isAdmin ? form.submit() : saveAdmin();

    }

}

function cancelUpload(msg) {
    window.clearInterval(intervalID);
    cancelled = true;

    if ($.browser.msie) {
        $get('uploadFrame').contentWindow.document.execCommand('Stop');
    }
    else {
        $get('uploadFrame').contentWindow.stop();
    }
    // $get('uploadFrame').contentWindow.window.location.reload();

    progressBar.hide();
    $get('upload').disabled = '';
    Sys.UI.DomElement.removeCssClass($get('uploadFrame'), 'hidden');
    if (!msg) msg = UploadRes.Upload_UploadCancelled;
    updateMessage('error', msg);
}

function onComplete(type, msg, fileInfo) {

    cancelled = true;
    //  display the message
    updateMessage(type, msg);
    //  hide the progress bar
    $("#uploading").hide();
    
    progressBar.hide();

    $get('upload').disabled = '';
    //  show the frame
    Sys.UI.DomElement.removeCssClass($get('uploadFrame'), 'hidden');

    areasInfo[currentAreaID].currentCount++;
    if (areasInfo[currentAreaID].totalCount <= areasInfo[currentAreaID].currentCount) {
        $('#' + currentAreaID).find('.uploadNewLink').hide();
    }
    
    if (areasInfo[currentAreaID].totalCount > 1)
        $("#uploaded").find(".remaining").show().find("span").text(String.format("(" + UploadRes.Upload_RemainingFiles + ")", (areasInfo[currentAreaID].totalCount - areasInfo[currentAreaID].currentCount)));
    else
        $("#uploaded").find(".remaining").hide();
        
    

    var newLi = $('<li style="display:none" id="' + fileInfo.id + '"><a href="' + fileInfo.url + '" target="_blank" class="download"><img width="' + areasInfo[currentAreaID].iconWidth + '" src="' + fileInfo.iconUrl + '" alt="' + fileInfo.name + '" /></img></a><div class="info"><b>' + fileInfo.name + '</b><span class="fileSize">' + fileInfo.size + '</span>' +
     
    '<span class="updown"><a href="javascript:moveFileUp(\'' + fileInfo.id + '\' ,\'' + currentAreaID + '\');" class="up">&nbsp;</a>&nbsp;<a href="javascript:moveFileDown(\'' + fileInfo.id + '\' , \'' + currentAreaID + '\');" class="down">&nbsp;</a></span>' +
    '<a class="deleteLink" href="javascript:deleteFile(\'' + fileInfo.id + '\', \'' + currentAreaID + '\');">' + UploadRes.Upload_DeleteFile + '</a><span class="deleting">' + UploadRes.Upload_DeletingFile + '</span>' 
    +
    (areasInfo[currentAreaID].totalCount > 1 && !areasInfo[currentAreaID].OnTheFly ? '<span class="defaultRadio"><input type="radio" value="' + fileInfo.id + '" name="' + currentAreaID + '_radio"  /><label>' + UploadRes.Upload_DefaultFile + '</label></span>' : '') +
    '</div></li>');
    
    $('#' + currentAreaID + ' ul').append(newLi);
    newLi.fadeIn();

    if (areasInfo[currentAreaID].totalCount > 1) {
        newLi.find("input[type=radio]").click(setDefaultFile);
        if ($("#" + currentAreaID).find("input[type=radio]:checked").size() <= 0) {
            newLi.find("input[type=radio]").attr("checked", "checked");
            areasInfo[currentAreaID].txtDefaultFile.val(fileInfo.id);
        }
    }

    // append file in hidden field   
     areasInfo[currentAreaID].txtFilesGuid.val(areasInfo[currentAreaID].txtFilesGuid.val()  + fileInfo.id+ ";");
     if (areasInfo[currentAreaID].isAdmin && areasInfo[currentAreaID].totalCount <= 1)
         hideUploadModal();
     else
         $("#uploaded").show();
}

function setDefaultFile(e) {
    // e.preventDefault();
    $("#" + currentAreaID).find("input[type=radio]").each(function() { $(this).removeAttr("checked"); });
    $(this).attr("checked", "checked");
    currentAreaID = $(this).attr("name").substring(0, $(this).attr("name").indexOf("_radio"));
    areasInfo[currentAreaID].txtDefaultFile.val($(this).val());
    
    return true;
}

function updateMessage(type, value) {
    var status = $get('status');
    status.innerHTML = value;
    //  remove all styles
    status.className = '';
    Sys.UI.DomElement.addCssClass(status, type);
}

function showUploadModal(targetAreaID) {
    currentAreaID = targetAreaID;
    $("#uploaded").hide();
    $("#uploading").show();
    
    $("#overlayDiv").css("opacity", .7).show();
    $("#uploadDiv").removeClass("inputFileName").removeClass("inputFileDescription").removeClass("extContent");
    if (areasInfo[currentAreaID].inputFileName)
        $("#uploadDiv").addClass("inputFileName");
    
    if (areasInfo[currentAreaID].inputFileDesc)
        $("#uploadDiv").addClass("inputFileDescription");
    
    if (areasInfo[currentAreaID].isAdmin) $("#uploadDiv").addClass("explorer");
    else $("#uploadDiv").removeClass("explorer");

    if (areasInfo[currentAreaID].isExtContent) $("#uploadDiv").addClass("extContent");
    else $("#uploadDiv").removeClass("extContent");

    if (areasInfo[currentAreaID].totalCount == 1) $("#uploadDiv").addClass("single");
    else $("#uploadDiv").removeClass("single");


    $("#uploadDiv").show();
    centerUploadModalDiv();
    updateMessage('info', !areasInfo[currentAreaID].isAdmin ? UploadRes.Upload_PleaseSelectFileToUpload : UploadRes.Upload_PleaseSelectFileToUploadAdmin);
    if(areasInfo[currentAreaID].totalCount > 1)
        $("#uploadDiv").find(".totalUploaded").text(String.format(!areasInfo[currentAreaID].isAdmin ? UploadRes.Upload_UploadedXofY : UploadRes.Upload_UploadedXofYAdmin, areasInfo[currentAreaID].currentCount, areasInfo[currentAreaID].totalCount));
    else
        $("#uploadDiv").find(".totalUploaded").text("");
        
    $("#uploadDiv").find(".maxSize").text(String.format(UploadRes.Upload_MaxFileSize, areasInfo[currentAreaID].maxFileSizeHuman));
    $("#uploadDiv").find(".extensions").text(String.format(UploadRes.Upload_AllowedTypes, areasInfo[currentAreaID].allowedExtensions));
    if($("#uploadDiv").find("iframe").attr("src") != areasInfo[currentAreaID].url)
        $("#uploadDiv").find("iframe").attr("src", areasInfo[currentAreaID].url);
}
function hideUploadModal() {
    cancelUpload();
    $("#uploadDiv").hide();
    $("#overlayDiv").hide();
    $("#uploadDiv").find("iframe").attr("src", areasInfo[currentAreaID].url + "&pre=1");
}
function centerUploadModalDiv() {
    $("#overlayDiv").maxElement();
    $("#uploadDiv").centerElement();
}

function deleteFile(fileId, AreaId) {
    if (confirm(UploadRes.Upload_AreYouSureToDelete)) {
        li = $('#' + fileId);
        li.find(".deleteLink").hide();
        li.find(".deleting").show();

        $.get(uploadDeleteHandlerUrl + '?id=' + fileId + '&key=' + areasInfo[AreaId].deleteKey + '&moduleName=' + areasInfo[AreaId].moduleName + '&itemId=' + areasInfo[AreaId].itemId + '&ts=' + new Date().getTime(),
              function(data) {
                  if (data == "success") {
                      li.find(".deleting").hide();
                      li.fadeOut(function() { li.remove(); 
                      areasInfo[AreaId].currentCount--;
                      if (areasInfo[AreaId].totalCount > areasInfo[AreaId].currentCount) {
                          $('#' + AreaId).find('.uploadNewLink').show();
                      }
                      if (areasInfo[AreaId].totalCount > 1 && $('#' + AreaId).find("input[type=radio]:checked").size() <= 0) {
                          $('#' + AreaId).find("input[type=radio]:first").attr("checked", "checked");
                          areasInfo[AreaId].txtDefaultFile.val($('#' + AreaId).find("input[type=radio]:first").val());
                      }
                      areasInfo[AreaId].txtFilesGuid.val(areasInfo[AreaId].txtFilesGuid.val().replace(fileId + ";", ""));
                      });
                  } else {
                        alert(UploadRes.Upload_ErrorDeletingFileFromServer + " ["+ data +"]");
                      li.find(".deleteLink").show();
                      li.find(".deleting").hide();
                  }
              });
    }
}

function moveFileUp(fileId, AreaId) {
    moveFile(fileId, AreaId, 'up');
}
function moveFileDown(fileId, AreaId) {
    moveFile(fileId, AreaId, 'down');
}
function moveFile(fileId, AreaId, dir) {

        li = $('#' + fileId);

        txtGuid = areasInfo[AreaId].txtFilesGuid ;

        guids = txtGuid.val().split(";");

        if (dir == 'up' && guids[0] == fileId)
            return;
        else if (dir == 'down' && guids[guids.length - 1] == fileId)
            return;
        

        beforeId = "";
        for (i = 0; i < guids.length; i++) {
            if (guids[i] == fileId) {
                beforeId = guids[ dir == 'up' ? i - 1 : i + 1 ];
                break;
            }
        }

        liToReplace = $('#' + beforeId);

        li.fadeTo("fast", 0.33);
        liToReplace.fadeTo("fast", 0.33);
        
        if(dir == 'up')
            li.insertBefore(liToReplace);
        else if (dir == 'down')
            li.insertAfter(liToReplace);
        
        li.fadeTo("fast", 1);
        liToReplace.fadeTo("fast", 1);
        if (dir == 'up')
            txtGuid.val(txtGuid.val().replace(fileId + ";" , "").replace(beforeId, fileId + ";" + beforeId).replace(";;", ";"));
        else if (dir == 'down')
            txtGuid.val(txtGuid.val().replace(fileId + ";" , "").replace(beforeId+ ";" , beforeId + ";" + fileId + ";" ).replace(";;", ";"));
        
}
