/*
*	modello框架
**
*	author 贺博
*	version 2007-7-9
**
*	收藏编辑器
*/

//Env.require("/javascript/com.duxiu.js.ComponentFactory.js");
//Env.require("/javascript/WebFav/com.duxiu.WebFavIdManager.js");

WebEdit = Class.create();
WebEdit.register("com.duxiu.js.WebEdit");

WebEdit.NOTE_DIALOG_HTML = '<div id="wait_dialog_note"><center>正在读取数据......</center></div>';

WebEdit.construct = function($self, $class){	
	var type;// 0 新建 ； 1 为插页
	var dialog;	
	var disporder = "";//如果是插入新项，则需要有记录order，插入完后回复默认。
	var cataid = 0;//插入新项，则需要有记录cataid，插入完后回复默认。
	var linkName="";//插入新项 , 则需要有记录linkName，插入完后回复默认。	
	var title ="";
	var favid="";//编辑时需要
	var isEditing = false;	
	var dest_cataid="";//目录移动需要
	var groupid = "";//新建目录的父级目录
	var cataname = "";//新建目录名称
	
	this.arrUpload = [];
	
	//this.idManager = new WebFavIdManager();		
	
	this.addFavorites = function(){
		this.showAddDialog(_webfav.getCatalog().c , _webfav.getCatalog().l);		
	}
	
	//显示添加对话框
	this.showAddDialog = function(c , lnk){
		if(isEditing == true) return;		
		type =0;
		cataid=c;
		if(lnk!='全部')
			linkName = "全部/"+lnk;
		_screenMap.wait(createEditDialog() ,false);
	}
	
	//显示插入对话框
	this.showInsertDialog = function(fid){
		if(isEditing == true) return ;		
		setParams(fid);		
		type=1;			
		if(linkName==""){
			linkName = _webfav.getCatalog().l;
		}		
		var dom = g("div_"+favid);		
		setTimeout(function(){
			dom.parentNode.insertBefore(createEditDialog() , dom);
		},500);		
	}
	
	var clone_dom;//收藏元素复制单元
	
	//显示编辑对话框
	this.showUpdateDialog = function(fid){		
		if(isEditing == true) return ;		
		setParams(fid);		
		type=2;		
		createEditDialog();				
		var inputs = dialog.getElementsByTagName("input");		
		inputs[1].value = replaceColor(g("title_"+favid).value);		
		inputs[3].value = g("url_"+favid).value;		
		inputs[1].onkeydown = inputs[3].onkeydown = function(){
			editInFrame = true;
		}		
		var dom = g("div_"+favid);		
		memo = g("memo_"+favid).innerHTML;		
		setTimeout(function(){
			clone_dom = dom.cloneNode(true);//复制一个单元						
			dom.parentNode.replaceChild(dialog , dom);
		},500);	
	}
	
	//移动
	this.ShowMoveDialog = function(fid){
		if(isEditing == true) return ;		
		setParams(fid);
		type=3;		
		_screenMap.wait(createEditDialog() ,false);
		g('catalog_dialog').innerHTML = getSelectHTML();

		var select =  dialog.getElementsByTagName("select")[0];
		if(cataid !=0) {			
			var list = select.options;			
			for(var i=0 ;  i< list.length ; i++){
				if(list[i].value == cataid){
					select.selectedIndex =i ;
				}
			}
		}
		setCatalogSelectChange(select);		
	}
	
	//批量移动
	this.showbatchMoveDialog = function(){		
		if(isEditing == true) return ;		
		favid  = $self.idManager.getIds();
		if(favid=="") return ;
		type=5;//批量移动		
		_screenMap.wait(createEditDialog() ,false);
		
		g('catalog_dialog').innerHTML = getSelectHTML();	
	}
	
	//确定(批量)移动
	this.move = function(){
		var selectlist = dialog.getElementsByTagName("select");
		cataid = selectlist[0].value;
		if(type==3)
			disporder = selectlist[1].value;
		else if(type==5)
			disporder = 0;
		
		this.sendToServer();
	}
	//跳转到编辑页面
	this.goToEditPage=function(fid,doctypeNum,username){
		if(fid==""||doctypeNum==""||username==""){
			alert("对不起!您请求的数据有误,请联系管理员！");
			return ;
		}
		var page="resinput.jsp";
		window.open("/resinputs/"+page+"?docid="+doctypeNum+"&favid="+fid+"&uname="+username,"_blank");
	}
	//删除对话框
	this.showDeleteDialog = function(fid,username){
		if(username!=_webfav.getUserName()&&isAdmin!="0"){
			alert("抱歉，您没有删除此文献的权限！");
			return;
		}
		if(isEditing == true) return ;		
		setParams(fid);
		type=4;//删除		
		_screenMap.wait(createEditDialog() ,false);
		g('catalog_dialog').innerHTML = getDelectFavNoteHTML();		
	}
	
	//批量删除对话框
	this.showbathDeleteDialog = function(fid){
		if(isEditing == true) return ;			
		favid  = $self.idManager.getIds();		
		type=6;//批量删除		
		_screenMap.wait(createEditDialog() ,false);
		g('catalog_dialog').innerHTML = getDelectFavNoteHTML();		
	}
	
	//确定删除
	this.deleteFav = function(){		
		this.sendToServer();		
	}
	
	
	var oSelectCatalog ;	
	//移动目录
	this.showMoveCatalogDialog = function(_cataid , _linkName){	
		cataid = _cataid;
		type=7;//移动目录
		_screenMap.wait(createEditDialog() ,false);	

		g('catalog_dialog').innerHTML = getMoveCatalogHTML();
	}	

	//确定移动目录
	this.moveCatalog = function(){
		var inputs = g('catalog_dialog').getElementsByTagName("input");//radio , text , radio , ok_btn 
		var selects = g('catalog_dialog').getElementsByTagName("select");//新建的父目录select  , 目标目录select

		if(inputs[0].checked ==true){//新建目录
			groupid = selects[0].value;
			cataname =  inputs[1].value;			
			if(!cataname || cataname.trim()=="") return ;			
			var slnk = selects[0].options[selects[0].selectedIndex].innerText;
			if(groupid==0){
				slnk = cataname;		
			}
			else{
				slnk  +="/"+cataname;			
			}			
			if(!checkSameName(slnk ,selects[0])){//检查同级标签
				linkName = 	slnk;
				type=8;//转移到新加标签				
				sendToMoveCatalog();
			}
			else{
				alert("同级目录下 已经有：["+slnk+"]。");	
			}
		}
		else{
			type=9;//转移到现有标签		
			dest_cataid = selects[1].value;		
			sendToMoveCatalog();
		}
	}
	
	
	//添加分类序
	this.showAddCataIntroDialog = function(){		
		if(isEditing == true) return ;		
		if(_cataIntro.getHTML().trim()=="-1"){
			type=20;		
		}
		else{
			type=21;			
		}
		memo = g("show_cataintro").innerHTML;		
		_screenMap.wait(createEditDialog() ,false);	
	}	
	
	
	this.showExportCatalogDialog = function(_cataid){
		cataid = _cataid;		
		if(isEditing == true) return ;
		type=30;
		_screenMap.wait(createEditDialog() ,false);			
		g('catalog_dialog').innerHTML = getExportCatalogHTML();

		var select =  dialog.getElementsByTagName("select")[0];
	
		g('ct').innerHTML = getCatalogSelect(select.value);
	
		select.onchange = function(){
			g('ct').innerHTML = getCatalogSelect(select.value);
		}		
	}
	
	this.exportCatalog = function(){
		var selects = g('catalog_dialog').getElementsByTagName("select");//目标库select  , 目标目录select			
		var url = "/backgroundjsp/exportCatalog.jsp?srpid="+_webfav.getRepId() + "&scataid="+cataid 
			+"&drpid="+ selects[0].value +"&dcataid="+selects[1].value;			
		var request = new XMLRequst(url , "get").createXMLRequst();		
		request.onreadystatechange =function(){
			try{
				if(request.readyState == 4){//over
					if (request.status == 200){						
						var out = parseInt(request.responseText.trim());						
						if(out==-1){
							alert("同级目录下 含有相同目录命");							
						}
						else if(out==0){						
							window.open("/c/rep?rpid="+selects[0].value);	_screenMap.notify(); resertParams();	
						}
					}
					else {							
						throw new Error("您所请求的"+url+"异常。 异常代号="+request.status);
					}
				}
			}
			catch(e){
				resertParams();
				throw e;
			}
		};
		request.send(null);	
	}	
	var checkSameName =function(_lnk , select){
		with(select){
			for(var i=0 ; i<options.length ; i++){
				if(options[i].innerText==_lnk){
					return true;
				}
			}		
		}		
		return false;
	}
	
	var sendToMoveCatalog = function(){
		var url="/catalog/moveCatalog.jsp?uid="+_webfav.getUserId()
			+"&rpid="+_webfav.getRepId()
			+"&dcataid="+dest_cataid 
			+"&linkname="+encodeURIComponent(linkName)
			+"&groupid="+groupid
			+"&cataname="+encodeURIComponent(cataname)
			+"&cataid="+cataid
			+"&type="+type;

		var request = new XMLRequst(url , "get").createXMLRequst();

		request.onreadystatechange =function(){
			try{
				if(request.readyState == 4){//over
					if (request.status == 200){						
						_webfav.reflashTimestamps();						
						var cur = _webfav.pageController.getCurPage();
						if(_webfav.getCount()>0){		
							_webfav.pageController.skipToPage(cur, true);//刷新当前页面
						}
						else{
							g('fav').innerHTML ='';	
						}
						
						if(type==8){							
							var c = request.responseText.trim();							
							_catalogTree.addChildCatalog(groupid ,cataname , c);						
						}
						resertParams();
					}
					else {							
						throw new Error("您所请求的"+url+"异常。 异常代号="+request.status);
					}
				}
			}
			catch(e){
				resertParams();_screenMap.notify();
				throw e;
			}
		};
		request.send(null);
		_screenMap.setNote(WebEdit.NOTE_DIALOG_HTML);
	}
	
	
	//供子页面获得memo
	var memo;
	this.getMemo =function(){
		if(type==2){//编辑		
			return replaceColor(memo);
		}
		else if(type==21){			
			return memo;
		}
		else{
			return "";	
		}
	}
	
	var replaceColor= function(_str){
		var reg = /<font color=red name=\"duxiu\">(.*?)<\/font>/gi;
		return _str.replace(reg, "$1");
	}
	
	
	//关闭对话框
	this.close = function(){		
		if(type==0 || type==1 || type==2 ){				
			this.arrUpload = window.frames['Editor'].uploader.getArrUploadItem();//获得上传数组
			if(editInFrame){
				if(window.confirm("是否保存内容？")){
					window.frames['Editor'].dosubmit();
					return;
				}
			}			
		}		
		if(type==1)
			removeElement(dialog);
		else if(type==2){//编辑			
			dialog.parentNode.replaceChild(clone_dom , dialog);
		}
		_screenMap.notify();		
		resertParams();
	}
	
	this.sendToServer =function(){		
		if(type==20||type==21){//修改目录序
			memo = g("memo").value;			
			//_cataIntro.sendToSever(type , _webfav.getRepId() , memo);
		}
		else{
			var surl = "";
			var memo="";
			try{
				title = g("dialog_title").value;
				surl = g("surl").value;
				
				if(surl=="http://") surl="";
				
				memo = g("memo").value;			
			}
			catch(e){}
			
			var url="/s/fav?uid="+_webfav.getUserId()
				+"&rpid="+_webfav.getRepId()
				+"&cataid="+cataid 
				+"&title="+encodeURIComponent(title)
				+"&url="+encodeURIComponent(surl)
				+"&disp="+disporder
				+"&favid="+favid
				+"&type="+type;
	
			var request = new XMLRequst(url , "post").createXMLRequst();
	
			request.onreadystatechange =function(){
				try{
					if(request.readyState == 4){//over
						if (request.status == 200){							
							_webfav.reflashTimestamps();							
							if(type == 0 ){//新建时跳到 全部收藏最后一页
								_webfav.setCatalog(cataid , linkName);
								if(_webfav.getCount()>0){
									_webfav.pageController.goLast(true)
								}
							}
							else{
								var cur = _webfav.pageController.getCurPage();
								if(_webfav.getCount()>0){
									_webfav.pageController.skipToPage(cur, true);//插入时 只需刷新一下当前页面
								}
								else{
									g('fav').innerHTML ='';			
								}
							}
						}
						else {
							resertParams();			
							throw new Error("您所请求的"+url+"异常。 异常代号="+request.status);
						}
						resertParams();	
					}
				}
				catch(e){
					_screenMap.notify();
					throw e;			
				}
			};			
			request.send(memo);		
		}
		_screenMap.setNote(WebEdit.NOTE_DIALOG_HTML);
	}
	

	var getBarNoteHtml = function(){
		var note_word;
		if(type==0){
			note_word="新建文章";		
		}
		else if(type==1){
			note_word="插入文章";
		}
		else if(type==2){
			note_word="编辑";
		}
		else if(type==3){
			note_word="移动文章";
					
		}
		else if(type==4){
			note_word="删除文章";		
		}
		else if(type==5){
			return "<span><b>批量移动文章</b><label style='font-size:12px'>"+title+"</label></span><input type='button' value=' 关闭 ' onclick='_webEdit.close()'/>";
		}
		else if(type==6){
			return "<span><b>批量删除文章</b></span><input type='button' value=' 关闭 ' onclick='_webEdit.close()'/>";
		}
		else if(type==7){//
			note_word="移动目录";			
		}
		else if(type==20||type==21){
			note_word="编辑目录序";
		}
		else if(type==30){
			note_word = "导出";			
		}
		
		
		//if(linkName==""){
			//linkName = _webfav.getCatalog().l;
	//	}		
		if(type==0){
			return "<span><b>"+note_word+"</b><label style='font-size:12px'>(于目录[<font color='#CC0000'>"
					+linkName
					+"</font>]下)</label></span><input type='button' value=' 关闭 ' onclick='_webEdit.close()'/>";
		}
		else{
			return "<span><b>"+note_word+"</b></span><input type='button' value=' 关闭 ' onclick='_webEdit.close()'/>";
		}
	}
	
	var getNewDialogHTML = function(mid){		
		var edit_html = '<input type="hidden" id="memo" value="" />'
				+'<iframe ID="Editor" name="Editor" src="/libn/edit.htm'
				+'" frameBorder="0" marginHeight="0" marginWidth="0" scrolling="No" style="height:450px;width:740px;"></iframe>'		
		if(type==0||type==1||type==2)
			return '<div>'
				+'<label>标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;题：</label>'
				+'<input type="text" id="dialog_title" size="40"/><input type="image" src="/libn/images/bb_url.gif" title="添加标题链接" onclick="_webEdit.addUrlToTitle(this)"/>'
				+'<input id="surl" value="http://" size="50" style="display:none" /></div>'
				+'<input type="hidden" id="memo" value="" />'
				+edit_html;
		else if(type==20 ||type==21 ){
			return '<div>'+edit_html+'</div>';			
		}			
		else return '<div id="catalog_dialog"></div>';
	}
	
	var getSelectHTML = function(){		
		var html="<table><tr><td>";
		if(type==3){//单个移动
			html += "移动本篇文章到："
			+"<br/><br/>"
			+getCatalogSelect(_webfav.getRepId())+""
			+"<br/><br/>"
			+"第　<span id='ct'>"+getFavOrder(cataid)+"</span>　条</label>";			
		}else{
			html += "移动所选的 "+$self.idManager.getCount()+" 篇文章到：" 
			+"<br/><br/>"
			+getCatalogSelect(_webfav.getRepId());
		}
		html+="</td><td><input type='button' value=' 确　定 ' onclick='_webEdit.move()' class='large_button'/></td>";		
		html+="</tr></table>";
		return html;
	}
	
	var getDelectFavNoteHTML = function(){		
		var html="<table><tr><td>";		
		if(type==4)
			html+="确认删除本篇文章？";
		else if(type==6)
			html+="确认删除所选的 "+$self.idManager.getCount()+" 篇文章？";		
		html+="</td><td><input type='button' value=' 确　定 ' onclick='_webEdit.deleteFav()' class='large_button'/></td>";		
		html+="</tr></table>";		
		return html;
	}

	//获得移动目录
	var getMoveCatalogHTML = function(){
		var catalogHTML = getCatalogSelect(_webfav.getRepId());
		var span = ComponentFactory.create("span");
		span.innerHTML = catalogHTML;
		var selectL = span.getElementsByTagName("select");		
		oSelectCatalog=selectL[0];		
		selectL[0].options[0].innerText  = "一级目录";
		return "<input type='radio' id='c2' name='cc' checked='checked'/><lable for='c1'>新建目录：</label>"+span.innerHTML
			+"&nbsp;&nbsp;<input type='text' size=15/><br/><br/>"
			+"<input type='radio' id='c1' name='cc'/><lable for='c1'>现有目录：</label>"+catalogHTML+"<br/><br/>"
			+"<input type='button' value=' 确定 ' onclick='_webEdit.moveCatalog()'/>";	
	}	
	
	//导出目录的HTML
	var getExportCatalogHTML = function(){
		return "你确认导出本目录到："			
			+"<label>"+getRepositorySelect()+""
			+"<br/><br/>"
			+"目　　　　　　　录：<span id='ct'></span></label>"
			+"<input type='button' value=' 确定 ' onclick='_webEdit.exportCatalog()'/>";	
	}	
	
	var createEditDialog = function(){
		isEditing = true;
		var div = ComponentFactory.create("div");
		div.id = "newfav_main";
		var div_padding = ComponentFactory.create("div");
		div_padding.id = "newfav_padding"
		div.appendChild(div_padding);
		
		var bar = ComponentFactory.create("div");
		bar.id = "edit_dialog_bar";
		bar.innerHTML = getBarNoteHtml() ;		
		var context = ComponentFactory.create("div");
		context.id = "edit_dialog_context";		
		context.innerHTML = getNewDialogHTML() ;
		div_padding.appendChild(bar);
		div_padding.appendChild(context);
	
		dialog = div;	
		
		if(type!=0 && type!=1 && type!=2 && type!=20 && type!=21){
			dialog.style.width = "400px";		
		}
		return div;
	}
	
	var resertParams = function(){
		disporder = "";
		cataid = 0;//插入新项，则需要有记录cataid，插入完后回复默认。
		linkName="";//插入新项 , 则需要有记录linkName，插入完后回复默
		isEditing = false;	
		title="";
		
		editInFrame = false;		
			
		dest_cataid="";//目录移动需要
		groupid = "";//新建目录的父级目录
		cataname = "";//新建目录名称
	}
	
	this.reset = function(){
		resertParams();
	}
	
	var setParams = function(fid){
		try{
			favid = fid;
			
			title = " ,"+ g("title_"+favid).value;
			linkName = g("linkname_"+favid).value;
			cataid = g("cataid_"+favid).value;
			disporder = g("disporder_"+favid).value;		
		}
		catch(e){}
	}
	
	//获得某人的库
	var getRepositorySelect = function(){
		var url="/inc/rep/_rep_select.jsp?uid="+_webfav.getUserId()+"&"+_webfav.toUrlTimestamps();		
		var request = new XMLRequst(url , "get" , false).createXMLRequst();		
		request.send(null);		
		return request.responseText;	
	}
	
	//获得某人的库
	var getCatalogSelect = function(repid){
		var url="/inc/rep/_catalog_select.jsp?rpid="+repid+"&"+_webfav.toUrlTimestamps();		
		var request = new XMLRequst(url , "get" , false).createXMLRequst();		
		request.send(null);		
		return request.responseText;
	}	
	
	var getFavOrder = function(cataid){
		if(cataid==0){
			return "<select><option value='0'>末尾</option></select>"
		}
		var url="/inc/rep/favdisporder.jsp?rpid="+_webfav.getRepId()+"&cataid="+cataid+"&"+_webfav.toUrlTimestamps();		
		var request = new XMLRequst(url , "get" , false).createXMLRequst();		
		request.send(null);		
		return request.responseText;
	}
	
	//设置标签下拉框改变值的响应
	var setCatalogSelectChange = function(select){		
		select.onchange = function(){
			g('ct').innerHTML = getFavOrder(select.value);
		}
	}
	
	this.addUrlToTitle = function(image_dom){
		g("surl").style.display="";	
	}
	
	//设置是否用户在frame内部编辑
	var editInFrame = false;	
	this.setEditInFrame = function(b){
		editInFrame = b;
	}
}
