//prefexes
var nodePrefex         = "no";
var nodeChildrenPrefex = "nd";
var inputPrefex        = "in";

//colors
var SELECTED_COLOR   = "#FBEDCA";
var BACKGROUND_COLOR = "transparent";
var UNDEFINED        = "undefined";

var BEST             = "best";
var PURCHASED        = "purchased";
var SELLABLE         = "sellable";

//global variables
var nodeLastId         = 0;
var lastSelectedNodeId = null;
var dragObject       = null;
var dropObject       = null;
var doCopy           = null;
var selectedPhoto    = null;

var albumsNodeId;
var groupsNodeId;
var bestNodeId;
var sellableNodeId;
var purchasedNodeId;

function initTree() {               
    document.body.onmousedown = mouseDown;
    document.onmousemove      = mouseMove;
    document.onmouseup        = mouseUp;    
    doCopy = false;
    nodeLastId = 0;
    fillTree();                               
}

function fillTree() {                      
    var albums = $('albumList').value.split("*");
    var groups = $('interestList').value.split("*");  
    
    $("albums").innerHTML = '';
    $("groups").innerHTML = '';
    $("other").innerHTML = '';  
    
    var isPur = $('pur');    

    for(var i = 0; i < albums.length; i++){
        var album = albums[i].split("#");
                       
        nodeId = addTreeNodeText("albums", album[0], "album_"+album[1], ( i % 2 == 0 ? "odd ":"even" ) + ((album[2] == "closed") ? " closed" : " open"));
        if(i==0 && !isPur) {treeNodeSelected(nodeId);}                                
    }

    
    if($('interestList').value != "" && $('interestList').value != null) {          
        for(var i = 0; i < groups.length; i++){
            var group = groups[i].split("#");               
            addTreeNodeText("groups", group[0], "group_"+group[1], (i % 2 == 0 ? "odd" : "even") + ((group[2] == "closed")? " closed" : " open"));                                        
        }
    }
        
    bestNodeId      = addTreeNodeText("other", "My best photos",     BEST, 'odd');    
    sellableNodeId  = addTreeNodeText("other", "My sellable photos",  SELLABLE, 'even');
    purchasedNodeId = addTreeNodeText("other", "My purchased photos", PURCHASED, 'odd');
    if (isPur) {
        treeNodeSelected(purchasedNodeId);
    }
}


function addTreeNodeText(parentNodeId, childNodeName, baseId, className){

    nodeLastId++;

    var newLiId    = nodePrefex + nodeLastId;
    var newUlId    = nodeChildrenPrefex + nodeLastId;
    var newInputId = inputPrefex + nodeLastId;
    
    var triggers = "";
    if(baseId){ triggers = "onmouseover=\"setDropObject(this);\" onmouseout=\"removeDropObject(this);\""; }
      
    var newNodeText = "<li id=\""+newLiId+"\" "+triggers+" class=\""+className+"\"   >"+       
                    childNodeName+        
                    "<input id=\""+newInputId+"\" type=\"hidden\" value=\""+baseId+"\"/>"+  
                  "</li>";
                                                                                                                                                                                                    
    var parentUl = document.getElementById(parentNodeId);
    if(!parentUl.getElementsByTagName('li')) {
        parentUl.innerHTML = newNodeText;
    } else {
        parentUl.innerHTML += newNodeText;    
    }    
    
    
    return newLiId;
}

function removeTreeNode(nodeId){    
    var childNode = document.getElementById(nodePrefex+nodeId.substring(2));
    childNode.parentNode.removeChild(childNode);  
}

function colorSelectedNode (selectedNodeId) {
    selectedNodeId = nodePrefex + selectedNodeId.substring(2);
    var selectedNode = $(selectedNodeId);
    var lastSelectedNode = $(lastSelectedNodeId);                            
    if(lastSelectedNode){                
        var cName = lastSelectedNode.className;
        lastSelectedNode.className = cName.replace("selected", "");         
    }    
    selectedNode.className += " selected";
    lastSelectedNodeId = selectedNode.id;    
}

var enableOrdering = false; 
function treeNodeSelected(selectedNodeId) {     
    colorSelectedNode(selectedNodeId);    
    
    
    
    var albumId = $(inputPrefex+selectedNodeId.substring(2)).value;
    var entId = albumId.substring(albumId.indexOf("_")+1);
    var entType = (albumId == BEST
              || albumId == PURCHASED
              || albumId == SELLABLE) ? albumId : albumId.substring(0, albumId.indexOf("_"));
    
    var pageName = null;                
    if(entType == "album")        { pageName = "album-photos";}
    else if(entType == "group")   { pageName = "group-photos";} 
    else if(entType == BEST)      { pageName = "best-photos";}
    else if(entType == PURCHASED) { pageName = "purchased-photos";}
    else if(entType == SELLABLE)  { pageName = "sellable-photos";}
    var tumbsCont = $("thumbsContainer");
        
    if(albumId != "null") {
        $("thumbsContainer").innerHTML = '<div style="margin-top: 200px; text-align: center; font-weight: bold;">Loading, please wait...</div>';
        $("treeVeil").style.display = "block";
        var callback = function(status, req) {
            if (status == 0) {                
                $("thumbsContainer").innerHTML = req.responseText;
                $("treeVeil").style.display = "none";
                selectedPhoto = null;
                selectedPlace = null;
                if(entType == "album" || entType == BEST){
                    makePagerDroppable();
                    makeThumbsDraggable();
                 }
            } else if (status == -1) { 
            
            } else                   { 
                if(req.status == 403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }
            }                                                                   
        }
        
        
        
             
        var parameters = "page="+pageName+"&id="+entId+"&ajax=1";       
        ajaxCall(parameters, callback, true);   
        
        var bModify      = $("buttonModify");
        var bPrice       = $("buttonPrice");
        var bDelete      = $("buttonDelete");
        var bCreateAlbum = $("buttonCreateAlbum");
        var bEditAlbum   = $("buttonEditAlbum");  
        var bDeleteAlbum = $("buttonDeleteAlbum");
        var bCreateGroup = $("buttonCreateGroup"); 
        var bEditGroup   = $("buttonEditGroup");  
        var bDeleteGroup = $("buttonDeleteGroup");
        var bDownload    = $("buttonDownload");   
        
                
        if(albumId == BEST){
            bModify.style.display      = "";
            bPrice.style.display       = "";
            bDelete.style.display      = "";
            
            bCreateAlbum.style.display = "none";
            bEditAlbum.style.display   = "none";
            bDeleteAlbum.style.display = "none";
            
            bCreateGroup.style.display = "none";
            bEditGroup.style.display   = "none";
            bDeleteGroup.style.display = "none";
            
            bDownload.style.display    = "none";
            
            enableOrdering = true;  
        } else if (albumId == PURCHASED){
            bModify.style.display      = "none";
            bPrice.style.display       = "none";
            bDelete.style.display      = "none";
            
            bCreateAlbum.style.display = "none";
            bEditAlbum.style.display   = "none";
            bDeleteAlbum.style.display = "none";
            
            bCreateGroup.style.display = "none";
            bEditGroup.style.display   = "none";
            bDeleteGroup.style.display = "none";
            
            bDownload.style.display    = "";
            
            enableOrdering = true;  
        } else if (albumId == SELLABLE){
            bModify.style.display      = "";
            bPrice.style.display       = "";
            bDelete.style.display      = "none";
            
            bCreateAlbum.style.display = "none";
            bEditAlbum.style.display   = "none";
            bDeleteAlbum.style.display = "none";
            
            bCreateGroup.style.display = "none";
            bEditGroup.style.display   = "none";
            bDeleteGroup.style.display = "none";
            
            bDownload.style.display    = "none";
            
            enableOrdering = false;         
            
                            
        } else if(albumId == "album_"+UNDEFINED){
            
            
            bModify.style.display      = "";
            bPrice.style.display       = "";
            bDelete.style.display      = "";          
            
            bCreateAlbum.style.display = "";
            bEditAlbum.style.display   = "none";
            bDeleteAlbum.style.display = "none";
            
            bCreateGroup.style.display = "";
            bEditGroup.style.display   = "none";
            bDeleteGroup.style.display = "none";
            
            bDownload.style.display    = "none";
            
            enableOrdering = false;
            
        } else if(entType == "album") { 
            bModify.style.display      = "";
            bPrice.style.display       = "";
            bDelete.style.display      = "";          
            
            bCreateAlbum.style.display = "";
            bEditAlbum.style.display   = "";
            bDeleteAlbum.style.display = "";
            
            bCreateGroup.style.display = "none";
            bEditGroup.style.display   = "none";
            bDeleteGroup.style.display = "none";
            
            bDownload.style.display    = "none";
            
            enableOrdering = true;  
            
        } else if(entType == "group"){
            bModify.style.display      = "";
            bPrice.style.display       = "none";
            bDelete.style.display      = "";
            
            bCreateAlbum.style.display = "none";
            bEditAlbum.style.display   = "none";
            bDeleteAlbum.style.display = "none";
            
            bCreateGroup.style.display = "";
            bEditGroup.style.display   = "";
            bDeleteGroup.style.display = "";
            
            bDownload.style.display    = "none";
            
            enableOrdering = false;
        }                       
    } else {
        tumbsCont.innerHTML = "";                                       
        if(selectedNodeId.substring(2) == albumsNodeId.substring(2)){           
            bCreateAlbum.style.display = "";
            bCreateGroup.style.display = "none";      
        } else if(selectedNodeId.substring(2) == groupsNodeId.substring(2)){            
            bCreateGroup.style.display = "";
            bCreateAlbum.style.display = "none";              
        }
                            
        bEditAlbum.style.display   = "none";
        bDeleteAlbum.style.display = "none";
                
        bEditGroup.style.display   = "none";
        bDeleteGroup.style.display = "none";
        
        bModify.style.display = "none";
        bPrice.style.display  = "none";
        bDelete.style.display   = "none";                        
        bDownload.style.display    = "none";
    }
}

function makeThumbsDraggable() {
    var thumbId = 0;
    while($("thumb_"+thumbId)) {
        makeDraggable($("thumb_"+thumbId));
        thumbId++;  
    }
}

function mouseDown(event){

    // IE is evil and doesn't pass the event object
    if (event == null) {event = window.event;}

    // we assume we have a standards compliant browser, but check if we have IE
    var target = event.target != null ? event.target : event.srcElement;

    if ((event.button == 0 || event.button == 1) && ((target.tagName.toLowerCase() == 'li' && target.id.substring(0,2) == nodePrefex))) {
        treeNodeSelected(target.id);
    } 
}
                                                                                    
// drag'n'drop
function mouseMove(ev){
    ev           = ev || window.event;
    var mousePos = mouseCoords(ev);
    var parDiv = $("messageDiv");
            
    if(dragObject){
        dragObject.style.position = "absolute";
   
        //mouse offset needed to place cursor on the very point of the image that was clicked       
        var pxTop = mousePos.y - parDiv.offsetTop + 7;
        var pxLeft = mousePos.x - parDiv.offsetLeft + 7;
                                                  
        dragObject.style.top  = pxTop;     
        dragObject.style.left = pxLeft;
                
        return false;
    }
}



function mouseUp(ev){   
    if(dragObject){
        ev = ev || window.event;
                
        if(dropObject){ selectedPlace = null; }
        if(dropObject) {                        
            var photoId = $(dragObject.id+"_id").value;                 
            var albumId = $(inputPrefex+dropObject.id.substring(2)).value;
            var entType = albumId.substring(0, albumId.indexOf("_"));
            albumId = albumId.substring(albumId.indexOf("_") + 1);
            
            
            var curAlbum = UNDEFINED;
            if($("curAlbumId").value.indexOf("_") != -1){
                curAlbum = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1); 
            } 
            eventName = "";             
            if(entType == "album" || albumId == BEST ) { eventName = "move-photos";}
            else if (entType == "group")               { eventName = "send-photos";}
            
                                        
            var callback = function(status, req) {
                if (status == 0) {
                    if(entType == "album"){
                        if(doCopy) {returnDragObject();}
                        else       {removeDragObject();}
                    } else if (entType == "group"){
                        returnDragObject();
                    } else if (albumId == BEST){
                        if(curAlbum == UNDEFINED){removeDragObject();}
                        else {returnDragObject();}
                    }
                } else if (status == -1) {
                    // on Fault cases
                    alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);
                    returnDragObject();
                } else {
                    if(req.status==403) {
                        openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                    } else  {
                        openMessageBox(req.statusText);
                    }
                    returnDragObject();
                }                                                           
            }                                                                   
            var parameters = "page="+eventName+"&newalbum="+albumId+"&photo="+photoId+"&album="+curAlbum;                                                           
            if(doCopy) { parameters+="&copy=true";}             
            ajaxCall(parameters, callback, true);                                               
        } else { 
            var dragId = dragObject.id;
            dragId = dragId.substring(dragId.indexOf("_")+1);
            
            if((!selectedPlace || dragId == selectedPlace) && !pagerDropObject ){                                
                returnDragObject(); 
            } else {
                var pos;
                if(pagerDropObject){                    
                    var copyPage = parseInt(pagerDropObject.innerHTML);                 
                    if(copyPage && copyPage != "NaN"){                                                                      
                        pos = parseInt((copyPage-1)*15 + parseInt($("curPageId").value > copyPage-1 ? -1 : 1));                     
                    } else {
                        returnDragObject();
                    }
                } else {
                    pos = parseInt($("curPageId").value*15+parseInt(selectedPlace));
                }
                                        
                var curAlbum = UNDEFINED;
                if($("curAlbumId").value.indexOf("_") != -1){
                    curAlbum = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1); 
                } else {
                    curAlbum = $("curAlbumId").value;
                }
                
            
                
                var parameters = "page=photo-position&position="+pos+"&id="+$(dragObject.id+"_id").value+"&album="+curAlbum+"&ajax=1";              
                var callback = function(status, req) {
                    if (status == 0) {
                        refreshAlbumPage();             
                    } else if (status == -1) {
                        // on Fault cases
                        alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);
                        returnDragObject();
                    } else {
                        if(req.status==403) {
                            openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                        } else  {
                            openMessageBox(req.statusText);
                        }
                        returnDragObject();
                    }                                                           
                }               
                ajaxCall(parameters, callback, true);               
            }                        
        }               
    }   
}



//DnD object operations

function setDropObject(elem){               
    var selAlbumId = $(inputPrefex+elem.id.substring(2)).value;         
    if(dragObject 
    && selAlbumId != $("curAlbumId").value   
    && selAlbumId != UNDEFINED
    && selAlbumId != "album_"+UNDEFINED
    && selAlbumId != PURCHASED
    && selAlbumId != SELLABLE        
    && selAlbumId != null){      
        dropObject = elem;                                              
    } else { dropObject = null; }
    
    var cName = $(nodePrefex+elem.id.substring(2)).className;
    if(cName.indexOf("selected") == -1) {
        $(nodePrefex+elem.id.substring(2)).className += " hover";    
    }                       
}

function removeDropObject(elem){
    if(dragObject){ dropObject = null;}     
    var cName = $(nodePrefex+elem.id.substring(2)).className;
    $(nodePrefex+elem.id.substring(2)).className = cName.replace("hover", "");    
}

var selectedPlace;

function makeDraggable(item){
    if(!item) return;
    item.onmousedown = function(ev){
        dragObject  = this;
        dragObject.parentNode.style.backgroundColor = SELECTED_COLOR;                   
        return false;
    }       
    
    
    item.onmouseover = function(ev) {
        if(enableOrdering){
            if(dragObject){
                if(dragObject != item){
                    mOffset = getMouseOffset(item, ev);
                    
                    var itemId = item.id;
                    itemId = itemId.substring(itemId.indexOf("_") + 1);
                    var dragId = dragObject.id;
                    dragId = dragId.substring(dragId.indexOf("_") + 1);
                    
                    if(item.offsetWidth/2 > mOffset.x) {                    
                        if(parseInt(parseInt(itemId) - parseInt(1)) != dragId){                                                                         
                            $("thumbCellLeft_"+itemId).style.backgroundColor  = "#000";
                            $("thumbCellRight_"+itemId).style.backgroundColor = "";                                                                                     
                            selectedPlace = itemId;
                        } else {
                            selectedPlace = dragId;
                        }
                    } else {                                                    
                        if(parseInt(parseInt(itemId) + parseInt(1)) != dragId){                                                                     
                            $("thumbCellLeft_"+itemId).style.backgroundColor  = "";
                            $("thumbCellRight_"+itemId).style.backgroundColor = "#000";                                                                     
                            selectedPlace = parseInt(parseInt(itemId) + parseInt(1));
                        } else {
                            selectedPlace = dragId;
                        }               
                    }               
                }                                                                                       
            }               
        }
    }
    
    item.onmouseout = function(ev) {
        if(enableOrdering){ 
            if(dragObject){
                if(dragObject != item){
                    var itemId = item.id;
                    itemId = itemId.substring(itemId.indexOf("_")+1);               
                    $("thumbCellLeft_"+itemId).style.backgroundColor  = "";
                    $("thumbCellRight_"+itemId).style.backgroundColor = "";                                             
                }
            }
        }
    }       
}   

function returnDragObject() {
    if(dragObject){     
        dragObject.parentNode.style.backgroundColor = BACKGROUND_COLOR;
        dragObject.style.position = "static";
        dragObject = null;      
        dropObject = null;      
    }
} 

function removeDragObject(){
    dragObject.parentNode.style.backgroundColor = BACKGROUND_COLOR; 
    dragObject.parentNode.removeChild(dragObject);
    dragObject = null;  
    dropObject = null;
        
    refreshAlbumPage();
}


// photo selection
function setPhotoSelected(photo) {  
    if(selectedPhoto && selectedPhoto == photo){
        selectedPhoto.style.backgroundColor = BACKGROUND_COLOR;
        selectedPhoto = null;
        dragObject = null;
        $("buttonDownload").onclick = null;         
    } else {
        photo.style.backgroundColor = SELECTED_COLOR;
        if(selectedPhoto) {
            selectedPhoto.style.backgroundColor = BACKGROUND_COLOR;
        }   
        selectedPhoto = photo;      
        
        if($("buttonDownload").style.display!="none"){
            $("buttonDownload").onclick = function() {
                document.location.href = $("orig_"+selectedPhoto.id.substring(selectedPhoto.id.indexOf("_")+1)+"_id").value;
            }   
        }                   
        dragObject = null;  
    }                           
}

//photo modification
function pricePhoto() {
    if(selectedPhoto) {     
        var photoId = $(selectedPhoto.id+"_id").value;                      
        openAjaxMessageBox("page=price-photo-dialog&id="+photoId+"&ajax=1", "$('matrixHelp').style.width = $('matrixTable').clientWidth;");                                             
    }   
}


function selectPrice(elem){ 
    var lics = $("licenseIds").value.split(":");
    var cats = $("categoryIds").value.split(":");
    var lic = elem.id.substring(0, elem.id.indexOf("_"));
    var cat = elem.id.substring(elem.id.indexOf("_")+1);
    
    
    if(elem.className == "sel") {                        
        $("lic_"+lic).value = "x";
        elem.style.backgroundColor = "#e6e6e6";
        for(i = 0; i < cats.length; i++){
            $(lic+"_"+cats[i]).className = "";
            $(lic+"_"+cats[i]).style.backgroundColor = "#e6e6e6";   
        }       
    } else {
        elem.className = "sel";
        elem.style.backgroundColor = "#fff";
        $("lic_"+lic).value = cat;
        for(i = 0; i < cats.length; i++){
            if(cat != cats[i]){
                $(lic+"_"+cats[i]).className = "";
                $(lic+"_"+cats[i]).style.backgroundColor = "#e6e6e6";
            } 
        }
    }
}

function savePrice() {
    var lics = $("licenseIds").value.split(":");
    
    var callback = function(status, req) {
        if (status == 0) {
            closeMessageBox();  
            refreshAlbumPage();                                                 
        } else if (status == -1) {
            // on Fault cases
            alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
        } else {
            if(req.status==403) {
                openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
            } else  {
                openMessageBox(req.statusText);
            }                   
        }                                                           
    }
    
    var prices = "";
    for(i = 0; i < lics.length; i++){
        if($("lic_"+lics[i]).value != "" && $("lic_"+lics[i]).value != "x"){
            prices += lics[i]+","+$("lic_"+lics[i]).value + (i < lics.length - 1 ? ":" : "");
        }
    }   
            
    var parameters = "page=price-photo&id="+$("photoId").value+"&prices="+prices+"&ajax=1";
    ajaxCall(parameters, callback, true);
}

function modifyPhoto() {
    if(selectedPhoto) {     
        var photoId = $(selectedPhoto.id+"_id").value;                      
        openAjaxMessageBox("page=modify-photo-dialog&id="+photoId+"&ajax=1", "");                               
    }   
}

function saveModifyPhoto() {
    
    var photoId = $("photoId").value;
    var photoName = $("photoName").value;
    var photoDescription = $("photoDescription").value;
    var photoPrivate = $("photoPrivate").checked ? "false" : "true";
    var photoTags = $("photoTags").value;
    
        
    if(!photoName || photoName == "") { openMessageBox("Please enter the photo name!"); return; }   
    var callback = function(status, req) {
        if (status == 0) {
            closeMessageBox();
            refreshAlbumPage();                                                 
        } else if (status == -1) {
            // on Fault cases
            alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
        } else {
            if(req.status==403) {
                openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
            } else  {
                openMessageBox(req.statusText);
            }                   
        }                                                           
    }           
    
    var parameters = "page=modify-photo&id="+photoId+"&name="+photoName+"&desc="+photoDescription+"&public="+photoPrivate+"&tags="+photoTags+"&ajax=1";;                
    ajaxCall(parameters, callback, true);               
}

function saveDeletePhoto(completely) {
    var photoId    = $("photoId").value;
    var contId     = $("entId").value;
    var entType    = $("entType").value;
            
    var callback = function(status, req) {
        if (status == 0) {
            closeMessageBox();
            refreshAlbumPage();                                                 
        } else if (status == -1) {
            // on Fault cases
            alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
        } else {
            if(req.status==403) {
                openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
            } else  {
                openMessageBox(req.statusText);
            }                   
        }                                                           
    }
    
    var parameters = "page=delete-photo&id="+photoId+"&entId="+contId+"&entType="+entType+"&completely="+completely+"&ajax=1";              
    ajaxCall(parameters, callback, true);               
    
}

function deletePhoto() {
    if(selectedPhoto &&  $(selectedPhoto.id+"_id")) {       
        var photoId = $(selectedPhoto.id+"_id").value;
        var entId   = $("curAlbumId").value;        
        var entType = UNDEFINED;        
        if(entId.indexOf("_") && entId.indexOf("_") > -1){          
            entType = entId.substring(0, entId.indexOf("_"));
            entId   = entId.substring(entId.indexOf("_") + 1);
        } else if(entId == BEST ) {
            entType = entId;            
        }                   
            
        openAjaxMessageBox("page=delete-photo-dialog&id="+photoId+"&entType="+entType+"&entId="+entId+"&ajax=1", "");                               
    }   
}

//album modification

function createAlbum(){
    openAjaxMessageBox("page=create-album-dialog&ajax=1");  
}
function saveCreateAlbum() {            
    var albumName = $("albumName").value;
    var albumDescription = $("albumDescription").value;
    var publicity = $("albumPublic").checked ? "true" : "false";
    
    if(albumName || albumName != "") {
        var callback = function() {
            if (status == 0) {
                closeMessageBox();
                renewTree();                                                                    
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }           
        }
        
        var parameters = "page=create-album&name="+albumName+"&description="+albumDescription+"&public="+publicity+"&ajax=1";               
        ajaxCall(parameters, callback, true);
    } else {
        openMessageBox("Please enter the album name");
    }
}

function editAlbum() {
    var albumId = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1);
    var entType = $("curAlbumId").value.substring(0, $("curAlbumId").value.indexOf("_"));
    if(albumId != UNDEFINED && entType!="group"){
        openAjaxMessageBox("page=edit-album-dialog&id="+albumId+"&ajax=1");
    }   
}

function saveEditAlbum() {
    var albumName = $("albumName").value;
    var albumDescription = $("albumDescription").value;
    var publicity = $("albumPublic").checked ? "true" : "false";
    var albumId = $("editedAlbumId").value;
    
    if(albumName || albumName != "") {
        var callback = function() {
            if (status == 0) {
                closeMessageBox();
                renewTree();                                                                    
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }           
        }
        
        var parameters = "page=edit-album&id="+albumId+"&name="+albumName+"&description="+albumDescription+"&public="+publicity+"&ajax=1";              
        ajaxCall(parameters, callback, true);
    } else {
        openMessageBox("Please enter the album name");
    }
}

function deleteSelAlbum() {
    var albumId = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1);
    if(albumId != UNDEFINED){
        openAjaxMessageBox("page=delete-album-dialog&id="+albumId+"&ajax=1");
    }
}

function saveDeleteAlbum() {    
    var copyAlbum = $("copyAlbum").options[$("copyAlbum").selectedIndex].value;
    var deleteAlbum = $("deleteAlbumId").value;    
    var callback = function() {
            if (status == 0) {
                closeMessageBox();
                renewTree();                                                                    
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }           
        }
        
    var parameters = "page=delete-album&id="+deleteAlbum+"&copyAlbum="+copyAlbum+"&ajax=1";             
    ajaxCall(parameters, callback, true);
}

function refreshAlbumPage() {        
    var cai       = $("curAlbumId").value;
    var entType   = cai.substring(0, cai.indexOf("_"));
    var entId     = cai.substring(cai.indexOf("_")+1); 
    var pageName = "";
                                                                                
    if(entType == "album" || cai == UNDEFINED)        { pageName = "album-photos";}
    else if(entType == "group")   { pageName = "group-photos";} 
    else if(cai == BEST)      { pageName = "best-photos";}
    else if(cai == PURCHASED) { pageName = "purchased-photos";}
    else if(cai == SELLABLE)  { pageName = "sellable-photos";}
    
    
    
    if($("pagingContainerNamePop")) {       
        ajaxChangePage($("curPageId").value, pageName); 
        selectedPhoto   = null; 
        dragObject      = null;  
        selectedPlace   = null;   
        pagerDropObject = null;
        makeThumbsDraggable();  
        makePagerDroppable();
    }
    else {              
        innerCallback = function(status, req) {
            if (status == 0) {
                $("thumbsContainer").innerHTML = req.responseText;              
                selectedPhoto = null;
                selectedPlace = null;
                dragObject    = null;   
                pagerDropObject = null;                         
                makeThumbsDraggable();  
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }                                                           
        }                                                               
                                        
        var innerParameters = "page="+pageName+"&id="+entId+"&ajax=1";
        ajaxCall(innerParameters, innerCallback, true);
    }   
}

var pagerDropObject = null;

function makePagerDroppable() {         
    var albumId = $("curAlbumId").value;
        
    if($("pagingContainerNamePop") && albumId.substring(0, albumId.indexOf("_")) == "album" && albumId.substring(albumId.indexOf("_")+1) != UNDEFINED){                     
        var pagerSpans = $("pagingContainerNamePop").parentNode.parentNode.getElementsByTagName("span");
                
        for(i = 2; i < pagerSpans.length - 2; i++){                     
            var pagerSpan = pagerSpans[i];                      
            pagerSpan.onmouseover = function() {                                
                if(dragObject && enableOrdering && pagerSpan.innerHTML != $("curPageId").value){                    
                    this.style.backgroundColor = SELECTED_COLOR;                                            
                    pagerDropObject = this;                                                                                                                                                     
                }                               
            }
            
            pagerSpan.onmouseout = function() {
                if(dragObject && enableOrdering && pagerSpan.innerHTML != $("curPageId").value){
                    this.style.backgroundColor = BACKGROUND_COLOR;                                      
                    pagerDropObject = null;                                                                                                                         
                }                               
            }
        }
    }
}

//group modification

function createGroup(){
    openAjaxMessageBox("page=create-group-dialog&ajax=1");  
}

function saveCreateGroup() {
    var groupName = $("groupName").value;   
    if(groupName && groupName != ""){
        var groupDescription = $("groupDescription").value;         
        var selectedIcon = $("selectedIcon").value;
        if (!selectedIcon || selectedIcon == "") {
            selectedIcon = "default";
        }
        var publicity = $("groupPublic").checked ? "true" : "false";
        
        var callback = function(status, req) {
            if (status == 0) {
                closeMessageBox();  
                renewTree();                                    
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }                                                           
        }           
        
        var parameters = "page=create-group&name="+groupName+"&desc="+groupDescription+"&icon="+selectedIcon+"&public="+publicity+"&ajax=1";
        ajaxCall(parameters, callback, true);                   
    } else {
        openMessageBox("Group name shouldn't be empty!");
    }   
}

function editGroup(){       
    var groupId = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1);
    var entType = $("curAlbumId").value.substring(0, $("curAlbumId").value.indexOf("_"));    
    if(groupId != UNDEFINED && entType != "album"){
        openAjaxMessageBox("page=edit-group-dialog&id="+groupId+"&ajax=1"); 
    }               
}

function saveEditGroup() {
        
    var groupName = $("groupName").value;   
    if(groupName && groupName != "") {                           
        var groupDescription = $("groupDescription").value;
        var editedGroupId = $("editedGroupId").value;       
        var selectedIcon = $("selectedIcon").value;
        if(!selectedIcon || selectedIcon == "") selectedIcon = "default";
        var publicity = $("groupPublic").checked ? "true" : "false";
        
        var callback = function(status, req) {
        if (status == 0) {
            closeMessageBox();
            renewTree();                                        
        } else if (status == -1) {
            // on Fault cases
            alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
        } else {
            if(req.status==403) {
                openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
            } else  {
                openMessageBox(req.statusText);
            }                   
        }                                                           
    }           
        
        var parameters = "page=edit-group&id="+editedGroupId+"&name="+groupName+"&desc="+groupDescription+"&icon="+selectedIcon+"&public="+publicity+"&ajax=1";
        ajaxCall(parameters, callback, true);       
    
        
    } else {
        openMessageBox("Group name shouldn't be empty!");
    }           
}

function deleteGroup(){     
    var groupId = $("curAlbumId").value.substring($("curAlbumId").value.indexOf("_") + 1);
    var entType = $("curAlbumId").value.substring(0, $("curAlbumId").value.indexOf("_"));
    if(groupId != UNDEFINED && entType != "album"){
        openAjaxMessageBox("page=delete-group-dialog&id="+groupId+"&ajax=1");   
    }               
}

function sendDeleteGroup() {
    var groupId = $("deleteGroupId").value;
    if(groupId){
        var callback = function(status, req) {
            if (status == 0) {
                closeMessageBox();                                      
            } else if (status == -1) {
                // on Fault cases
                alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
            } else {
                if(req.status==403) {
                    openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
                } else  {
                    openMessageBox(req.statusText);
                }                   
            }                                                           
        }           
        
        var parameters = "page=delete-group&id="+groupId+"&ajax=1";
        ajaxCall(parameters, callback, true);       
    }
}

function selectIcon() {
    openAjaxMessageBox('page=select-icon-dialog&ajax=1', 'changeIconAlbum("")');
}

function changeIconAlbum(albumId) {    
    $("iconContainer").innerHTML = "Loading...";
    var callback = function(status, req) {
        if (status == 0) {
            $("iconContainer").innerHTML = req.responseText;                                        
        } else if (status == -1) {
            // on Fault cases
            alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);                  
        } else {
            if(req.status == 403) {
                openAjaxMessageBox('page=show-ajax-login&ajax=1&text=info_login_message_box_management_desktop', '');
            } else  {
                openMessageBox(req.statusText);
            }                   
        }                                                           
    }                                                               

    if(albumId == UNDEFINED) albumId = "";                                      
    var parameters = "page=icon-photos&id="+albumId+"&ajax=1";
    ajaxCall(parameters, callback, true);    
}

function setGroupIcon(elem) {
    var iconId = $("iconid"+elem.id.substring(elem.id.indexOf("_"))).value;
    var iconSrc = elem.style.backgroundImage;
    iconSrc = iconSrc.substring(iconSrc.indexOf("(")+1, iconSrc.indexOf(")"));
    $('groupIconContainer').innerHTML = ""+
    "<img src=\""+iconSrc+"\" />"+
    "<input id=\"selectedIcon\" type=\"hidden\" value=\""+iconId+"\"/>"
    closeMessageBox();
}

// copy/paste
function changeCopy(){
    doCopy = !doCopy;
}

//coordinates stuff
function mouseCoords(ev){
    if(ev.pageX || ev.pageY){
        return {x:ev.pageX, y:ev.pageY};
    }
    return {        
        x: ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
        y: ev.clientY + document.body.scrollTop + document.documentElement.scrollTop
    };      
}

function getMouseOffset(target, ev) {
    ev = ev || window.event;
    var docPos    = getPosition(target);
    var mousePos  = mouseCoords(ev);
    return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(elimend) {        
    var leftNum = 0;
    var topNum  = 0;
    try {
        while (elimend.offsetParent){
            
                leftNum += elimend.offsetLeft;
                topNum  += elimend.offsetTop;
                elimend = elimend.offsetParent;
        
        }
    } catch(ex) {}
    
    leftNum += elimend.offsetLeft;
    topNum  += elimend.offsetTop;
    return {x:leftNum, y:topNum};   
}


function renewTree() {  
    var callback = function(status, req) {
        if (status == 0) {
            $("interestList").value = req.responseText;
            
            var callback = function(status, req) {
                if (status == 0) {          
                    $("albumList").value = req.responseText;
                    $("albums").innerHTML = '';
                    $("groups").innerHTML = '';                                        
                    if(bestNodeId)     {removeTreeNode(bestNodeId); }            
                    if(purchasedNodeId){removeTreeNode(purchasedNodeId); }
                    if(sellableNodeId) {removeTreeNode(sellableNodeId); }            
                    fillTree();
                    treeNodeSelected(lastSelectedNodeId);                                                                  
                                                                                    
                } else if (status == -1) { alert("Fault! Code:"+fault.exceptionCode+", Message:"+fault.exceptionMessage);
                } else                   { openMessageBox(req.statusText);}                                                 
            }
            ajaxCall("page=get-user-albums", callback, true);                             
        } else {openMessageBox(req.statusText);}                                             
    }
    ajaxCall("page=get-user-groups", callback, true);        
}


