var ImageGallery = {
  
  
  
  toggleSet:function(state) {
    if (state == 'on') {
      Element.setStyle($('ImageSetEditor'), {'display':'block'});
      Element.setStyle($('addSetButton'), {'display':'none'});
      Element.setStyle($('manageSetButton'), {'display':'none'});
    } else {
      Element.setStyle($('ImageSetEditor'), {'display':'none'});
      Element.setStyle($('addSetButton'), {'display':'inline'});
      Element.setStyle($('manageSetButton'), {'display':'inline'});
      $('imageSetAction').value = '';
      $('imageSetName').value = ''; 
    }
  },
  
  existsInSet:function(tree_id, name) {
     var tree = $(tree_id);
     var childNodes = tree.childNodes;
     
     for(var i = 0; i < childNodes.length; i++) {
        var node = childNodes[i];
        if (node.nodeName == 'LI' && childNodes[i].getAttribute('id') == name) {
            alert('Error: a set exists with this name: ' + name + '.  Please choose another name.  \nNote: special characters are replaced with underscores.');
            return false;
        }
     }
     return true;
     
  },
  
  
  modifySet:function(tree_id, id, path) {
     var tree = $(tree_id);
     var childNodes = tree.childNodes;
     $('imageSetAction').value = id;
     $('imageSetName').value = id;
     
     this.toggleSet('on');
     
  },
  

  
  deleteSet:function(tree_id, id, path) {
     var tree = $(tree_id);
     var childNodes = tree.childNodes;
     if(confirm('Warning: this set may be linked to another gallery.\nDo you really want to delete this set?')) {
       for(var i = 0; i < childNodes.length; i++) {
          var node = childNodes[i];
          if (node.nodeName == 'LI' && childNodes[i].getAttribute('id') == id) {
            
                
            Element.setStyle($('imageSetStatus'), {'display':'block'});
            Element.setStyle($('ImageSetEditor'), {'display':'none'});
            
            tree.removeChild(node);
            //var strTree = this.prepareTree(tree);
            
            var url = SiteVars.path_to_top + '/ajax/save_gallery?ref=' + path + '&set=' + encodeURIComponent(id) + '&display-xml=true&action=remove&path=' + path;
       
            var r = new Ajax.Request(
            url,
            {
              method:'post',
              onFailure: function(req)  {
                Element.setStyle($('imageSetStatus'), {'display':'none'});
                Element.setStyle($('addSetButton'), {'display':'inline'});
                alert('ERROR: Could not save image set.') 
              },
              onComplete: function(req) {
                // add to tree
                Element.setStyle($('imageSetStatus'), {'display':'none'});
                Element.setStyle($('addSetButton'), {'display':'inline'});
                
                $('imageSetName').value = '';
                this.toggleSet('off');
              }
            }
            );            
            
          }
   
       }
     }
     
     
     
  },
  
  prepareTree:function(tree) {
     var childNodes = tree.childNodes;
     var str = '';
 
     for(var i = 0; i < childNodes.length; i++) {
        var node = childNodes[i];
        if (node.nodeName == 'LI') {
       
          
          var itemName = $('link'+node.getAttribute('id')).innerHTML;
          str += node.getAttribute('id').toLowerCase() + '|' + itemName + ',';      
        }
     }
     return(str);
  },
  
  /* this replaces anything that isnt A-Za-z9-9_- to underscores */
  createItemName:function(item) {
    var strName = item.replace(/[^A-Za-z0-9_\-]/g, '_');
    strName = strName.replace('__', '_');  
    //var strName = item;
    
    strName = strName.replace(/^[_]+/, '');
    strName = strName.replace(/[_]+$/, '');

    return((strName.length > 100) ? strName.substring(0, 100) : strName);
      
    
  },
  
  replaceSet:function(path, tree_id, set, value) {
     var tree = $(tree_id);
     var childNodes = tree.childNodes;
     

 
     for(var i = 0; i < childNodes.length; i++) {
        var node = childNodes[i];
        if (node.nodeName == 'LI' && node.getAttribute('id') == set) {
           //node.setAttribute('id') = value;
           //node.innerHTML = '<a href="' + SiteVars.path_to_top + SiteVars.this_url + '?setName=' + value + '" id="' + value + '">' + value + '</a> [ <a href="">edit</a> ] [ <a href="" onclick="ImageGallery.deleteSet(\'' + tree_id + '\', \'' + value + '\', \'' + path + '\');return false;">x</a> ]';
           node.innerHTML = '<a href="' + SiteVars.path_to_top + SiteVars.this_url + '?setName=' + value + '" id="' + value + '">' + value + '</a> [ <a href="" onclick="ImageGallery.deleteSet(\'' + tree_id + '\', \'' + value + '\', \'' + path + '\');return false;">x</a> ]';
        }
     }
     
  },
  
  saveSet:function(tree_id, path) {
    var tree = $(tree_id);
    var strItem = $('imageSetName').value;
    var strItemName = this.createItemName(strItem);
    
    
  
    
    if (strItem != '') {
      
      if(this.existsInSet(tree_id, strItemName) == false) {
        return false; 
      }
      
      
      Element.setStyle($('imageSetStatus'), {'display':'block'});
      Element.setStyle($('ImageSetEditor'), {'display':'none'});
    
      
      if ($('imageSetAction').value == '') {
        var newNode = document.createElement('LI');
        
        newNode.setAttribute('id', strItemName);
        //AS:newNode.innerHTML = '<a href="' + SiteVars.path_to_top + SiteVars.this_url + '?setName=' + path + '_' + strItemName + '" id="link' + strItemName + '">' + strItem + '</a> [ <a href="" onclick="ImageGallery.deleteSet(\'' + tree_id + '\', \'' + strItemName + '\', \'' + path + '\');return false;">x</a> ]'
        newNode.innerHTML = '<a href="' + SiteVars.path_to_top + SiteVars.this_url + '?setName=' + SiteVars.CMS_CURRENT_DATE + '_' + strItemName + '" id="link' + strItemName + '">' + strItem + '</a> [ <a href="" onclick="ImageGallery.deleteSet(\'' + tree_id + '\', \'' + strItemName + '\', \'' + path + '\');return false;">x</a> ]'
        
        tree.appendChild(newNode);
      } else {
        // modify the existing node...
        this.replaceSet(path, tree_id, $('imageSetAction').value, strItemName);
      }
      
      // and now set up the ajax
      //var strTree = this.prepareTree(tree);
      
      var url;
  
      
      if ($('imageSetAction').value == '') {
        //AS:url = SiteVars.path_to_top + '/ajax/modify_gallery?ref=' + path + '_' + strItemName.toLowerCase()   + '&set=' + encodeURIComponent(strItem) + '&display-xml=true&action=add&value=' + encodeURIComponent(strItem) + '&path=' + path;
        url = SiteVars.path_to_top + '/ajax/modify_gallery?ref=' + SiteVars.CMS_CURRENT_DATE + '_' + strItemName.toLowerCase()   + '&set=' + encodeURIComponent(strItem) + '&display-xml=true&action=add&value=' + encodeURIComponent(strItem) + '&path=' + path;
        
      } /*AS: else { // modify
        url = SiteVars.path_to_top + '/ajax/modify_gallery?ref=' + path + '_' + strItemName.toLowerCase() + '&set=' + encodeURIComponent($('imageSetAction').value) + '&display-xml=true&action=modify&value=' + encodeURIComponent(strItem) + '&path=' + path;
        if ($('imageSetAction').value == strItemName) {
          return; 
        }
        
        
      } */
      
   
      
      
      
      var r = new Ajax.Request(
			url,
      {
        method:'post',
				onFailure: function(req)  {
          Element.setStyle($('imageSetStatus'), {'display':'none'});
          Element.setStyle($('addSetButton'), {'display':'inline'});
          Element.setStyle($('manageSetButton'), {'display':'inline'});
          
          alert('ERROR: Could not save image set.') 
          $('imageSetAction').value = '';
        },
				onComplete: function(req) {
          // add to tree
          Element.setStyle($('imageSetStatus'), {'display':'none'});
          Element.setStyle($('addSetButton'), {'display':'inline'});
          Element.setStyle($('manageSetButton'), {'display':'inline'});
          
          $('imageSetName').value = '';
          $('imageSetAction').value = '';
          this.toggleSet('off');
        }
      }
      );

      
    
    } else {
      alert('Please enter a set name.'); 
    }
    
    
    
    
  },
  
  editSetWindow:function(setName) {
    // open admin url
    var isSet = '';
    if (document.location.href.indexOf('setName') > -1) {
      isSet = '&imageSet=true'; 
    }
    
    var w = window.open('/admin?action=custom_edit_form&path=/xml_content/shared/ImageSets/' + setName + '.xml&refreshURL=/ajax/close_gallery' + isSet , 'setedit', 'width=800,height=600,resizable=true,scrollbars=yes,toolbar=yes,menubar=yes,location=yes,status=yes');
    return false;
  },
  
  unlockFile:function(filename, user) {
    if(confirm('This image gallery is locked by: ' + user + '\nDo you want to unlock this file?')) {
      
       var url = '/admin?action=unlock&path=/xml_content/shared/ImageSets/' + filename + '.xml' + '&refreshURL=admin!action~list|path~/xml_content/shared/ImageSets';

       
      var r = new Ajax.Request(
			url,
      {
        method:'post',
				onFailure: function(req) { 
          alert('ERROR: Could not unlock file.  Please get the administrator to unlock the file.');
        },
        onComplete: function(req) {
          Element.setStyle($('lock'), {'display': 'none'});              
        }
      });
      
    }
  },

  /* AS:06/18/2007 */
  publishFile:function(filename) {
    if(confirm('Do you want to publish this file?')) {
      
      var url = '/admin?action=publish&path=/xml_content/shared/ImageSets/' + filename + '.xml';     
      
      var r = new Ajax.Request(
			url,
      {
        method:'post',
				onFailure: function(req) { 
          alert('ERROR: Could not publish file.  Please get the administrator to publish the file.');
        },
        onComplete: function(req) {
        //onSuccess: function(req) {
          Element.setStyle($('publish'), {'display': 'none'});               
          alert('This gallery is published.');
        }
      });
      
    } 
    
  }



}