String.prototype.trim = function()
{
    var reExtraSpace = /^\s*(.*?)\s*$/;
    return this.replace(reExtraSpace, "$1");
}

var setHasRights = 0;
var adminPanel = false;

function toggleDir(dirId)
{
	var oFolderDiv = $(dirId);
	var oToggleImg = getFirstNodeByTagName(oFolderDiv, "img");
	var oChildsDiv = getFirstNodeByTagName(oFolderDiv, "div");

	if(!oToggleImg || !oChildsDiv)
	    return;
	    
	if(oChildsDiv.style.display=="none")
	{
	    oChildsDiv.style.display = "block";
	    oToggleImg.src = "img/minus.png";
	    
	    if(oChildsDiv.subDirsLoaded!==true)
	        getOutput({what: "subDirs", dir: dirId,  setHasRights: setHasRights},  outputSubDirs);
	}
	else
	{
	    oChildsDiv.style.display = "none";
	    oToggleImg.src = "img/plus.png";
	}

}
function initAdmin()
{
    adminPanel = true;
    window.onresize = positionDirList;
    positionDirList();
        
    $("dirListRoot").innerHTML = "Clientverzeichnis wird ausgelesen...";
    setHasRights = 1;
    getOutput({what: "subDirs", dir: "dirListRoot", setHasRights: setHasRights}, outputSubDirs);
    readUsers();
}

function init()
{
    adminPanel = false;

    window.onresize = positionDirList;
    positionDirList();

    $("dirListRoot").innerHTML = "Clientverzeichnis wird ausgelesen...";
    getOutput({what: "subDirs", dir: "dirListRoot"}, outputSubDirs);
}


function readUsers(originalRequest)
{
    if(originalRequest)
    {
        showMessage(originalRequest.responseText);
    }
    getOutput({what: "users"}, outputUserPanel);
    if(lastFolderId)
        readRights();
}

function readRights(originalRequest)
{
    if(originalRequest)
    {
        showMessage(originalRequest.responseText, {top: "300px", left: "450px"});
    }
    getOutput({what: "rights", dir: lastFolderId},  outputRightsPanel);
}

var myEffects = $A();
function showMessage(msg, position)
{
    myEffects.each(function(myEffect){myEffect.finish();});
    myEffects.clear();
    
    
    var oMsg = $("message");
    oMsg.setOpacity(1);
    oMsg.innerHTML = msg;
    oMsg.style.display = "block";
    if(position)
    {
        oMsg.style.top  = position.top;
        oMsg.style.left = position.left;
    }
    else
    {
        oMsg.style.top  = "130px";
        oMsg.style.left = "350px";
    }
    
    myEffects.push(new Effect.Highlight(oMsg, {duration: 0.5}));
    myEffects.push(new Effect.DropOut($('message'), {duration: 1.0, delay: 1.0}));
}
function getFirstNodeByTagName(oParent, sTagName)
{
	var oFoundNodes = oParent.getElementsByTagName(sTagName);
	if(oFoundNodes.length > 0)
	   return oFoundNodes[0];
    else
       return false;
}


var lastFolderId = null;

function selectFolder(dirId)
{
	var oFolderDiv = $(dirId);
	if(lastFolderId!=dirId && lastFolderId!=null)
	{
	    deselectFolder(lastFolderId);
	    oLastFolderDiv = $(lastFolderId);
	    if(isDirOpened(lastFolderId) && !Element.childOf(oFolderDiv, oLastFolderDiv))
	        toggleDir(lastFolderId);
	}
    else if(lastFolderId!=null)
        return;
	lastFolderId = dirId;    
    if(adminPanel)
        readRights();
    else
    {
        
        getOutput({what: "directorie", dir: dirId}, outputDirectorie);
    }

	var oFolderName = getFirstNodeByTagName(oFolderDiv, "span");
	var oFolderLink = getFirstNodeByTagName(oFolderDiv, "a");
	
	if(!oFolderName || !oFolderLink)
	    return;

    Element.removeClassName(oFolderLink, "closed");
    Element.addClassName(oFolderLink, "opened");
    Element.addClassName(oFolderName, "selected");
    
    if(!isDirOpened(dirId))
        toggleDir(dirId);  

}

function deselectFolder(dirId)
{
	if(dirId==null)
	    return;
	var oFolderDiv = $(dirId);
	var oFolderName = getFirstNodeByTagName(oFolderDiv, "span");
	var oFolderLink = getFirstNodeByTagName(oFolderDiv, "a");
	
	if(!oFolderName || !oFolderLink)
	    return;

    Element.removeClassName(oFolderLink, "opened")
    Element.addClassName(oFolderLink, "closed")
    Element.removeClassName(oFolderName, "selected")  
}

function isDirOpened(dirId)
{
	var oFolderDiv = $(dirId);
	var oChildsDiv = getFirstNodeByTagName(oFolderDiv, "div");
	if(!oChildsDiv)
	    return false;

	if(oChildsDiv.style.display=="block")
	    return true;
    else
        return false;
}



function getOutput(params, onSuccessCB)
{
    var pars = "what=" + params.what;
    if(params.dir)
        pars += "&dir=" + params.dir;
    if(params.fileName)
        pars += "&fileName=" + params.fileName;

    if(params.setHasRights)
        pars += "&setHasRights=" + params.setHasRights;


    new Ajax.Request( 'getOutput.php', {method: 'post', parameters: pars, onSuccess: onSuccessCB} );		   
}


function outputUserPanel(originalRequest)
{
    $("userPanel").innerHTML = originalRequest.responseText;
}

function outputDirectorie(originalRequest)
{
    $("content").innerHTML = originalRequest.responseText;
}

function outputRightsPanel(originalRequest)
{
    $("rightsPanel").innerHTML = originalRequest.responseText;
}


function outputSubDirs(originalRequest)
{
    
    var trennerPos = originalRequest.responseText.indexOf("|");
    var dirId = originalRequest.responseText.substring(0,trennerPos);

 	var oFolderDiv = $(dirId);
	if(dirId=="dirListRoot")
	{
	    oFolderDiv.innerHTML = originalRequest.responseText.substr(trennerPos+1);
	    //ersten Ordner auswählen
	    selectFolder(oFolderDiv.down().id);
	    return;
	}
	var oChildsDiv = getFirstNodeByTagName(oFolderDiv, "div");
	if(!oChildsDiv)
	    return false;

 
    oChildsDiv.innerHTML = originalRequest.responseText.substr(trennerPos+1);
    oChildsDiv.loaded = true;
}


function editUser()
{
    var oUsers = $("users");
    if(oUsers.selectedIndex==-1)
    {
        alert("Es ist kein Benutzer selektiert!");
        return;
    }
    $("userForm").style.display = "block";
    $("username").value = oUsers.options[oUsers.selectedIndex].innerHTML;
    $("userid").value = oUsers.options[oUsers.selectedIndex].value;
    $("password").value = $("password2").value = "";
    $("admin").checked = oUsers.options[oUsers.selectedIndex].getAttribute("admin", 0) == "1";
    $("userFormCaption").innerHTML = "Benutzer bearbeiten";
}

function saveUser()
{
    var sUsername  = $("username").value.trim();
    var sPassword  = $("password").value.trim();
    var sPassword2 = $("password2").value.trim();
    var iUserId    = parseInt($("userid").value);
    
    
    if(userExists(sUsername) && iUserId == -1)
    {
        alert("Es existiert bereits ein User mit dem Namen '" + sUsername + "'!");
        return;
    }
    if(sUsername.length==0)
    {
        alert("Kein Benutzername angegeben!");
        return;
    }
    if(iUserId == -1 && sPassword.length==0)  //Bei Neuem User Passwort pflicht!
    {
        alert("Kein Passwort angegeben!");
        return;
    }
    if(sPassword.length > 0 && sPassword!=sPassword2)
    {
        alert("Die Passwörter stimmen nicht überein!");
        return;
    }
    
    var admin = 0;
    if($("admin").checked)
        admin = 1;
    
    var pars = "action=saveUser&userName=" + sUsername + "&password=" + sPassword + "&userid=" + iUserId + "&admin=" + admin;
    new Ajax.Request( 'action.php', {method: 'post', parameters: pars, onSuccess: readUsers} );		   
}

function saveRights()
{
    var oInputs = $("rightsPanel").getElementsByTagName("input");    
    var sRights = "";
    for(var i=0, iCount = oInputs.length; i < iCount; i++)
    {
        if(oInputs[i].type=="radio" && oInputs[i].checked && oInputs[i].value >= 0)
        {
            sRights += "&user" + oInputs[i].name + "=" + oInputs[i].value;
        }
    }

	var oFolderDiv = $($("dirId").value);
	var oFolderName = getFirstNodeByTagName(oFolderDiv, "span");
    if(oFolderName)
    {
        if(sRights.length > 0)
            Element.removeClassName(oFolderName, "withoutRights");
        else
            Element.addClassName(oFolderName, "withoutRights");
    }
    var pars = "action=saveRights&dir=" + $("dirId").value + sRights;
    
    new Ajax.Request( 'action.php', {method: 'post', parameters: pars, onSuccess: readRights} );		   
}

function addUser()
{
    var oUsers = $("users");
    oUsers.selectedIndex=-1;

    $("userForm").style.display = "block";
    $("username").value = "";
    $("userid").value   = -1;
    $("userFormCaption").innerHTML = "Neuen Benutzer anlegen";    
    $("password").value = $("password2").value = "";
    $("admin").checked = false;
}


function deleteUser()
{
    var oUsers = $("users");
    if(oUsers.selectedIndex==-1)
    {
        alert("Es ist kein Benutzer selektiert!");
        return;
    }    
    var check = confirm("Soll der Benutzer '" + oUsers.options[oUsers.selectedIndex].innerHTML + "' wirklich gelöscht werden?");
    if (check == true)
    {
        var pars = "action=deleteUser&userid=" + oUsers.options[oUsers.selectedIndex].value;
        new Ajax.Request( 'action.php', {method: 'post', parameters: pars, onSuccess: readUsers} );		   
    }    
}

function userExists(sUsername)
{
    for(var i=0, iCount = $("users").options.length; i < iCount; i++)
    {
        if(sUsername == $("users").options[i].innerHTML)
            return true;
    }
    return false;
}

function editComment(element, isFolderComment, event)
{
    var oEditDiv = getFirstNodeByTagName(element, "div");

    if(!oEditDiv.editor)
    {
        var myOptions = {   okButton: false,
                            cancelLink: false, 
                            onComplete: editDone, 
                            disableHover: true,  
                            callback: editCallback,
                            noFormElement: true,
                            cancelOnBlur: true};
        if(isFolderComment)
        {
            myOptions.rows = 5;
            myOptions.okButton = true;
            myOptions.noFormElement = false;
            myOptions.okText = "Speichern";
            myOptions.clickToEditText = "zum Bearbeiten klicken";
        }
                
        oEditDiv.editor = new Ajax.InPlaceEditor(oEditDiv, "action.php", 
            myOptions);    
    }
    
    if(!isFolderComment)
    {
        element.oldPadding = element.style.padding;
        element.oldTextAlign = element.style.textAlign;
        element.style.padding = 0;    
        element.style.textAlign = "center";
    }
    oEditDiv.editor.enterEditMode();
    //oEditDiv.editor.editField.style.width = "95%";
}

function editDone(transport, element)
{
    if(element.parentNode.id!="folderComment")
    {
        element.parentNode.style.padding   = element.parentNode.oldPadding;
        element.parentNode.style.textAlign = element.parentNode.oldTextAlign;
    }
    element.editor.dispose();   
}

function editCallback(form, value) 
{ 
    var id=form.id;
    var baseNameAsDefault = 0;
    if(id.startsWith('folderComment-'))
    {
        id = id.substring('folderComment-'.length);
        baseNameAsDefault = 1;
    }
    id = id.substring(0,id.indexOf('-inplaceeditor'));
    return "action=editComment&path=" + id + "&value=" + encodeURIComponent(value) + "&baseNameAsDefault=" + baseNameAsDefault;
}

function showEntrie(event, element, handle)
{
    element = $(element);
    
    if(handle=="external" || event.altKey)
    {
        var link = (element.next(".comment").down("div").getAttribute("path"));
        myWindow = window.open(link, "_blank");
        myWindow.focus();
    }
    else
    {
        var link = element.next(".comment").down("div").id;
        getOutput({what: "getMediaInfo", fileName: link}, showInternal); 
        
    }
}

function showInternal(originalRequest)
{
    var fileInfo = originalRequest.responseText.evalJSON();
    if(!fileInfo.width || !fileInfo.height)
    {
        fileInfo.height = 0;
        fileInfo.width  = 200;
    }

    
    var sUrl = "";
        
    if(fileInfo.fileType!="img")
        fileInfo.height += 17;  //Video-Control Bar
    win = new Window(
                        {minWidth:300, 
                         destroyOnClose:true, 
                         className: "mac_os_x", 
                         url:"showMedia.php?type=" + fileInfo.fileType + "&w=" + fileInfo.width + "&h=" + fileInfo.height  + "&src=" + fileInfo.link,
                         title: fileInfo.baseName,
                         width:fileInfo.width+4, 
                         height:fileInfo.height+6, 
                         destroyOnClose: true, 
                         recenterAuto:false});     

    var StatusText = "";
    if(fileInfo.fileType == "sound")
        StatusText += "Dauer: " + fileInfo.playtime; 
    else if(fileInfo.fileType == "mov" || fileInfo.fileType == "video")
        StatusText += "Dauer: " + fileInfo.playtime + " | Abmessungen: " + fileInfo.width + " x " +  fileInfo.height;
    else if(fileInfo.fileType = "img")
        StatusText += "Abmessungen: " + fileInfo.width + " x " +  fileInfo.height;
    
    win.setStatusBar("<span style='font-size:10px;'>" + StatusText + "</span>");
    win.showCenter();
}


function positionDirList()
{
    var oSidebar = $('sidebar');
    var dims = $('sidebar').getDimensions();
    if(oSidebar.oldDims && oSidebar.oldDims.width==dims.width && oSidebar.oldDims.height==dims.height)
        return;
    oSidebar.oldDims = dims;
    $("dirListRoot").style.width  = (dims.width - 5) + "px";
    $("dirListRoot").style.height = (dims.height - 100) + "px";
    
    var panelName = $("panelName");
    if(panelName)
    {
        panelName.style.left = (dims.width - 100) + "px";
    }
}

