var _firstTime = true;
var _error = false;
function loadcomplete() {
	Ext.getCmp("AnnotatedDocumentPanel").onDataReady();
	/*
	if (_firstTime) {
		_firstTime = false;
		ontos.inlineDocumentDialog.show();
	}*/
}

function fireEvent(evname, evarg) {
	
}

ontos.AnnotatedDocumentPanel = function(cfg) {
	cfg.id="AnnotatedDocumentPanel";
	this.module = cfg.module;
    cfg.tbar = [
		new Ext.Action({text: ontos.locale.newDocument,iconCls: 'bnewdoc',scope: this,handler: function() {
			document.getElementById("swspage_text").value="";
            this.clearFileInput(document.getElementById("swspage_file"));
			Ext.getCmp("doccontentpanel").getLayout().setActiveItem(0);
		}})
		, new Ext.Action({id:'rdfexport', text: ontos.locale.rdf,iconCls: 'rdf', disabled:true,scope: this,handler: function() {
			ontos.inlineExportDialog.onexport = this.exportRDF.createDelegate(this);
			ontos.inlineExportDialog.show();
		}})
		, new Ext.Action({id:'ontexport', text: ontos.locale.ont,iconCls: 'ont', disabled:true,scope: this,handler: function() {
			ontos.inlineExportDialog.onexport = this.exportOntology.createDelegate(this);
			ontos.inlineExportDialog.show();
		}})
	];

	this.initDataStore();
	
	function crender(val, meta, rec) {
		var frame = document.getElementById("AnnotatedDocumentPanelFrm");
		var win = window;
		if (frame) {
			var doc = Ext.isIE ? frame.contentWindow.document : frame.contentDocument;
			win = Ext.isIE ? doc.parentWindow : doc.defaultView;
		}
		
		if (!win.isAnnotatedBy || !win.isAnnotatedBy(val)) {
			meta.css="anndoc-ds";
		}
		return "<span class='clsEntityShow cls" + val + "'><img style='border: 1px solid black' src='images/c.gif' height=8></span>&nbsp;<span>"+val + "</span>";
	}
	
	var sm = new Ext.grid.CheckboxSelectionModel();
		
	var pnl = new Ext.form.FormPanel({
		id: "docform",
		fileUpload: true,
		baseParams: {cmd: "expert-document"},
        items: [
            //{xtype:'textfield',anchor: '100%',fieldLabel: 'Document Name',id: 'swspage_docname',name: 'swspage_docname'},
            new Ext.form.ComboBox({
		        store: new Ext.data.Store({
		            proxy: new Ext.data.HttpProxy({method:"POST", url: "data", timeout: 3000000}),
		            reader: new Ext.data.JsonReader({
		                root: 'ds',
		                totalProperty: 'size',
		                id: 'id'
		            }, [
		                {name: 'ontology', mapping: 'ontology'}
		            ]),
		            baseParams:{mode:'json',module:'TryPage'},
		            remoteSort: true
		    	}),
		    	typeAhead: true,
		        mode: 'remote',
		        triggerAction: 'all',
		        emptyText: ontos.locale.SelectOntology,
		        editable:false,
		        disabled:false,
		        readOnly:true,
		        allQuery:'ontologies',
			    displayField: 'ontology',
		        forceSelection:true,
		        //selectOnFocus:true,
		        value: _ontology,
		        fieldLabel: ontos.locale.ontology,
		        hiddenName:'ontology', 
		        id:'ont',
		        anchor: '99% 0'
		    }),
		    {
		    	id: 'typedoc-set',
	            xtype:'fieldset',
	            collapsible:true,
	            collapsed: true,
	            title: ontos.locale.typeTextLbl,
	            autoWidth:false,
	            //autoHeight:false,
	            anchor: '104',
	            //width:'auto',
	            items :
	            	{xtype:'textarea',hideLabel:true, height: 290, anchor: '99%',id: 'swspage_text',name: 'text'}

	        },{
	        	id: 'uploaddoc-set',
	            xtype:'fieldset',
	            style: 'padding:10 10 10 10',
	            
	            collapsible:true,
	            collapsed: true,
	            title: ontos.locale.orUploadTextLbl,
	            autoWidth:false,
	            anchor: '104',
	            items :
	            	{xtype:'filefield',width:350,hideLabel:true,id: 'swspage_file',name: 'file'}
	        }
            
        ], buttons: [
                {xtype:'button',text: ontos.locale.Submit,name: 'swspage_go',scope: this,handler: 
                    function(){
                    	var textcmp = document.getElementById("swspage_text");
                    	if (Ext.getCmp('typedoc-set').collapsed) {
                    		textcmp.value = "";
                    	} else {
                    		this.clearFileInput(document.getElementById("swspage_file"));
                    	}
                    	if (textcmp.value.length > 10000) {
                    		Ext.Msg.show({
							   title:ontos.locale.tobigtexttitle,
							   msg: ontos.locale.tobigtext,
							   buttons: Ext.Msg.YESNO,
							   fn: function(btn) {
							   	if (btn == 'yes') {
							   		textcmp.value = textcmp.value.substr(0, 10000);
							   		this.loadData();
							   	}
							   },
							   scope:this,
							   animEl: 'elId',
							   icon: Ext.MessageBox.QUESTION
							});
                    	} else {
                    		this.loadData();
                    	}
                    }
                }
        ],baseCls: 'x-plane',form: true,labelAlign: 'right',fieldAlign: 'right',labelWidth: 100,bodyStyle: 'background-color:white; padding:5px 5px 0;'
    });
    this.formpnl = pnl;
    
	var docPanel = new Ext.Panel({
		  id: "doccontentpanel"
		, title: 'Document'
		, bodyStyle:'padding:5px'
		, border:false
		, bodyBorder:false
		, layout:'card'
		, autoScroll:true
		, activeItem: 0
		, minWidth: 350
		, items: [pnl, {id:'annDocumentContentPanel', layout:'fit', autoScroll:true, border:false, bodyBorder:false}]
	});
	
	cfg.items = [
		//{
			//region:'west', bodyStyle:'padding:5px', bodyBorder: false, border: false, autoScroll:true, width:200, split:true
			//, items: 
			new Ext.grid.GridPanel({
				region:'west',
				bodyBorder: false, border: false, autoScroll:true,width:200, split:true,
		        store: this.dataStore,
		        cm: new Ext.grid.ColumnModel([
		            sm,
		            {id:'concept',header: "Concept", sortable: true, dataIndex: 'concept', renderer: crender}
		        ]),
		        viewConfig: {
			        forceFit: true, autoFit: true
			        
			    },
		        
		        sm: sm,
		        //width:600,
		        //height:300,
		        frame:true,
		        //title:'Framed with Checkbox Selection and Horizontal Scrolling',
		        iconCls:'icon-grid'
		//    })			
		}),
		
		new Ext.TabPanel({
    		activeTab: 0,
            tabPosition:'top',
            border: false,
            bodyBorder:false,
            region:'center',
            items: docPanel
            , minWidth: 350
        })
	];
	this.sm = sm;
	sm.on("rowselect", function(sm, rowIndex, r) {
		var frame = document.getElementById("AnnotatedDocumentPanelFrm");
		var win = window;
		var doc = document;
		if (frame) {
			doc = Ext.isIE ? frame.contentWindow.document : frame.contentDocument;
			win = Ext.isIE ? doc.parentWindow : doc.defaultView;
		}
		if (win.showAnnotation)
			win.showAnnotation(r.get("concept"), true, doc);
		
	}, this );

	sm.on("rowdeselect", function(sm, rowIndex, r) {
		var frame = document.getElementById("AnnotatedDocumentPanelFrm");
		var win = window;
		var doc = document;
		if (frame) {
			doc = Ext.isIE ? frame.contentWindow.document : frame.contentDocument;
			win = Ext.isIE ? doc.parentWindow : doc.defaultView;
		}
		if (win.showAnnotation)
			win.showAnnotation(r.get("concept"), false, doc);
	}, this );

	
	this.resid = cfg.resid;
	cfg.bodyBorder=false;
	cfg.border=false;
	cfg.layout='border';
	//cfg.contentEl=cfg.id + "frm";
	this._frmid = cfg.contentEl;
	//cfg.html = "<div id=\"" + cfg.contentEl + "\">Select content</div>";
	//cfg.html="<IFRAME name=doccontent FRAMEBORDER=0 BORDER=0 style='height:100%;width:100%;' id='" +cfg.contentEl+"'></IFRAME>";
	cfg.autoScroll=false;
	ontos.AnnotatedDocumentPanel.superclass.constructor.call(this, cfg);
	
	//this.afterRender_prev = this.afterRender;
	//this.afterRender = function(cnt) {
	this.on("afterlayout", function() {
		//this.afterRender_prev.call(this, cnt);

    	if (!this._initialized)
    	{
    		var elem = Ext.getCmp('typedoc-set');
    		var upelem = Ext.getCmp('uploaddoc-set');
    		
	    	elem.on("expand", function() {
	    		if (!upelem.collapsed) upelem.collapse.defer(1, upelem);
	    	});
	    	elem.on("collapse", function() {
	    		if (upelem.collapsed) upelem.expand.defer(1, upelem);
	    	});
	    	upelem.on("expand", function() {
	    		if (!elem.collapsed) elem.collapse.defer(1, elem);
	    	});
	    	upelem.on("collapse", function() {
	    		if (elem.collapsed) elem.expand.defer(1, elem);
	    	});
	    	this._initialized = true;
	    	elem.expand();//.defer(1,elem);
	    	this.loadData();
    	}
    });
    
	this.module.on("subjectSelected", function(s) {
		var frame = document.getElementById("AnnotatedDocumentPanelFrm");
		var win = window;
		var doc = document;
		if (frame) {
			doc = Ext.isIE ? frame.contentWindow.document : frame.contentDocument;
			win = Ext.isIE ? doc.parentWindow : doc.defaultView;
		}
		win.clearSelection();
		win.clearSelection(this.objectsSelection, "clsSelectedObject");
		win.selectObject(s.type, s.id, "clsSelected", doc);
		this.subjectSelected = s.id;
		//this._subject = s;
		//this.update();
	}, this);
	
	this.objectsSelection = [];
	this.module.on("objectSelected", function(s) {
		if ("kas" == s.src) return;
		var frame = document.getElementById("AnnotatedDocumentPanelFrm");
		var win = window;
		var doc = document;
		if (frame) {
			doc = Ext.isIE ? frame.contentWindow.document : frame.contentDocument;
			win = Ext.isIE ? doc.parentWindow : doc.defaultView;
		}
		var type = s.type.split("#")[1];
		if (!type) type = s.type;
		win.clearSelection(this.objectsSelection, "clsSelectedObject");
		if (this.subjectSelected != s.id) {
			this.objectsSelection = win.selectObject(type, s.id, "clsSelectedObject",doc);
		}
	}, this);
	
	//docPanel.on("render", function() {
	//	this.loadData();
	//}, this)
}

Ext.extend(ontos.AnnotatedDocumentPanel, ontos.ContentPanel, {
	autoScroll:true,
	initDataStore : function() {
		this.dataStore = new Ext.data.Store({
	        proxy: new Ext.data.HttpProxy({method:"POST", url: "data",timeout: 3000000}),
	        reader: new Ext.data.JsonReader(
	        	{root: 'ds',totalProperty: 'totalCount',id: 'post_id'}, 
	        	[
	        		{name: 'concept', mapping: 'concept'},
	        		{name: 'subconcept', mapping: 'subconcept'}
	        	]
	        ),
	        remoteSort:false
	    });
	    this.dataStore.addListener("load",this.onConceptReady,this);
	},
	loadData:function() {
		this.maskState = true;
		this.updateLoadMask();
		ontos.currentOntology=Ext.getCmp("ont").getValue();
		
		var cardPanel = Ext.getCmp("doccontentpanel").getLayout();
		var cmp = Ext.getCmp("annDocumentContentPanel");
		var um = cmp.body.getUpdater();
		Ext.apply(um, {showLoadIndicator: false, indicatorText: "", timeout: 600, method:"post"});
		
		window.top.annotations=null;
		um.formUpdate(this.formpnl.getForm().el, "data?cache=OFF&module=TryPage&mode=html&query=document", false, function() {
			if (window.top.annotations) {
				window.top.bootstrapNodes(window.top.annotations);
				cardPanel.setActiveItem(1);
			} else if (window.top._error) {
				cardPanel.setActiveItem(1);
				window.top.loadcomplete();
			} else {
				cardPanel.setActiveItem(0);
				window.top.loadcomplete();
			}
		});
	},
	exportRDF:function() {
		var cmdparam = document.getElementById("appformparam1");
		cmdparam.name = "query"; cmdparam.value="instancies";
		
		cmdparam = document.getElementById("appformparam2");
		cmdparam.name = "type"; cmdparam.value=ontos.exportType;
		
		var appform = document.getElementById("appform");
		appform.target="_self";
		appform.submit();
	},
	
	exportOntology:function() {
		var cmdparam = document.getElementById("appformparam1");
		cmdparam.name = "query"; cmdparam.value="ontoexport";
		
		cmdparam = document.getElementById("appformparam2");
		cmdparam.name = "type"; cmdparam.value=ontos.exportType;
		
		cmdparam = document.getElementById("appformparam3");
		cmdparam.name = "ontology"; cmdparam.value=ontos.currentOntology;
		
		var appform = document.getElementById("appform");
		appform.target="_self";
		appform.submit();
	},
	onDataReady:function() {
		this.maskState = false;
		this.updateLoadMask();
		this.dataStore.load({params:{module:"TryPage",query:"concepts", lang:_lang, ontology: ontos.currentOntology, cache:"OFF", limit:100}});
	},
	onConceptReady:function() {
		this.sm.selectAll.defer(100, this.sm);
		Ext.getCmp('rdfexport').setDisabled(false);
		Ext.getCmp('ontexport').setDisabled(false);
	},
	clearFileInput:function(e) {
		var newElem = document.createElement("input");
        newElem.setAttribute("type","file");
        newElem.setAttribute("id",e.getAttribute("id"));
        newElem.setAttribute("name",e.getAttribute("name"));
        newElem.className = e.className;
        newElem.size  = e.size;
        //newElem.style.width = e.style.width;
        e.parentNode.replaceChild(newElem, e);      
	}
});