﻿// JScript File
var CategoryFormMode ={};
CategoryFormMode.CLOSED  = 0;
CategoryFormMode.ADD  = 1;
CategoryFormMode.EDIT  = 2;

function toFullUrl(url)
{
    var href =document.location.href;
       var l = href.length;
       var path = href.substring(l-1,l)=="/"?href:href+"/";
      return path+url;
}

var CategoriesController = Class.create();
///works with CategoryForm and tree
///binds them. And does Ajax queries
CategoriesController.prototype = 
{
    initialize:function()
    {
    if(isAdmin)
    {
       this.btnAddCategory = $("btnAddCategory");
       this.btnEditCategory =$("btnEditCategory");
       this.btnDeleteCategory =$("btnDeleteCategory");
       
       this.btnAddCategory.onclick = this.onAddCategoryClick.bindAsEventListener(this);
       this.btnEditCategory.onclick = this.onEditCategoryClick.bindAsEventListener(this);
       this.btnDeleteCategory.onclick = this.btnDeleteCategoryClick.bindAsEventListener(this);
       
         this.btnEditCategory.disabled =true;
         this.btnDeleteCategory.disabled =true;
         Position.clone(this.btnEditCategory,$("disableEdit"));
         Position.clone(this.btnDeleteCategory,$("disableDelete"));
    }
         
         this.mode = CategoryFormMode.CLOSED;
        categoryForm.onSave = this.saveCategory.bindAsEventListener(this); 
        categoryForm.onCancel = this.cancelEditing.bindAsEventListener(this); 
        
       tree.onSelect = this.onNodeSelected.bindAsEventListener(this);
       
       Event.observe(window,'load',function(){tree.selectFirstNode();});
    
       this.url =toFullUrl("gallery.aspx");
    },
    onNodeSelected:function()
    {
        
         if(tree.selectedNode==tree)
         {
           this.setButonsState(true);
                   this.categoryId ="";
              
         }  else
         {
        
              this.setButonsState(false);
             this.categoryId = tree.selectedNode.data.categoryId;
         
         }    
         if(this.onChangeCategory) this.onChangeCategory();
    },
    setButonsState:function(disable)
    {
    if(!isAdmin) return;
    if(disable)
    {
              $("disableEdit").show();
              this.btnEditCategory.disabled = true;
                $("disableDelete").show();
              this.btnDeleteCategory.disabled = true;
                   this.categoryId ="";
    }else 
    {
       $("disableEdit").hide();
         this.btnEditCategory.disabled = false;
                 $("disableDelete").hide();
              this.btnDeleteCategory.disabled = false;
     }
    },
    onAddCategoryClick:function()
    {
      this.mode = CategoryFormMode.ADD;      
      categoryForm.openAdd();
    },
    onEditCategoryClick:function()
    {
     this.mode = CategoryFormMode.EDIT;
      categoryForm.openEdit( tree.selectedNode.data);
    },
        
    btnDeleteCategoryClick:function()
    {
         if(confirm(ASK_IF_USER_WANT_TO_DELETE_CATEGORY))
         {
            tree.deleteSelectedNode();  
            var pars = "categoryId="+this.categoryId+"&deleteCategory=true";       
            send(pars,this.url);
            tree.selectFirstNode();
         }
    },    
    saveCategory:function()
    {
      var data =categoryForm.getDataObj();
      var parentNode;
      var node;
       if(this.mode==CategoryFormMode.ADD)
       {
    
        node = tree.appendNodeToSelected(data);   
           categoryForm.close();
           parentNode =tree.selectedNode;
           
       }
       if(this.mode==CategoryFormMode.EDIT)
       {
 
           tree.selectedNode.setTitle(data.name);
           tree.selectedNode.setHint(data.hint);
           tree.selectedNode.data.languages = data.languages;
           
           tree.data.url =(data.url);
           categoryForm.close();
           parentNode =tree.selectedNode.parentNode;
           node =tree.selectedNode;
     //   alert( (new CategoryXmlTransformer(data,tree.selectedNode)).toXml());
           
       }
      
       if(this.mode==CategoryFormMode.EDIT||this.mode==CategoryFormMode.ADD)
       {
       
         var xml =(new CategoryXmlTransformer(data,node,parentNode)).toXml();
         var pars = "categoryXml="+encodeURIComponent(xml)+"&saveCategory=true";
         this.category = node.data;
       
         send(pars,this.url,this.setCategoryId.bindAsEventListener(this));
    
       }
       
    }, 
    setCategoryId:function(r)
    {
    //set id for new category

      this.category.categoryId = r.responseText;
      this.category = null;
    },
         
    cancelEditing:function()
    {
      this.mode = CategoryFormMode.CLOSED;
    }    

}

CategoryXmlTransformer = Class.create();

//<category categoryId='1' parentCategoryId='2' Url='Url'>
//<language language='Русский' Title='имя категории' Description='описание'/>
//<language language='English' Title='имя категории' Description='описание'/>
//<category/>
//
//
CategoryXmlTransformer.prototype = {
  
  initialize:function(data,node,parentNode)
  {
    this.data = data;
    this.node =node;
    this.parentNode = parentNode;
  },
  toXml:function()
  {

     var parentCategoryId;
     var categoryId;
     if(this.parentNode) parentCategoryId  =this.parentNode.data.categoryId;
      if(this.node) categoryId  =this.node.data.categoryId;
     
       if(!categoryId) categoryId="";
     if(!parentCategoryId) parentCategoryId="";
     var openCategory = "<category categoryId='"+categoryId+"' parentCategoryId='"+parentCategoryId+"' url='"+this.data.url+"'>";
        
     var languages =this.getLanguages();
     var closeCategory = "</category>";
     return openCategory+languages+closeCategory;
  },
  getLanguages:function()
  {
     var result ="";
     for(var i=0;i<this.data.languages.length;i++)
     {
        var lang = this.data.languages[i];
        result+="<language language='"+lang.language+"' title='"+lang.name+"' description='"+lang.hint+"'/>"
     }
     return result;
  }
  
  
}
