package org.zhios.website.admin.pagelet;

import java.io.File;
import java.util.StringTokenizer;
import java.util.regex.Pattern;

import org.w3c.dom.Document;
import org.zhios.website.admin.model.Strings;
import org.zhios.website.admin.model.SysConfig;

public class BasePageLet implements PageLetObj {
	protected String OuterStr;
	protected String FillStr;
	protected String ViewStr;
	protected String DivID;
	private String FillOKFunc,FillCancelFunc;
	
	//Constructor for getView.
	public BasePageLet(String divid){
		if(!divid.isEmpty()) DivID=divid;

		FillStr=null;	
		OuterStr="";
		FillOKFunc="";
		FillCancelFunc="";
		ViewStr="";
	}

	//Constructor for getFill.
	public BasePageLet(String divid, String fillokfunc,String fillcancelfunc, String outerhtml){
		if(!divid.isEmpty()) DivID=divid;
		
		FillStr="<form id='pageletform'><table width='100%'>";
		OuterStr=outerhtml;
		FillOKFunc=fillokfunc;
		FillCancelFunc=fillcancelfunc;
		
		ViewStr=null;
	}
	
	protected void setFill(String type, String descriptor, String name, String oldvalue, String initstring, boolean noempty){
		String required="";
		if(noempty){
			descriptor="*"+descriptor;
			required=" required";
		}
		
		if(type.equals("text")){
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<input type='text' style='width:250px' name='"+name+"' value='"+oldvalue+"'"+required+"></td></tr>";
		}
		else if(type.equals("textarea")){
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<textarea cols='5' style='width:250px;height:160px' name='"+name+"'"+required+">"+oldvalue+"</textarea></td></tr>";
		}
		else if(type.equals("hidden")){
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<input type='hidden' name='"+name+"' value='"+oldvalue+"'></td></tr>";
		}
		else if(type.equals("textareahidden")){
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<textarea style='display:none' name='"+name+"'>"+oldvalue+"</textarea></td></tr>";
		}
		else if(type.equals("ntext")){
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<input type='text' style='width:250px' name='"+name+"' value='"+oldvalue+"'"+required+
					" onkeydown='if(!((event.keyCode==8)||(event.keyCode==37)||(event.keyCode==39)||(event.keyCode==46)||(event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105))) event.returnValue=false;'></td></tr>";
		}
		else if(type.equals("select")){
			StringTokenizer st = new StringTokenizer(initstring, ",");
			String[] valuestr = null;
			int count=st.countTokens();
			if(count==1){
				valuestr=new String[1];
				valuestr[0]=initstring;
			}
			else{
				valuestr = new String[count];
				for(int i=0;i<count;i++){
					valuestr[i] = st.nextToken();
				}
			}
			
			FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
					"<select style='width:250px' name='"+name+"'"+required+"><option value=''></option>";
			for(int j=0;j<valuestr.length;j++){
				if(valuestr[j].equals(oldvalue)){
					FillStr+="<option value='"+valuestr[j]+"' selected>"+valuestr[j]+"</option>";
				}
				else{
					FillStr+="<option value='"+valuestr[j]+"'>"+valuestr[j]+"</option>";
				}
			}
			FillStr+="</select></td></tr>";
		}
		else if(type.equals("image")){
			File myPath = new File(SysConfig.ResourcePath+"/userimage"); 
			if(myPath.isDirectory()){ 
	        	String filelist[] = myPath.list();
				FillStr+="<tr><td width='100px' align='right'>"+descriptor+"</td><td>"+
						"<select style='width:250px' name='"+name+"'"+required+"><option value=''></option>";
				for(int j=0;j<filelist.length;j++){
					if(filelist[j].equals(oldvalue)){
						FillStr+="<option value='"+filelist[j]+"' selected>"+filelist[j]+"</option>";
					}
					else{
						FillStr+="<option value='"+filelist[j]+"'>"+filelist[j]+"</option>";
					}
				}
				FillStr+="</select></td></tr>";
			} 
		}
	}
	
	protected void setFillStr(){
		
	}

	public String getFillStr(){
		//Check constructor is right or wrong.
		if(FillStr==null) return null;

		//Check function name.
		if(FillOKFunc.isEmpty()||FillCancelFunc.isEmpty()) return null;
		
		setFillStr();
		
		FillStr+="<tr><td colspan='2' height='20px'></td></tr><tr><td align='right'><input type='button' onclick='"+FillOKFunc+"' value='"+Strings.PLOK+"'></td>" +
				"<td align='left'><input type='button' value='"+Strings.PLCancel+"' onclick='"+FillCancelFunc+";'></td></tr></table></form>";
		return FillStr;
	}

	protected void setViewStr(Document doc){
		
	}

	public String getViewStr(Document doc){
		//Check constructor is right or wrong.
		if(ViewStr==null) return null;

		setViewStr(doc);
		
		return ViewStr.trim();
	}
	
	public String resetViewStr(String outerhtml){
		return "";
	}
	
	protected boolean checkNumbric(String instr){
		Pattern pattern = Pattern.compile("[0-9]*"); 
		if(!pattern.matcher(instr).matches()) return false; 
		return true; 
	}

}
