Ext.ns('Kloud.Module.Wiki');

var wikiLayoutSetting=[["wikiContent", "wikiBody"],["wikiMask", "wikiDialog"], ['wikiContent', 'wikiPopup']];

Kloud.Module.Wiki.WikiSourceType = { PLICK:0, COURSE_SECTION:1 };

var wikiAdapter = null;


// util class definition

Kloud.Module.Wiki.WikiContent = Object.inherit(Wiki.SDEP,{
	getController:function(){
		return window[Wiki.Config.name];
	},
	find:function(id){
		return this.getController().find(id);	
	},	
	getWikiTile:function(wikiNode){
		return this.__$cdata(wikiNode, "title");
	},
	getWikiDescription:function(wikiNode){
		return this.__$cdata(wikiNode, "content");
	},
	getSectionIds:function(wikiNode){
		return this.__$text(wikiNode, "section_ids");
	},
	getWikiTags:function(wikiNode){
		return this.__$cdata(wikiNode, "tags");
	},
	getSectionFragmentXml:function(wikiNode,ids){	
		var idArray = [];
		idArray = ids.split(",")
		
		var snodes = this.__$first(wikiNode, "sections");
		var snode = this.__$first(snodes, "section");		
		
		while (snode != null) {			
			var secId = this.__$attr(snode, "id");				
			
			if(!idArray.include(secId)){
				var nextNode = this.__$next(snode, "section");
				snodes.removeChild(snode);
				snode = nextNode;
			}
			else{
				snode = this.__$next(snode, "section");	
			}			
		}
		
		return IX.Xml.getXmlString(wikiNode);		
	},
	getDeleteSectionFragmentXml:function(wikiNode,id){		
		var wikiVersion = this.__$attr(wikiNode, "version");
		var divContainer = document.createElement("div");
		var wikiRoot = document.createElement("wiki");
		wikiRoot.setAttribute("version",wikiVersion);
		var sectionsNode = document.createElement("sections");		
		
		var snodes = this.__$first(wikiNode, "sections");
		var snode = this.__$first(snodes, "section");
		while (snode != null) {			
			var secId = this.__$attr(snode, "id");				
			
			if(id == secId){
				break;				
			}			
			snode = this.__$next(snode, "section");
		}
		
		var sectionNode = document.createElement("section");
		sectionNode.setAttribute("id",id);
		sectionNode.setAttribute("version",this.__$attr(snode, "version"));
		
		sectionsNode.appendChild(sectionNode);
		wikiRoot.appendChild(sectionsNode);
		divContainer.appendChild(wikiRoot);
		
		return divContainer.innerHTML;		
	},	
	setWikiVersion:function(value){			
		var wItem = this.find("root");
		if(wItem != null){
			wItem.setVersion(value);
		}		
	},
	getWikiVersion:function(){			
		var wItem = this.find("root");
		if(wItem != null){
			return wItem.getVersion();
		}		
		return "-1";
	},
	setSectionVersion:function(sectionId,value){
		var secNode = this.find(sectionId);
		if(secNode && secNode.isSection()){
			secNode.setVersion(value);
		}
	},
	setSectionVersionEx:function(wikiNode,sectionId,value){
		var snodes = this.__$first(wikiNode, "sections");
		var snode = this.__$first(snodes, "section");		
		
		while (snode != null) {			
			var secId = this.__$attr(snode, "id");				
			
			if(secId == sectionId){
				break;
			}
			
			snode = this.__$next(snode, "section");						
		}
		
		if(snode){
			snode.setAttribute("version",value);	
		}		
	},
	getSectionVersion:function(sectionId){
		var wItem = this.find("root");
		var rootId = wItem.getId();
		if(sectionId == rootId) return "-1";
		
		var secNode = this.find(sectionId);
		if(secNode != null){
			return secNode.getVersion();
		}
		return "-1";
	}
});

Kloud.Module.Wiki.CurActionStatus = {
	sectionId : "",
	act : "",
	ajaxActionMethod : "",
	editModel : "",
	sectionFragment : "",
	editorHtmlContent : "",
	sectionVersion : '-1'
};

Kloud.Module.Wiki.WikiObj = function(config){
	this.xmlData = '';	
	
	this.title = '';
	this.content = '';
	
	Ext.apply(this, config);
	
	//get object property
	this.content=config.wikiDescription || 'wiki document';
	
	if(config.xmlData != '' && config.xmlData != null){
		var xmlDoc = IX.Xml.parser(config.xmlData);
		var wikiNode = xmlDoc.documentElement;				
		
		wikiNode.setAttribute('op','save');
		wikiNode.setAttribute('type','wiki');
		
		this.xmlData = IX.Xml.getXmlString(xmlDoc);		
		this.title = Kloud.Module.Wiki.WikiContent.getWikiTile(wikiNode);
		//this.content = Kloud.Module.Wiki.WikiContent.getWikiDescription(wikiNode);
		
		
	}	
};


Kloud.Module.Wiki.ResultHandler = function() {	
	
	// data restore dialog
	var showRestoreContentDialog =  function(actionType,text) {		
		var winTitle = "Execute action '" + actionType + "' failed!";
		var dataWin = new Ext.Window({
					title:winTitle,
					buttonAlign:"center", 
					closeAction:"close", 
					modal:false,
					width:510,
					height:500,
					resizable:false,
					items:[{
								xtype : 'label',
								html : '<br/><div style="padding-left:10px">' + text
										+ '<br/>You can copy your data from below.</div><br/>',
								anchor : '90%',
								border : true
						},{							
     						tag : 'iframe',  
     						html : Kloud.Module.Wiki.CurActionStatus.editorHtmlContent, 
     						height : "460",
     						frameborder : "0",
     						scrolling : "auto"
  						}],
					buttons:[
						{
							 text:"Close", 
							 handler:function () {
								dataWin.close();
						 	}
						}
					]
				});
		dataWin.show();
    };  
    
    //error msg dialog
    var showErrorMessageDialog = function(res,actionType,text){
    	var winTitle = "Execute action '" + actionType + "' failed!";
    	
    	var errorWin = new Kloud.Ext.Module.ErrorMessageWindow({
    		title : winTitle,
    		briefErrorMessage : text,
    		detailErrorMessage : res.errorMessage
    	});
    	errorWin.show();
    };
    
    var errorMessageHandler = function(res,actionType,text){
    	if(actionType == "Edit" || actionType == "New" || actionType == "EditAll"){
    		if(Kloud.Module.Wiki.CurActionStatus.editorHtmlContent != "" 
    		&& Kloud.Module.Wiki.CurActionStatus.editorHtmlContent != "<html><head></head><body></body></html>"){
    			showRestoreContentDialog(actionType,text);	//need to enhance	
    		}
    		else{
    			showErrorMessageDialog(res,actionType,text);	
    		}			
		}
		else{
			showErrorMessageDialog(res,actionType,text);	
		}		
							
    };
    
    var resetWikiContent = function(res){
    	var rspData = decodeJSONString(Ext.util.Format.htmlDecode(res.retData));
					
    	var xmlDoc = IX.Xml.parser(rspData);
		var wikiNode = xmlDoc.documentElement;
		
		wikiNode.setAttribute('op','reset');	
			
		rspData = IX.Xml.getXmlString(xmlDoc);	
		
		wiki_callback_receive(rspData);
    };
    
    var updateVersionParams = function(res){
    	var versionObj = Ext.util.JSON.decode(res.retData);
		Kloud.Module.Wiki.WikiContent.setWikiVersion(versionObj.wikiVersion);
		Kloud.Module.Wiki.WikiContent.setSectionVersion(versionObj.sectionId,versionObj.sectionVersion);
    };
    
    
	return {		
        handleResult: function(res,actionType) {        	
        	switch(res.retCode){
				case 1 : {			
				}
				break;
				case 2 : {
					resetWikiContent(res);
				}
				break;
				case 3 : {
					updateVersionParams(res);
				}
				break;
				case -1 : {
					var text = "Excute action error.";
					errorMessageHandler(res,actionType,text);								
				}
				break;
				case -2 : {			
					resetWikiContent(res);
					
					var text = "Excute action error and the current wiki content has been updated to newest version."
					errorMessageHandler(res,actionType,text);					
				}
				break;
				case -3 : {
					updateVersionParams(res);
					
					var text = "Excute action error and the current wiki content has been updated to newest version."
					errorMessageHandler(res,actionType,text);
				}
				break;
				default: {
					
				}
			}	
        }
    };	
}();


Kloud.Module.Wiki.ActionProxy = function() {	
	
	var action =  function(controller,act,sectionId) {		
		
		var isNeedToCopyData = false;
		
		var editModel = "New";
		var ajaxActionMethod = "newSection";		
		if(act == "edit" || act == "popEdit"){
			ajaxActionMethod = "editSection";
			editModel = "Edit";			
			
			isNeedToCopyData = true;
		}
		else if(act == "wdelete" || act == "popDelete"){
			ajaxActionMethod = "deleteSection";
			editModel = "Delete";						
		}
		else if(act == "popMove" || act == "move"){
			ajaxActionMethod = "moveSection";
			editModel = "Move";
		}			
		else if(act == "wnew" || act == "popNewBelowSibling" || act == "popNewAboveSibling" || act == "popNewChild" || act == "popNewParent"){	
			isNeedToCopyData = true;
		}
		else if(act == "editAll"){
			ajaxActionMethod = "editAllSection";
			editModel = "EditAll";
			
			isNeedToCopyData = true;
		}
		
		if(isNeedToCopyData){
			var dialog = controller.getDialog(controller.getCurrentDid());
			var htmlSection = dialog.getContent();
			var htmlContent = "<html><head></head><body>" + htmlSection + "</body></html>";
			Kloud.Module.Wiki.CurActionStatus.editorHtmlContent = htmlContent;
		}
		else{
			Kloud.Module.Wiki.CurActionStatus.editorHtmlContent = "";
		}
		
		Kloud.Module.Wiki.CurActionStatus.sectionId = sectionId;
		Kloud.Module.Wiki.CurActionStatus.act = act;
		Kloud.Module.Wiki.CurActionStatus.ajaxActionMethod = ajaxActionMethod;
		Kloud.Module.Wiki.CurActionStatus.editModel = editModel;
		var visulWindowSize = Kloud.Module.Global.getWindowSize();
		Ext.get('wikiDialog').setHeight(visulWindowSize[1]*0.90,true);
    };
    
    var getCanEditAll = function(){    	    	
    	var url = "/servlets/AjaxActionMainWebServlet?action=WIKI&actionMethod=getCanEditAll&wikiSourceType=" + wikiAdapter.wikiSourceType + "&id=" + wikiAdapter.plickId + "&editModel=EditAll&wikiVersion=" + Kloud.Module.Wiki.WikiContent.getWikiVersion() + "&sectionVersion=-1";
    	
		return syncAjaxRequest(url);		
    };
    var clearCanEditAll = function(){
    	Ext.Ajax.request({
			async : true,
			url : '/servlets/AjaxActionMainWebServlet',
			method : 'POST',
			callback : function(options, success, response) {					
			},
			params : {
				action : 'WIKI',				
				id : wikiAdapter.plickId,
				sectionId:Kloud.Module.Wiki.CurActionStatus.sectionId,
				actionMethod : 'clearCanEditAll',
				editModel : Kloud.Module.Wiki.CurActionStatus.editModel
			},
			scope : this
		});			
    };   
    var getCanChangeHierarchy = function(sectionId,editModel){    	
    	var url = "/servlets/AjaxActionMainWebServlet?action=WIKI&actionMethod=getCanChangeHierarchy&wikiSourceType=" + wikiAdapter.wikiSourceType + "&id=" + wikiAdapter.plickId + "&sectionId=" + sectionId + "&editModel=" + editModel + "&wikiVersion=" + Kloud.Module.Wiki.WikiContent.getWikiVersion() + "&sectionVersion=" + Kloud.Module.Wiki.WikiContent.getSectionVersion(sectionId);
    	
		return syncAjaxRequest(url);		
    };
    var clearCanChangeHierarchy = function(){
    	Ext.Ajax.request({
			async : true,
			url : '/servlets/AjaxActionMainWebServlet',
			method : 'POST',
			callback : function(options, success, response) {					
			},
			params : {
				action : 'WIKI',				
				id : wikiAdapter.plickId,
				sectionId:Kloud.Module.Wiki.CurActionStatus.sectionId,
				actionMethod : 'clearCanChangeHierarchy',
				editModel : Kloud.Module.Wiki.CurActionStatus.editModel
			},
			scope : this
		});				
    };
    var getCanEdit = function(sectionId){    	
    	Kloud.Module.Wiki.CurActionStatus.sectionVersion = Kloud.Module.Wiki.WikiContent.getSectionVersion(sectionId);
    	var url = "/servlets/AjaxActionMainWebServlet?action=WIKI&actionMethod=getCanEdit&wikiSourceType=" + wikiAdapter.wikiSourceType + "&id=" + wikiAdapter.plickId + "&sectionId=" + sectionId + "&editModel=Edit&wikiVersion=" + Kloud.Module.Wiki.WikiContent.getWikiVersion() + "&sectionVersion=" + Kloud.Module.Wiki.CurActionStatus.sectionVersion;
    	
		return syncAjaxRequest(url);		
    };    
    var clearCanEdit = function(){
    	Ext.Ajax.request({
			async : true,
			url : '/servlets/AjaxActionMainWebServlet',
			method : 'POST',
			callback : function(options, success, response) {					
			},
			params : {
				action : 'WIKI',				
				id : wikiAdapter.plickId,
				sectionId:Kloud.Module.Wiki.CurActionStatus.sectionId,
				actionMethod : 'clearCanEdit',
				editModel : Kloud.Module.Wiki.CurActionStatus.editModel
			},
			scope : this
		});					
    };   
   
   var resizeGuiAction = function(controller, act, param, obj){
   					var wikiMasks = Ext.DomQuery.select("div[class=wiki wiki_layer wiki_mask]");
   					if(wikiMasks instanceof Array && wikiMasks.length>0){
   						var wikiMask = Ext.get(wikiMasks[0]);
   						wikiMask.setWidth(Kloud.Module.Global.getWindowSize()[0]);
   					}
					var editorFrame = Ext.DomQuery.select("iframe[class=wiki_edit_frame]");
					if(editorFrame instanceof Array && editorFrame.length>0){
							var eh = Ext.get(editorFrame[0].id);
							eh.setHeight(Kloud.Module.Global.getWindowSize()[1]*0.89-150);
					}
					var wikiList = Ext.DomQuery.select("div[class=wiki_list]");
					if(wikiList instanceof Array && wikiList.length>0){
							var wl = Ext.get(wikiList[0]);
							wl.setHeight(Kloud.Module.Global.getWindowSize()[1]*0.89-150);
					}
					return true;
      };
	return {		
		editAction: function(controller, act, param, obj) {
			if(act == "edit" || act == "popEdit"){
				action(controller,act,param);		
				
				var res = getCanEdit(param);
				Kloud.Module.Wiki.ResultHandler.handleResult(res,"Edit");
				return res.retCode > 0 ? true:false;
			}
			
			return true;
        },
        newAction: function(controller, act, param, obj) {
        	if(act == "wnew" || act == "popNewBelowSibling" || act == "popNewAboveSibling" || act == "popNewChild" || act == "popNewParent"){
				action(controller,act,param);
				
				var res = getCanChangeHierarchy(param,"New");
				Kloud.Module.Wiki.ResultHandler.handleResult(res,"New");
				return res.retCode > 0 ? true:false;
			}
			return true;
        },
        deleteAction: function(controller, act, param, obj) {        	
			if(act == "wdelete" || act == "popDelete"){
				action(controller,act,param);
				
				var res = getCanChangeHierarchy(param,"Delete");
				Kloud.Module.Wiki.ResultHandler.handleResult(res,"Delete");
				return res.retCode > 0 ? true:false;
			}
			return true;
        },
        moveAction: function(controller, act, param, obj) {        	
			if(act == "popMove" || act == "move"){	
				action(controller,act,param);
				
				var res = getCanChangeHierarchy(param,"Move");			
				Kloud.Module.Wiki.ResultHandler.handleResult(res,"Move");
				return res.retCode > 0 ? true:false;
			}
			return true;
        },
        editAllAction: function(controller, act, param, obj) {        	
			if(act == "editAll"){				
				action(controller,act,param);
				
				var res = getCanEditAll();				
				Kloud.Module.Wiki.ResultHandler.handleResult(res,"EditAll");
				return res.retCode > 0 ? true:false;
			}
			return true;
        },
        closeDialogAction: function(controller, act, param, obj) {        	
			if(act == "closeDialog"){				
				if(Kloud.Module.Wiki.CurActionStatus.editModel == "Edit"){
					clearCanEdit();
				}
				else if(Kloud.Module.Wiki.CurActionStatus.editModel == "EditAll"){
					clearCanEditAll();
				}
				else{
					clearCanChangeHierarchy();
				}
			}
			resizeGuiAction(controller, act, param, obj);
			return true;
      },
      postSaveAllAction: function(controller, act, param, obj){        	
			if(act == "saveAll"){				
				/*var summer = $K("articleDescritpion");
				if(summer){
					summer.value = controller.find("root").getContent();
				}*/
			}
			return true;
      }
    };	
}();


userActions = {
	pre:[
		["wdelete", Kloud.Module.Wiki.ActionProxy.deleteAction, null],
		["edit", Kloud.Module.Wiki.ActionProxy.editAction, null],
		["wnew", Kloud.Module.Wiki.ActionProxy.newAction, null],
		["move", Kloud.Module.Wiki.ActionProxy.moveAction, null],
		["editAll", Kloud.Module.Wiki.ActionProxy.editAllAction, null]
	],
	post:[
		["closeDialog", Kloud.Module.Wiki.ActionProxy.closeDialogAction, null],
		["saveAll", Kloud.Module.Wiki.ActionProxy.postSaveAllAction, null]
	]
};

//wiki apadter class 

Kloud.Module.Wiki.insertWikiDescFld=function()
		{
			var wikiBody=Ext.get('wikiBody');
			if (wikiBody!=null)
			{
				var firstChild=wikiBody.first();
							
				if (firstChild!=null)
				{
					firstChild=firstChild.first();
					if (firstChild==null)
						return false;	
					Ext.DomHelper.insertAfter(firstChild, {
						tag : 'div',
						id : 'wikiDescDiv',
						style:'display:block;margin-bottom:20px'
					});
					
					Ext.DomHelper.append('wikiDescDiv', {
						tag : 'div',
						id : 'wikiDescLabel',
						style:'float:left'
					});
					
					
					
					var bodyWidth=wikiBody.getWidth()-60;
					
					Ext.DomHelper.append('wikiDescDiv', {
						tag : 'div',
						id : 'wikiDescRightContent',
						style:'float:left;width:'+bodyWidth+'px;'
					});
								
					Ext.DomHelper.append('wikiDescRightContent', {
						tag : 'textarea',
						id : 'wikiDescText',
						escapexml:false,
						value:'',
						style:'width:100%;float:left;height:60px;'
					});
					
					Ext.get('wikiDescLabel').dom.innerHTML='Summary:&nbsp';
					return true;
					
				}
			}
			return false;
		}
		

Kloud.Module.Wiki.WikiAdapter = function(config) {
	this.wikiType = config.wikiType;
	this.plickId = config.plickId;			
	this.rspData = '';
	this.userState = config.userState;
	this.wikiSourceType = config.wikiSourceType;
		
	if(this.wikiType == "new"){
		Wiki.Config.readonly = false;
		
		this.rspData = '<wiki id="1" op="reset" type="new"><content><![CDATA[Wiki Summary.]]></content></wiki>';
		wiki_start(this.rspData,wikiLayoutSetting);	
		
		//hide title and tags here
		
		var i=0;
		var hideWikiTitleTag = function() {
			if ($K("wiki_r1") == null) {
				i++;
				if (i < 50)
					setTimeout(hideWikiTitleTag, 300);
			} else {
				$K("wiki_r1").style.display = "none";
			}

		}
		setTimeout(hideWikiTitleTag, 300);
		/*
		 * if (typeof Kloud.Module.Wiki.insertWikiDescFld == 'function') { var
		 * i=0; var addFldFun=function() { if
		 * (!Kloud.Module.Wiki.insertWikiDescFld()) { i++; if (i<5)
		 * setTimeout(addFldFun,2000); } } setTimeout(addFldFun,2000); }
		 */
		/*setTimeout(function(){
			wiki_resize(Ext.get('wikiContent').dom.offsetWidth);
			},2);*/
	}
	else if(this.wikiType == "view"){
		if(this.userState == 1){
			Wiki.Config.readonly = false;	
		}else{
			Wiki.Config.readonly = true;
		}				
	}
	else if(this.wikiType == "edit"){
		Wiki.Config.readonly = true;		
	}
	
	var tagsInfoConverter = function(xmlData){
		var xmlDoc = IX.Xml.parser(xmlData);
		var wikiNode = xmlDoc.documentElement;
		
		var tagsData = Kloud.Module.Wiki.WikiContent.getWikiTags(wikiNode);
		if (tagsData == "") {
			return xmlData;
		}
		
		var rkwsNode = xmlDoc.createElement('rkws');		
		
		var tags = tagsData.split(',');
		for (var index = 0; index < tags.length; index++) {
			var tagNode = xmlDoc.createElement('tag');
			tagNode.setAttribute('id',tags[index]);
			
			rkwsNode.appendChild(tagNode);
		}
		
		wikiNode.appendChild(rkwsNode);
			
		return IX.Xml.getXmlString(xmlDoc);	
	};
	
	if(this.wikiType == "view" || this.wikiType == "edit"){			
		 
		Ext.Ajax.request({
			async : true,
			url : '/servlets/AjaxActionMainWebServlet',
			method : 'POST',
			callback : function(options, success, response) {		
				try{
					var res = Ext.util.JSON.decode(response.responseText);
					if(res.retCode < 0){
						extalert(res.errorMessage);
					}				
					else if(res.retCode >= 0){		
						this.rspData = decodeJSONString(Ext.util.Format.htmlDecode(res.retData));
						
						//need converter code,just demo data
						if((this.rspData.indexOf("<CONTENT") != -1 && this.rspData.indexOf("<HIERARCHY") != -1) || this.rspData == ""){
							this.rspData = '<wiki id="1" version="-1" op="save" type="wiki"><title><![CDATA[Wiki Title]]></title><content><![CDATA[Wiki Summary.]]></content><tags><![CDATA[]]></tags><sections><section id="d73549e8349449d18a80dc9632b99909" level="1" pid="r1" idx="0" version="-1"><title><![CDATA[First Section]]></title><content><![CDATA[<p>Please input description for the first section.</p>]]></content></section></sections></wiki>';
						}					
						///					
						
						if(isMSIE() && this.rspData.substring(0,5) != "<wiki"){						
							var xmlHeader = '<?xml version="1.0" encoding="UTF-8"?>';
							
							this.rspData = this.rspData.substring(xmlHeader.length,this.rspData.length);
						}
						
						this.rspData = tagsInfoConverter(this.rspData);
						wiki_start(this.rspData,wikiLayoutSetting,userActions);
						//wiki_resize(Ext.get('wikiContent').dom.offsetWidth);	
					}	
				}catch(e){
						
				}								
			},
			params : {
				action : 'WIKI',
				actionMethod : 'getWiki',
				id : this.plickId,
				wikiSourceType : this.wikiSourceType																						
			},
			scope : this
		});			
		/**/ 
	}
	
	Kloud.Module.Wiki.WikiAdapter.superclass.constructor.call(this);	
};


Ext.extend(Kloud.Module.Wiki.WikiAdapter,Ext.util.Observable, {
	initComponent : function() {	
		Kloud.Module.Wiki.WikiAdapter.superclass.constructor.call(this,arguments);
	},
	getWikiObject : function(id){
		return window[Wiki.Config.name].find(id);
	}
	,getNewWikiDataObj : function(){	
		return new Kloud.Module.Wiki.WikiObj({
			//wikiDescription:Ext.get('wikiDescText').dom.value,
			xmlData : wiki_getWikiItem()
		});		
	},setTitle : function (title,xmlDoc){
			if($K("navTitle")){
				$K("navTitle").innerHTML = title;
			}
			
			if($K("maindivTitle")){
				$K("maindivTitle").innerHTML = title;
			}
			
			if($K("articleTitle")){
				$K("articleTitle").value = title;
			}
			if ($K('productName')) {
				Ext.getCmp('productName').setValue(title);
			}
			
			if($K("sidebarTitle")){
				$K("sidebarTitle").innerHTML = title;
			}	
			getController()["update"](xmlDoc.firstChild); 
	}
});

Ext.reg('wikiApapter', Kloud.Module.Wiki.WikiAdapter);



/*--------------  wiki global functions ------------------------- */

function wiki_init(type,plickId,userState,wikiSourceType,loadViewFn,afterRenderFn) {
    Wiki.Config.lang = "en";
    if (Kloud.Module.Global.MultilingualInfo) {
    	var lang = Kloud.Module.Global.MultilingualInfo.locale;
    	if (lang.indexOf("zh_")==0) {
    		Wiki.Config.lang = "zh-cn";
    	} else if (lang.indexOf("ja")==0){
    		Wiki.Config.lang = "ja-utf8";
    	}
    }
    
    Wiki.Config.useLayerDialog = true;  
    Wiki.Config.enable.qlinks = false;
    Wiki.Config.enable.kw = false;
    Wiki.Config.enable.attach = false;
    Wiki.Config.enable.cmt = false;
    Wiki.Config.enable.tags = false; 
    Wiki.Config.ifShowTidx = false;
    Wiki.Config.editor_onload = function() {
		if (loadViewFn) {
			loadViewFn();
		}
	};
	
	if (afterRenderFn instanceof Function){
		userActions.update = [["updateTrigger", afterRenderFn, false]];
		
	}
    //add imagebase support 
    window._supportCommunityImageBase = true;
    window.showInsertImageWin = Kloud.Module.ImageBase.showInsertImageWin;
    window.showSmartPasteWin = Kloud.Module.ImageBase.showSmartPasteWin;

	if(wikiSourceType == null)
		wikiSourceType = Kloud.Module.Wiki.WikiSourceType.PLICK;
    
    wikiAdapter = new Kloud.Module.Wiki.WikiAdapter({
    	wikiType : type
    	,plickId : plickId
    	,userState : userState
    	,wikiSourceType : wikiSourceType
    });	
}


function wiki_getCurUid(){return '1';}

function wiki_getUrlForAddingAppendix(op, ids){}

function wiki_link2Knowledge(kwId){}

function wiki_addAttachment(title, content){}

function wiki_post(xmlData){
	var xmlDoc = IX.Xml.parser(xmlData);
	var wikiNode = xmlDoc.documentElement;
	
	var title = Kloud.Module.Wiki.WikiContent.getWikiTile(wikiNode);
	
	wikiNode.setAttribute('op','save');
	wikiNode.setAttribute('type','wiki');
		
	xmlData = IX.Xml.getXmlString(xmlDoc);	
	
	var secIds = Kloud.Module.Wiki.WikiContent.getSectionIds(wikiNode);
	if(Kloud.Module.Wiki.CurActionStatus.editModel == "Edit"){	
		Kloud.Module.Wiki.WikiContent.setSectionVersionEx(wikiNode,Kloud.Module.Wiki.CurActionStatus.sectionId,Kloud.Module.Wiki.CurActionStatus.sectionVersion);
		Kloud.Module.Wiki.CurActionStatus.sectionFragment = Kloud.Module.Wiki.WikiContent.getSectionFragmentXml(wikiNode,secIds);		
	}				
	else
	{
		Kloud.Module.Wiki.CurActionStatus.sectionFragment = xmlData;
	}
	if(wikiAdapter){
		if(wikiAdapter.wikiType=="new"){
			wikiAdapter.setTitle(title,xmlDoc);
			return;
		}
	}
	var processDlg = null;
	processDlg = Ext.MessageBox.show({
					msg : 'Processing, please wait...',
					width : 300,
					wait : true,
					waitConfig : {
						interval : 200
					}
				}); 
				
	
	
	Ext.Ajax.request({
		async : true,
		url : '/servlets/AjaxActionMainWebServlet',
		method : 'POST',
		callback : function(options, success, response) {	
			if (processDlg != null){
				processDlg.hide();
			}
			
			var res = Ext.util.JSON.decode(response.responseText);
			Kloud.Module.Wiki.ResultHandler.handleResult(res,Kloud.Module.Wiki.CurActionStatus.editModel);
			
			//Set the title
			if(wikiAdapter)
			wikiAdapter.setTitle(title,xmlDoc);
		},
		params : {
			action : 'WIKI',
			actionMethod : Kloud.Module.Wiki.CurActionStatus.ajaxActionMethod,
			id : wikiAdapter.plickId,
			editModel : Kloud.Module.Wiki.CurActionStatus.editModel,
			sectionId : Kloud.Module.Wiki.CurActionStatus.sectionId,
			content : Kloud.Module.Wiki.CurActionStatus.sectionFragment,
			wikiSourceType : wikiAdapter.wikiSourceType	
		},
		scope : this
	});						
}

/* --------------------------------------------------------------- */