/*
----------------------------------
-----
	Dynamic contents providing Javascript
	
		It make up dynamic contents such as 
	ajax technology.
	
	Written by Ginji Hayashi 2008
---------------------------------*
/* require files */
var sitemap   = "./sitemap.xml";
var defaultpage = "./data/index.dat";

var submenu_parent_identifier = 's',
	submenu_identifier = 'c' ,
	menu_identifier = 'm'
var mozilla = navigator.userAgent.indexOf("Gecko/") != -1;

/* include */
with (document){
	write( '<script src="./jscripts/request.js"></script>' );
	write( '<script src="./jscripts/cookie.js"></script>' );
	write( '<script src="./jscripts/DOMhelper.js"></script>' );
	write( '<script src="./jscripts/conference.js"></script>' )
	write( '<script src="./jscripts/profiles.js"></script>' );
	write( '<script src="./jscripts/jquery.js"></script>' );
	write( '<script src="./jscripts/photoslider.js"></script>' );
	write( '<script src="./jscripts/sendfromform.js"></script>' );
	write( '<script src="./jscripts/bbs.js"></script>' );
	close();
}
/* ------------------

	Menu項目について

	----------------*/
// 追加、メニュー項目へ
function add_menu( parentobj, name, data, desc ){
	// マージン
	var menuitem_blank = document.createElement( 'td' );
		setclass(	menuitem_blank , 'menu_blank' );
		setHTML( 	menuitem_blank , "　" );
	parentobj.appendChild( menuitem_blank );
	// 新規項目
	var menuitem = document.createElement( 'td' );
		setclass(	menuitem , 'menu' );
		setid( 		menuitem , menu_identifier + data );
		setHTML( 	menuitem , name );
		setTitle(	menuitem , desc );
		setEvent(	menuitem , 'onclick' , 'change_main(\"' + data + '\");' );
	parentobj.appendChild( menuitem );	
}
/* ------------------

	SubMenu項目について

	----------------*/
// 追加、サブメニュー項目へ
function add_submenu( parentobj, isparent, name, data ,desc ){ 
	if ( isparent ){
		var submenu_parent = document.createElement( 'div' );
			setid(		submenu_parent , submenu_parent_identifier + data );
			setclass(	submenu_parent , 'submenu_parent' );
			setHTML(	submenu_parent , name );
			setEvent(	submenu_parent , 'onclick' , 'change_main(\"' + data + '\");' );
			setTitle(	submenu_parent , desc );
		parentobj.appendChild( submenu_parent );
		// 子メニューをまとめるDIV
		var panel = document.createElement( 'div' );
			setclass(	panel	,	"panel" );
		submenu_parent.appendChild( panel );
		return panel;
	}else{
		// 子メニューを配置
		var submenu;
		submenu	= document.createElement( 'div' );
		setHTML( submenu , name );
		setclass(	submenu , "submenu" );
		setid	(	submenu , submenu_identifier + data );
		setEvent(	submenu , 'onclick' , 'change_main2(\"' + data + '\");' );
		setTitle(	submenu , desc );
		parentobj.appendChild( submenu );
	}
}
// コールバック関数。ＸＭＬ解析部
function im_oncomplete( request ){
	//parents
	var menu = document.getElementById( "menus" );
	var submenus = document.getElementById( "submenus" ) , node, panel;
	// xml and nodes
	var xmlobj = request.responseXML.documentElement;
	var root = xmlobj.childNodes;
	// counters
	var i = 0 , j = 0;
	// Information
	var hassubmenu , name, data , desc ;

	for ( i = 0 ; i < root.length ; i++ ){
		// ノードへのショートカット
		node = root.item(i);
		// テキストオブジェクトを回避
		if ( node.nodeType == 3 ) continue;
		// 親メニューを構築。共通属性の取得
		name = node.nodeName;
		desc = node.getAttribute( "desc" );
		// サブメニューを保持しているか？
		hassubmenu = node.getAttribute( "submenu" );
		if ( hassubmenu ){
			// サブメニューを持つ
			var subnode =  getTopNode( node );
			data = getNodeValue( subnode , "data" );
		}else{
			// サブメニューを持たない
			data = getNodeValue( node , "data" );
		}
		add_menu( menu, name , data , desc );
		panel = add_submenu( submenus , true, name, data, desc );
		// サブメニューを構築
		if ( hassubmenu ){
			var subnodes = node.childNodes , subnode;
			for ( j = 0 ; j < subnodes.length; j++ ){
				subnode = subnodes.item(j);
				if ( subnode.nodeType == 3 ) continue;
				name = subnode.tagName;
				desc = subnode.getAttribute( "desc" );
				data = getNodeValue( subnode , "data" );
				add_submenu( panel , false , name , data , desc );
			}
		}
	}
}
/* ------------------

	Menu項目の動的変更について

	----------------*/
function change_submenu( url ){
	var submenus =  getNodesFromElement( "submenus" ), submenu_parent=null , panel , submenu;
	var vid,vclass;
	// counter
	var i;
	
	// submenu_parentから適当なものを探す
	for ( i = 0 ; i < submenus.length ; i++ ){
		submenu_parent = submenus.item(i);
		vclass = submenu_parent.getAttribute( 'className' );
		if ( vclass == "submenu_parent_selected" )
			break;
	}
	if ( submenu_parent == null )return;
	panel = submenu_parent.childNodes.item(1).childNodes;
	for ( i = 0 ; i < panel.length ; i++ ){
		submenu = panel.item(i);
		vid = submenu.getAttribute( "id" );
		// 選択状況によってクラスを変更	
		if ( submenu_identifier + url == vid ){
			setclass( submenu , 'submenu_selected' );
		}else{
			setclass( submenu , "submenu" );
		}
	}
}
function change_menu( url ){
	// Parents
	var menus = getNodesFromElement( 'menus' ), menu;
	var submenus = getNodesFromElement( 'submenus' ) , submenu_parent, panel;
	// counter
	var i;
	// temp vals
	var vid , vclass;
	
	// メニューにおいて
	for ( i = 0 ; i < menus.length ; i++ ){
		menu = menus.item(i);
		// 属性を取得
		vid = menu.getAttribute( 'ID' );
		vclass = menu.getAttribute( 'className' );
		// 空ならとばす。
		if ( vclass == 'menu_blank' )continue;
		// 選択状況によってクラスを変更
		if ( menu_identifier + url == vid ){
			setclass( menu , 'menu_selected' );
		}else{
			setclass( menu , 'menu' );
		}
	}
	
	// サブメニューにおいて
	for ( i = 0 ; i < submenus.length ; i++ ){
		// DIV
		submenu_parent = submenus.item(i);
		if ( submenu_parent.nodeType != 1 )continue;
		vid = submenu_parent.getAttribute( 'id' );
		// panel,子ウインドウ格納
		panel = submenu_parent.childNodes.item(1);
		ispanel = panel.childNodes.length > 0;
		// 選択状況によってクラスを変更	
		if ( submenu_parent_identifier + url == vid ){
			setclass( submenu_parent , 'submenu_parent_selected' );
			if ( ispanel )setclass( panel , "visible" );
		}else{
			setclass( submenu_parent , 'submenu_parent' );
			if ( ispanel )setclass( panel , "invisible" );
		}
	}
	change_submenu( url );
}

function init_menus( ){
	var async = mozilla;
	
	send( "GET" , sitemap , "No Data" , function(){} , im_oncomplete, mozilla );
}
/* ------------------

	Main項目について

	----------------*/
var limitter = 0;
function mc_onchange( readyStateText ){
	document.getElementById( "main" ).innerHTML += readyStateText + "<Br>";
}
function mc_oncomplete( request ){
	document.getElementById( "main" ).innerHTML = request.responseText;
}
function change_main( from ){
	if ( from == "" ){
		from = readCookie( "page" );
		if ( from == "" ){
			from = defaultpage;
		}
	}
	if ( limitter != 1 ){
		document.getElementById( "main" ).innerHTML = "";
		send( "GET" , from , "No Data" , mc_onchange , mc_oncomplete, true );
		change_menu( from );
		writeCookie( "page" , from );
	}
	limitter = 0;
}
function change_main2( from ){
	limitter = 1;
	document.getElementById( "main" ).innerHTML = "";
	send( "GET" , from , "No Data" , mc_onchange , mc_oncomplete, true );
	change_submenu( from );
}
function change_main2_cgi( from , postdat ){
	limitter = 1;
	document.getElementById( "main" ).innerHTML = "";
	send( "POST" , from , postdat , mc_onchange , mc_oncomplete, true );
}
