/**
 * UIGlobalオブジェクトはUIDirectoryオブジェクトインスタンスなど保持し外部からアクセス可能にします。
 */
var UIGlobal = new function(){
	this.directories = [];
	this.items = [];
	this.HTMLId = [];
	this.charCheckStr = /^[0-9]|[^a-zA-Z0-9_\-]/;
	this.error = new function(){
		this.HTMLIdDuplication = "HTML id属性の重複は許可されていません。";
		this.HTMLIdNGChar = "HTML id属性は数字から始めること、「_」「-」以外の記号は使用はできません。";
		this.HTMLClassNGChar　= "HTML class属性は数字から始めること、「_」「-」以外の記号は使用はできません。";
	};
/**
 * HTMLのid属性値の重複チェックを行います。
 */
	this.checkHTMLId = function(param,obj){
		if(param == obj.getHTMLId()) return; //同じIDが設定された場合は何もしない
		
		//ID重複チェック
		var id_array = UIGlobal.HTMLId;
		for(var i = 0; i < id_array.length; i++){
			if(param.toLowerCase() == id_array[i].toLowerCase()){
				alert(UIGlobal.error.HTMLIdDuplication+"（重複ID："+param+"）");
				return;
			}
		}
		
		//禁止文字チェック
		if(param.match(UIGlobal.charCheckStr)){
			alert(UIGlobal.error.HTMLIdNGChar);
			return;
		}
		
		//既にIDが設定されている場合でID変更を行う場合はUIGlobal.HTMLIdの該当箇所を削除する
		if(obj.getHTMLId()){ 
			var i = 0;
			var oldId = obj.getHTMLId();
			var id_array = UIGlobal.HTMLId;
			while(true){
				if(oldId == id_array[i]){
					id_array.splice(i,1);
					break;
				}
				i++;
			}
		}
		
		obj.__HTMLId = param;
		UIGlobal.HTMLId.push(obj.__HTMLId);
	};
};

/**
 * UISettingオブジェクトはUIItem or UIDirectoryのデフォルト値の設定を行います。
 * UISettingのプロパティがUIItem or UIDirectoryに反映されるのはその後生成されるインスタンスのみですので
 * UIItem or UIDirectoryインスタンス生成前に各種設定を行う必要があります。
 */
var UISetting = new function(){
	this.windowTarget = "_self";
	this.root = new function(){
		this.__HTMLId = "";//アクセス非推奨
		this.getHTMLId = function(){ return this.__HTMLId; };
		this.setHTMLId = function(param){
			UIGlobal.checkHTMLId(param,this);
		}
	};
	
	this.className = new function(){
		this.root = "root"; 
		this.rootDirectory = "rootDir";
		this.directory = "dir";
		this.directoryLabel = "dirLabel";
		this.item = "item";
		this.itemLabel = "itemLabel";
		this.icon = "icon";
		this.empty = "empty";
		this.emptyLabel = "emptyLabel";
	};
	
	this.icon = new function(){
		this.directoryOpenIconSRC = "/common/img/icon_folder_o.gif";
		this.directoryCloseIconSRC = "/common/img/icon_folder_c.gif";
		this.itemIconSRC = "/common/img/icon_file.gif";
		this.directoryOpenIconText = "■";
		this.directoryCloseIconText = "□";
		this.itemIconText = "*";
		this.directoryIconType = "image"; //or "text"
		this.itemIconType = "image"; //or "image"
	};
	
	//各種イベントハンドラメソッドには引数として”イベントが起きたli要素”と”それに対応するUIItem or UIDirectoryインスタンス”設定される。
	this.func = new function(){
		this.onClickDirectory = function(elem,obj){
			var dir = elem.getElementsByTagName("ul")[0];

			if(obj.iconType == "image"){
				var icon = elem.getElementsByTagName("img")[0];
		
				if(dir.style.display == "block"){
					dir.style.display = "none";
					icon.src = obj.closeIconSRC;
				}else{
					dir.style.display = "block";
					icon.src = obj.openIconSRC;
				}
			}else{
				var icon = elem.getElementsByTagName("span")[0];
		
				if(dir.style.display == "block"){
					dir.style.display = "none";
					icon.firstChild.nodeValue = obj.closeIconText;
				}else{
					dir.style.display = "block";
					icon.firstChild.nodeValue = obj.openIconText;
				}
			}
		}
		this.onMouseOverDirectory = function(elem,obj){};
		this.onMouseOutDirectory = function(elem,obj){};
		this.onClickItem = function(elem,obj){
			if(!obj.href) return;
			if(obj.target == "_blank"){
				window.open(obj.href,obj.target);
			}else{
				window.location.href = obj.href;
			}
		};
		this.onMouseOverItem = function(elem,obj){};
		this.onMouseOutItem = function(elem,obj){};
	}
};

/**
 * UIItemオブジェクトはファイルのような機能提供します。
 */
function UIItem(name,href,HTMLId,clickFunc,mouseOverFunc,mouseOutFunc){
	if(!name){
		alert("UIItemコンストラクタの第一引数は省略できません。");
		return;
	}
	this.__id = UIGlobal.items.length;
	this.__parent = null;
	this.name = name;
	this.href = href;
	this.target = UISetting.windowTarget;
	this.iconSRC = UISetting.icon.itemIconSRC;
	this.iconText = UISetting.icon.itemIconText;
	this.iconType = UISetting.icon.itemIconType;
	this.clickFunc = (clickFunc)? clickFunc : UISetting.func.onClickItem;
	this.mouseOverFunc = (mouseOverFunc)? mouseOverFunc : UISetting.func.onMouseOverItem;
	this.mouseOutFunc = (mouseOutFunc)? mouseOutFunc : UISetting.func.onMouseOutItem;
	
	this.__HTMLId;//直接アクセスは非推奨
	this.getHTMLId = function(){ return this.__HTMLId; };
	this.setHTMLId = function(param){
		UIGlobal.checkHTMLId(param,this);
	}
	if(HTMLId) this.setHTMLId(HTMLId);
	UIGlobal.items.push(this);
}
UIItem.prototype = {
	createHTML : function(){
		if(UISetting.className.icon.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.item.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.itemLabel.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		
		var classIcon = (UISetting.className.icon)? " class=\""+UISetting.className.icon+"\"":"";
		var classItem = (UISetting.className.item)? " class=\""+UISetting.className.item+"\"":"";
		var classItemLabel = (UISetting.className.itemLabel)? " class=\""+UISetting.className.itemLabel+"\"":"";
		
		var html = "<ul>";
		var itemClick = " onclick=\"UIGlobal.items["+this.__id+"].clickFunc(parentNode,UIGlobal.items["+this.__id+"]); return false;\"";
		var itemMouseOver = " onmouseover=\"UIGlobal.items["+this.__id+"].mouseOverFunc(parentNode,UIGlobal.items["+this.__id+"]); return false;\"";
		var itemMouseOut = " onmouseout=\"UIGlobal.items["+this.__id+"].mouseOutFunc(parentNode,UIGlobal.items["+this.__id+"]); return false;\"";
		var itemEvent = itemClick + itemMouseOver + itemMouseOut;
		var itemIconHTML;
		if(this.iconType == "image"){
			itemIconHTML = "<img"+classIcon+" src=\""+this.iconSRC+"\" alt=\"\" style=\"vertical-align:middle; cursor:pointer;\" "+itemEvent+" />";
			if(!this.href) itemIconHTML = "<img"+classIcon+" src=\""+this.iconSRC+"\" alt=\"\" style=\"vertical-align:middle;\" "+itemEvent+" />";
		}else{
			var iconText = this.iconText.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
			itemIconHTML = "<span"+classIcon+" style=\"vertical-align:middle; cursor:pointer;\" "+itemEvent+">"+iconText+"</span>";
			if(!this.href) itemIconHTML = "<span"+classIcon+" style=\"vertical-align:middle;\" "+itemEvent+">"+iconText+"</span>";
		}
		var id =(this.getHTMLId())? " id=\""+this.getHTMLId()+"\"":"";
		var name = this.name.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
		
		html +="<li"+id+classItem+" style=\"list-style-type:none;\">";
		if(this.href) html += itemIconHTML+"<a"+classItemLabel+" href=\""+this.href+"\" "+itemEvent+">"+name+"</a>";
		else html +=itemIconHTML+"<span"+classItemLabel+" "+itemEvent+">"+name+"</span>";
		html +="</li></ul>";
		
		return html;
	},
	createText : function(){
		return this.createHTML().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
	}
};

/**
 * UIDirectoryオブジェクトはフォルダのような機能提供します。
 * UIDirectoryまたはUIItemオブジェクトインスタンスを追加することでディレクトリを構築します。
 * ディレクトリ構造をHTMLに反映させるにはcreateHTMLメソッドから得られるストリングデータを利用します。
 */
function UIDirectory(name,HTMLId,clickFunc,mouseOverFunc,mouseOutFunc){
	if(!name){
		alert("UIDirectoryコンストラクタの第一引数は省略できません。");
		return;
	}
	
	this.__id = UIGlobal.directories.length;
	this.__parent = null;
	this.name = name;
	this.children = [];
	this.openIconSRC = UISetting.icon.directoryOpenIconSRC;
	this.closeIconSRC = UISetting.icon.directoryCloseIconSRC;
	this.openIconText = UISetting.icon.directoryOpenIconText;
	this.closeIconText = UISetting.icon.directoryCloseIconText;
	this.iconType = UISetting.icon.directoryIconType;
	this.clickFunc = (clickFunc)? clickFunc : UISetting.func.onClickDirectory;
	this.mouseOverFunc = (mouseOverFunc)? mouseOverFunc : UISetting.func.onMouseOverDirectory;
	this.mouseOutFunc = (mouseOutFunc)? mouseOutFunc : UISetting.func.onMouseOutDirectory;
	
	this.__HTMLId;//直接アクセスは非推奨
	this.getHTMLId = function(){ return this.__HTMLId; };
	this.setHTMLId = function(param){
		UIGlobal.checkHTMLId(param,this);
	}
	if(HTMLId) this.setHTMLId(HTMLId);
	UIGlobal.directories.push(this);
}
UIDirectory.prototype = {
	/**
	 * 子に要素（ディレクトリまたはアイテム）を追加する。
	 * @param UIDirectory | UIItem オブジェクト
	 * @return UIDirectory | UIItem 成功：追加されたオブジェクト、失敗：false
	 */
	addChild : function(child){
		if(!(child instanceof UIDirectory || child instanceof UIItem)){
			alert("UIDirectory:addChild の引数が不正です。");
			return;
		}
		
		if(child.__parent){
		//既に親がある（追加されている）場合は取り外してから追加する。
			child.__parent.removeChild(child);
		}
		child.__parent = this;
		var children = this.children;		
		for(var i = 0; i < children.length; i++){
			if(child == children[i])	{
				return false;
			}
		}
		
		this.children.push(child);
		return child;
	},
	
	/**
	 * 指定した子要素を削除する。
	 * @param UIDirectory | UIItem オブジェクト
	 * @return UIDirectory | UIItem 成功：削除されたオブジェクト、失敗：false
	 */
	removeChild : function(child){
		if(!(child instanceof UIDirectory || child instanceof UIItem)){
			alert("UIDirectory:removeChild 引数が不正です。");
			return;
		}
		
		var exist = false;
		var children = this.children;		
		
		for(var i = 0; i < children.length; i++){
			if(child == children[i])	{
				children.splice(i,1);	
				exist = true;
				break;
			}
		}
		
		if(!exist) child = false;
		return child;
	},
	
	/**
	 * ディレクトリ構造を元にHTMLを生成する
	 * @param isChild
	 * @return String 生成されたHTMLテキスト
	 */
	createHTML : function(isChild){
		if(UISetting.className.root.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.rootDirectory.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.directory.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.directoryLabel.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.icon.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.empty.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.emptyLabel.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.item.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		if(UISetting.className.itemLabel.match(UIGlobal.charCheckStr)){ alert(UIGlobal.error.HTMLClassNGChar); return; }
		
		var idRoot =(UISetting.root.getHTMLId())? " id=\""+UISetting.root.getHTMLId()+"\"":"";
		var classRoot =(UISetting.className.root)? " class=\""+UISetting.className.root+"\"":"";
		var classRootDir =(UISetting.className.rootDirectory)? " class=\""+UISetting.className.rootDirectory+"\"":"";
		var classDir = (UISetting.className.directory)? " class=\""+UISetting.className.directory+"\"":"";
		var classDirLabel = (UISetting.className.directoryLabel)? " class=\""+UISetting.className.directoryLabel+"\"":"";
		var classIcon = (UISetting.className.icon)? " class=\""+UISetting.className.icon+"\"":"";
		var classEmpty = (UISetting.className.empty)? " class=\""+UISetting.className.empty+"\"":"";
		var classEmptyLabel = (UISetting.className.emptyLabel)? " class=\""+UISetting.className.emptyLabel+"\"":"";
		var classItem = (UISetting.className.item)? " class=\""+UISetting.className.item+"\"":"";
		var classItemLabel = (UISetting.className.itemLabel)? " class=\""+UISetting.className.itemLabel+"\"":"";
		
		var dirClick = " onclick=\"UIGlobal.directories["+this.__id+"].clickFunc(parentNode,UIGlobal.directories["+this.__id+"]); return false;\"";
		var dirMouseOver = " onmouseover=\"UIGlobal.directories["+this.__id+"].mouseOverFunc(parentNode,UIGlobal.directories["+this.__id+"]); return false;\"";
		var dirMouseOut = " onmouseout=\"UIGlobal.directories["+this.__id+"].mouseOutFunc(parentNode,UIGlobal.directories["+this.__id+"]); return false;\"";
		var dirEvent = dirClick + dirMouseOver + dirMouseOut;
		var dirIconHTML;
		if(this.iconType == "image"){
			dirIconHTML = "<img"+classIcon+" src=\""+this.closeIconSRC+"\" alt=\"\" style=\"vertical-align:middle; cursor:pointer;\" "+dirEvent+" />";
		}else{
			var closeIconText = this.closeIconText.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
			dirIconHTML = "<span"+classIcon+" style=\"vertical-align:middle; cursor:pointer;\" "+dirEvent+">"+closeIconText+"</span>";
		}
		var id =(this.getHTMLId())? " id=\""+this.getHTMLId()+"\"":"";
		var name = this.name.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");

		if(!this.children.length){
			var html;
			if(!isChild){
				html = "<ul"+idRoot+classRoot+"><li"+id+classRootDir+">"+dirIconHTML+"<a"+classDirLabel+" href=\"#\""+dirEvent+">"+name+"</a><ul style=\"display:none;\"><li"+classEmpty+" style=\"list-style-type:none;\"><span"+classEmptyLabel+">アイテムが存在しません。</span></li></ul></li></ul>";
			}else{
				html = "<ul style=\"display:none;\"><li"+classEmpty+" style=\"list-style-type:none;\"><span"+classEmptyLabel+">アイテムが存在しません。</span></li></ul>";
			}
			 return html;
		}
		
		var html ="";
		var childItems = this.getChildItems();
		var childDirectories = this.getChildDirectories();
		
		if(!isChild) html += "<ul"+idRoot+classRoot+"><li"+id+classRootDir+" style=\"list-style-type:none;\">"+dirIconHTML+"<a"+classDirLabel+" href=\"#\""+dirEvent+">"+name+"</a>";
		html += "<ul style=\"display:none;\">";

		var i;
		//ディレクトリを走査
		for(i = 0; i < childDirectories.length; i++){
			var dirClick = " onclick=\"UIGlobal.directories["+childDirectories[i].__id+"].clickFunc(parentNode,UIGlobal.directories["+childDirectories[i].__id+"]); return false;\"";
			var dirMouseOver = " onmouseover=\"UIGlobal.directories["+childDirectories[i].__id+"].mouseOverFunc(parentNode,UIGlobal.directories["+childDirectories[i].__id+"]); return false;\"";
			var dirMouseOut = " onmouseout=\"UIGlobal.directories["+childDirectories[i].__id+"].mouseOutFunc(parentNode,UIGlobal.directories["+childDirectories[i].__id+"]); return false;\"";
			var dirEvent = dirClick + dirMouseOver + dirMouseOut;
			var dirIconHTML;
			if(childDirectories[i].iconType == "image"){
				dirIconHTML = "<img"+classIcon+" src=\""+childDirectories[i].closeIconSRC+"\" alt=\"\" style=\"vertical-align:middle; cursor:pointer;\" "+dirEvent+" />";
			}else{
				var closeIconText = childDirectories[i].closeIconText.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
				dirIconHTML = "<span"+classIcon+" style=\"vertical-align:middle; cursor:pointer;\" "+dirEvent+">"+closeIconText+"</span>";
			}
			var id =(childDirectories[i].getHTMLId())? " id=\""+childDirectories[i].getHTMLId()+"\"":"";
			var name = childDirectories[i].name.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
			
			html +="<li"+id+classDir+" style=\"list-style-type:none;\">";
			html += dirIconHTML+"<a"+classDirLabel+" href=\"#\""+dirEvent+">"+name+"</a>";
			html += childDirectories[i].createHTML(true);
			html +="</li>";
		}
		
		//アイテムを走査
		for(i = 0; i < childItems.length; i++){
			var itemClick = " onclick=\"UIGlobal.items["+childItems[i].__id+"].clickFunc(parentNode,UIGlobal.items["+childItems[i].__id+"]); return false;\"";
			var itemMouseOver = " onmouseover=\"UIGlobal.items["+childItems[i].__id+"].mouseOverFunc(parentNode,UIGlobal.items["+childItems[i].__id+"]); return false;\"";
			var itemMouseOut = " onmouseout=\"UIGlobal.items["+childItems[i].__id+"].mouseOutFunc(parentNode,UIGlobal.items["+childItems[i].__id+"]); return false;\"";
			var itemEvent = itemClick + itemMouseOver + itemMouseOut;
			var itemIconHTML;
			if(childItems[i].iconType == "image"){
				itemIconHTML = "<img"+classIcon+" src=\""+childItems[i].iconSRC+"\" alt=\"\" style=\"vertical-align:middle; cursor:pointer;\" "+itemEvent+" />";
				if(!childItems[i].href) itemIconHTML = "<img"+classIcon+" src=\""+childItems[i].iconSRC+"\" alt=\"\" style=\"vertical-align:middle;\" "+itemEvent+" />";
			}else{
				var iconText = childItems[i].iconText.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
				itemIconHTML = "<span"+classIcon+" style=\"vertical-align:middle; cursor:pointer;\" "+itemEvent+">"+iconText+"</span>";
				if(!childItems[i].href) itemIconHTML = "<span"+classIcon+" style=\"vertical-align:middle;\" "+itemEvent+">"+iconText+"</span>";
			}
			var id =(childItems[i].getHTMLId())? " id=\""+childItems[i].getHTMLId()+"\"":"";
			var name = childItems[i].name.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
			
			html +="<li"+id+classItem+" style=\"list-style-type:none;\">";
			if(childItems[i].href) html += itemIconHTML+"<a"+classItemLabel+" href=\""+childItems[i].href+"\" "+itemEvent+">"+name+"</a>";
			else html +=itemIconHTML+"<span"+classItemLabel+" "+itemEvent+">"+name+"</span>";
			html +="</li>";
		}
		
		html += "</ul>";
		if(!isChild) html += "</li></ul>";
		
		return html;
	},
	
	/**
	 * ディレクトリ構造を元にテキストデータを生成する。
	 * @return String 生成されたテキスト
	 */
	createText : function(){
		return this.createHTML().replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
	},
	
	/**
	 * 自身が保持しているUIDirectoryオブジェクトを配列で返す
	 * @return Array
	 */
	getChildDirectories : function(){
		var dirArray = [];
		var children = this.children;
		var count = children.length;
		
		for(var i = 0; i < count; i++){
			if(children[i] instanceof UIDirectory) dirArray.push(children[i]);
		}
		
		return dirArray;	
	},
	
	/**
	 * 自身が保持しているUIItemオブジェクトを配列で返す
	 * @return Array
	 */
	getChildItems : function(){
		var itemArray = [];
		var children = this.children;
		var count = children.length;
		
		for(var i = 0; i < count; i++){
			if(children[i] instanceof UIItem) itemArray.push(children[i]);
		}
		
		return itemArray;	
	}
};


/** 
 * **********************************************************************************
 * ************************** 簡易マニュアル ****************************************
 * **********************************************************************************
 *
 *
 * UIDirectory or UIItem の各プロパティ・イベントハンドラメソッドには
 * UISettingに設定されたものがデフォルト値として使用される。
 * UIDirectory or UIItem のプロパティを変更することで個別に挙動を変更することが可能。
 *
 *
 * UIDirectory **********************************************************************
 *
 * コンストラクタ
 * 【引数】
 * name(String) ディレクトリの名前
 * （以下省略可能）
 * HTMLId(String) HTMLのid属性値
 * clickFunc(Function) クリック時に実行する関数
 * mouseOverFunc(Function) マウスオーバー時に実行する関数
 * mouseOutFunc(Function) マウスアウト時に実行する関数
 * 【戻り値】
 * UIDirectoryインスタンス
 *
 * ---------------------------------------------------------
 *
 * プロパティ
 *
 * openIconSRC(String) ディレクトリオープン時に表示される画像パス
 * closeIconSRC(String) ディレクトリクローズ時に表示される画像パス
 * openIconText(String) ディレクトリオープン時に表示される画像（テキスト表現）
 * closeIconText(String) ディレクトリクローズ時に表示される画像（テキスト表現）
 * iconType(String) アイコンを画像で表示させるかテキストで表示させるか。パラメータは"image" or "text"を指定。
 * clickFunc(Function) クリック時に実行する関数
 * mouseOverFunc(Function) マウスオーバー時に実行する関数
 * mouseOutFunc(Function) マウスアウト時に実行する関数
 *
 * ---------------------------------------------------------
 *
 * メソッド
 *
 * getHTMLId HTMLのid属性値を取得する
 * 【戻り値】(String)
 *
 * setHTMLId HTMLのid属性値を設定する
 * 【引数】(String) 
 *
 * addChild 子要素を追加する
 * 【引数】child(UIDirectory or UIItem)  追加する要素
 * 【戻り値】(UIDirectory or UIItem) 追加した要素
 *
 * removeChild 子要素を削除する
 * 【引数】child(UIDirectory or UIItem)  削除する要素
 * 【戻り値】(UIDirectory or UIItem) 削除した要素
 *
 * createHTML HTMLを生成する
 * 【戻り値】(String) HTMLテキスト
 *
 * createText テキストを生成する
 * 【戻り値】(String) テキストデータ
 *
 * getChildDirectories
 * 【戻り値】(Array) 保持しているUIDirectoryインスタンス
 *
 * getChildItems
 * 【戻り値】(Array) 保持しているUIItemインスタンス
 *
 *
 *
 *
 *
 * UIItem **********************************************************************
 *
 * コンストラクタ
 * 【引数】
 * name(String) アイテムの名前
 * （以下省略可能）
 * href(String) リンク先
 * HTMLId(String) HTMLのid属性値
 * clickFunc(Function) クリック時に実行する関数
 * mouseOverFunc(Function) マウスオーバー時に実行する関数
 * mouseOutFunc(Function) マウスアウト時に実行する関数
 * 【戻り値】
 * UIItemインスタンス
 *
 * ---------------------------------------------------------
 *
 * プロパティ
 *
 * href(String) リンク先
 * target(String) ターゲットウインドウ
 * iconSRC(String) 表示される画像パス
 * iconText(String) 表示される画像（テキスト表現）
 * iconType(String) アイコンを画像で表示させるかテキストで表示させるか。パラメータは"image" or "text"を指定。
 * clickFunc(Function) クリック時に実行する関数
 * mouseOverFunc(Function) マウスオーバー時に実行する関数
 * mouseOutFunc(Function) マウスアウト時に実行する関数
 *
 * ---------------------------------------------------------
 *
 * メソッド
 *
 * getHTMLId HTMLのid属性値を取得する
 * 【戻り値】(String)
 *
 * setHTMLId HTMLのid属性値を設定する
 * 【引数】(String) 
 *
 *
 *
 *
 *
 * UISetting **********************************************************************
 *
 * これらのプロパティは UIItem or UIDirectory のデフォルト値に使用されます。
 * またこれらの設定は UIItem or UIDirectory インスタンス生成前に行う必要があります。
 * インスタンス生成後に設定してもそれらには反映されません。
 * 
 * 出力されるHTMLのrootとなるul要素のid属性を設定/取得（String）
 * UISetting.root.setHTMLId("root_id");
 * UISetting.root.getHTMLId();
 *
 * 出力されるHTMLのclass属性を設定
 * UISetting.className.root = "root"; 
 * UISetting.className.rootDirectory = "rootDir"; 
 * UISetting.className.directory = "dir";
 * UISetting.className.directoryLabel = "dirLabel";
 * UISetting.className.item = "item";
 * UISetting.className.itemLabel = "itemLabel";
 * UISetting.className.icon = "icon";
 * UISetting.className.empty = "empty";
 * UISetting.className.emptyLabel = "emptyLabel";
 * 
 * アイコンのパス及びテキスト表現を設定
 * UISetting.icon.directoryOpenIconSRC = "/common/img/icon_folder_o.gif";
 * UISetting.icon.directoryCloseIconSRC = "/common/img/icon_folder_c.gif";
 * UISetting.icon.itemIconSRC = "/common/img/icon_file.gif";
 * UISetting.icon.directoryOpenIconText = "□";
 * UISetting.icon.directoryCloseIconText = "■";
 * UISetting.icon.itemIconText = "*";
 * 
 * アイコンのタイプを設定
 * UISetting.icon.directoryIconType = "image"; // image or text
 * UISetting.icon.itemIconType = "image"; // image or text
 * 
 * ページ移動時のウインドウターゲット指定
 * UISetting.windowTarget = "_blank";
 * 
 * イベントハンドラメソッドを設定（デフォルトが上書きされる）
 * UISetting.func.onClickDirectory = function(elem,obj){};
 * UISetting.func.onMouseOverDirectory = function(elem,obj){};
 * UISetting.func.onMouseOutDirectory = function(elem,obj){};
 * UISetting.func.onClickItem =  function(elem,obj){};
 * UISetting.func.onMouseOverItem = function(elem,obj){};
 * UISetting.func.onMouseOutItem = function(elem,obj){};
 */


