Ext.namespace("Ext.ux.Domino");

Ext.ux.Domino.OutlinePlugin = function (config){
	
	return {
	
		init: function(container){
			Ext.apply(this, config);
			this.container = container;
			Ext.Ajax.request({
				method: 'GET',
				url: this.url,
				success: this.createTree.createDelegate(this),
				failure: function(){
					Ext.Msg.alert('Aviso', 'Error al intentar cargar el elemento desde '+this.url+".");
				}
			})
      	},	
					
		createTree : function(o){
			if (o.responseXML){	
			    var treeID = 'popo-' + Ext.id();
				tree = new Ext.tree.TreePanel({
					el: this.container.getEl(),
					id: treeID,
					animate : true, 
					containerScroll : true,
					plugins: [new Ext.ux.StatefulTreePanelPlugin()],
					dropConfig : {appendOnly : true},
					rootVisible : false,
					tbar:['&nbsp;', { 
						xtype:'searchfield',
						id:'filter' + Ext.id(),
						//enableKeyEvents:true,
                                                treeId : treeID
						}
					]
				});	
				tree.filter = new Ext.ux.tree.TreeFilterX(tree); 
				
				root = new Ext.tree.TreeNode({
					text : 'Ext.ux.Domino.Outline'+Ext.id(),
					draggable : false,
					id : 'Ext.ux.Domino.Outline'+Ext.id()
				});
				tree.setRootNode(root);	
				var curNode = null;
				var arNodes = [];
				var entries = o.responseXML.getElementsByTagName('outlineentry');
				for (var i=0; i<entries.length; i++) {
					var entry = entries.item(i);
					var dwtType = entry.attributes.getNamedItem('type').value;
					var dwtTitle = Ext.util.Format.trim(entry.attributes.getNamedItem('title').value);
					var tmpdwtHref = entry.attributes.getNamedItem('url');
					var dwtHref = (tmpdwtHref) ? tmpdwtHref.value : "";
					var tmpframeName = entry.attributes.getNamedItem('framesetname');
					var frameName = (tmpframeName) ? tmpframeName.value : "";		
					var expandable = entry.attributes.getNamedItem('expandable');
					var isExpandable = (expandable) ? true : false;			
					var tmpdwtIcon = entry.attributes.getNamedItem('icon');
					var dwtIcon = (tmpdwtIcon) ? tmpdwtIcon.value : "";
					var curPosition = entry.attributes.getNamedItem('position').value;
					var cls;				
					switch (dwtType) {
						// section
						case "0" :
							cls = (isExpandable) ? "folder" : "file";
							break;
						// view
						case "2" :
							cls = "file";
							break;
						// folder
						case "20" :
							cls = "folder";
							break;
						default :
							cls = "file";
					};	
					var curNode = new Ext.tree.TreeNode({
						//id: Ext.id(),								
						text : dwtTitle, 
						cls : cls, 
						allowDrag : true, 
						isTarget : true,
						leaf : false,
						dwtHref : dwtHref,
						frameName : frameName,
						dwtType : dwtType,
						dwtExpandable: isExpandable,
						dwtPosition : curPosition,
						icon : dwtIcon
					});			
					curNode.on('click', this.openEntry.createDelegate(this), this, true);	
					arNodes[curPosition] = curNode;	
					if(curPosition.indexOf('.') > 0) {
						var parentPosition = curPosition.substring(0,curPosition.lastIndexOf('.'));
						arNodes[parentPosition].appendChild(curNode);	
					}else {
						root.appendChild(curNode);
					}				
				}
				this.tree = tree;
				tree.render();
				root.expand();
		   		this.container.doLayout();
			}
		},
	
		tabId : function(panel, title){
			for(var i = 0; i<panel.items.length; i++){
				if(panel.getItem(i).title == title){
					return panel.getItem(i).getId();
					break;
				}
			}
			return "";
		},
	
		openInNewTab : function(url, title, cls){
			var newTab = new Ext.Panel({
				title: title,
				iconCls: cls,
				closable:true,
				layout:'fit', 
				border: false,
				items: [new Ext.ux.IFrameComponent({ id: Ext.id(), url: url})]
			});				
			this.openTarget.add(newTab);
			newTab.show();
		},
	
		openEntry : function(node, e){
			var attributes, dwtType, dwtHref, dwtPosition, entryId, title, frameName, icon;
			attributes = node.attributes;
			dwtHref = attributes.dwtHref;
			frameName = attributes.frameName;
			dwtType = attributes.dwtType;
			dwtPosition = attributes.dwtPosition;
			entryId = "id-" + dwtPosition;
			title = node.text.trim();
			icon = attributes.icon;
		
			if ((dwtType == "2" || dwtType == "20") & dwtHref != "") {
				var idPestana = this.tabId(this.openTarget, title);
				if (idPestana != ""){
					this.openTarget.setActiveTab(idPestana);
				}else{
					//var viewUrl = (dwtHref.indexOf('?') > 0) ? dwtHref.split('?')[0] : dwtHref.split('!')[0];
					var viewUrl = dwtHref;
					this.openInNewTab(viewUrl, Ext.id(), title)
				}
			}else if (dwtHref != "") {
				switch (frameName.toLowerCase().trim()){
					case "new":
						window.open(dwtHref);
						break;
					case "void":
						eval(dwtHref);
						break;
					default:
						var idPestana = this.tabId(this.openTarget, title);
   						if (idPestana != ""){
							this.openTarget.setActiveTab(idPestana);
						}else{		
							var viewUrl = (dwtHref.indexOf('?') > 0) ? dwtHref.split('?')[0] : dwtHref.split('!')[0];
							var aux = icon != "" ? icon : "icon-file";
							var clsId = 'Domino-iconCls-' + Ext.id();
							var iconCls = Ext.util.CSS.createStyleSheet('.' + clsId + '{background-image: url(' + aux + ')}', clsId)
							this.openInNewTab(viewUrl, title, clsId);
						}
						break;
				}
			}
		}

	}
	
}