/*
	汎用グローバルメニュー
*/
if(typeof com=="undefined"){var com=new Object();}
if(typeof com.ehopuro=="undefined"){com.ehopuro=new Object();}
if(typeof com.ehopuro.GlobalMenu=="undefined"){com.ehopuro.GlobalMenu=new Object();}
var o = com.ehopuro.GlobalMenu;

/*
	親メニューアイテム
*/
o.MenuItem = function(title,url,img,linkWindow){
	this._items = new Array();
	if(typeof title != "undefined") this.title = title;
	if(typeof url != "undefined") this.url = url;
	if(typeof img != "undefined") this.image = img;
	if(typeof linkWindow !="undefined" ) this.linkWindow = linkWindow;
	this._id = ++com.ehopuro.GlobalMenu.MenuItem._count;
}
o.MenuItem._count = 0;
var pt = o.MenuItem.prototype = new Object();;
pt.linkWindow = "_self";
pt.title = "";
pt.url = "";
pt.width = 150;
pt.height = 40;
pt.subMenuPosition = 0;
pt.subMenuBorderColor = "#3399ff";
pt.subMenuPadding = 0;
pt.disable = false;
pt.image = "";
/*
pt._imageObj = null;
pt.setImage = function(img){
	this.image = img;
	this._imageObj = new Image();
	this._imageObj.url = this.image;//プリロード
}*/
pt.getId = function(){
	return this._id;
}
pt.addItem = function(item){
	this._items.push(item);
	if(this._items.length==1) item.isFirstItem = true;
}
pt.getItems = function(){
	return this._items.slice();
}
pt.getHTML = function(){
	var s = '';
	//var alt = (this.alt =="") ? '' : ' alt="'+this.alt+'" ';
	s+='<li class="topMenuLi" id="topMenuLi'+this._id+'">\n';
	if(this.disable || this.url==""){
		s+='<a id="menuContent'+this._id+'" class="menuContent" onclick="return false;">'+this.title+'</a>\n';
	}else{
		s+='<a href="'+this.url+'" class="menuContent" id="menuContent'+this._id+'" target="'+this.linkWindow+'">'+this.title+'</a>\n'
	}
	if(this._items.length>0){
		s+='<ul id="subMenuUL'+this._id+'" class ="subMenuUL">\n';
		for(var i=0;i<this._items.length;i++){
			s+=this._items[i].getHTML();
		}
		s+='</ul>\n';
	}
	s+='</li>\n';
	return s;
}
pt.getCSS = function(){
	var img = (this.image=="") ? 'none' : 'url("'+this.image+'")';
	var s = "";
	var cursor = (this.disable || this.url=="") ? "cursor:default;" : "";//リンクが存在するときだけ指カーソルになる
	if(this.disable){
		s += "#menuAll a#menuContent"+this._id+"{display:block;width:"+this.width+"px;height:"+this.height+"px;background-image:"+img+";background-position:0px -"+this.height*2+"px;"+cursor+"}\n";
	}
else{
		s += "#menuAll a#menuContent"+this._id+"{display:block;width:"+this.width+"px;height:"+this.height+"px;background-image:"+img+";background-position:0px 0px;"+cursor+"}\n";
	}


	s += "#menuAll #topMenuLi"+this._id+"{width:"+this.width+"px;height:"+this.height+"px;}";
	if(this._items.length>0){
		var maxWidth = this._getMaxSubMenuWidth();
		var left = this._calcSubMenuPosition();
		var top = this.height + this.subMenuPadding;
		s += "#menuAll #subMenuUL"+this._id+"{width:"+maxWidth+"px;left:"+left+"px;top:"+top+"px;border:1px solid "+this.subMenuBorderColor+";}";
		
		for(var i=0;i<this._items.length;i++){
			s+=this._items[i].getCSS();
		}
	}
	return s;
}
/**
 * 0〜1で指定されるサブメニューの横の位置を計算
 */
pt._calcSubMenuPosition = function(){
	var ratio = this.subMenuPosition*1.03;//微調整
	var x1 = Math.floor(this.width*ratio);
	var x2 = Math.floor(this._getMaxSubMenuWidth()*ratio);
	var n = x1 - x2;
	return n;
}
/**
 * サブメニューの最大横幅を得る
 */
pt._getMaxSubMenuWidth =function(){
	var w = 0;
	for(var i=0;i<this._items.length;i++){
		w = Math.max(w,this._items[i].width);
	}
	return w;
}
pt.setLastItemFlag = function(){
	if(this._items.length>0){
		this._items[this._items.length-1].isLastItem = true;
	}
}

/**
 * サブメニューアイテム
 */
o.SubMenuItem = function(w,title,url,linkWindow){
	this._items = new Array();
	if(typeof w != "undefined") this.width = w;
	if(typeof title != "undefined") this.title = title;
	if(typeof url != "undefined") this.url = url;
	if(typeof linkWindow !="undefined" ) this.linkWindow = linkWindow;
	this._id = ++com.ehopuro.GlobalMenu.SubMenuItem._count;
}
o.SubMenuItem._count = 0;
var pt = o.SubMenuItem.prototype = new Object();
pt.linkWindow = "_self";
pt.url="";
pt.title="";
pt.width = 100;
pt.isFirstItem = false;
pt.isLastItem = false;
pt.textColor = "#0033bb";
pt.dotColor = "#8ab2cc";
pt.bgColor = "#fff";
pt.rollOverBgColor = "#ebfaff";
pt.getId = function(){
	return this._id;
}
pt.getHTML = function(){
	var s = '';
	s+='\t<li class="subMenu" id="subMenu'+this._id+'"><a href="'+this.url+'" id="subMenuContent'+this._id+'" target="'+this.linkWindow+'"><div class="subMenuTitle">'+this.title+'</div></a></li>\n';
	return s;
}
pt.getCSS = function(){
	var kiritorisen = (this.isFirstItem) ? '' : 'border-top: 1px solid '+this.dotColor;
	var s = "";
	s += "#menuAll #subMenu"+this._id+"{background-color: "+this.bgColor+";width:"+this.width+"px;"+kiritorisen+"}\n";
	s += "#menuAll #subMenuContent"+this._id+"{background-color: "+this.bgColor+";color: "+this.textColor+";width:"+this.width+"px;}\n";
	s += "#menuAll #subMenuContent"+this._id+":hover{background-color: "+this.rollOverBgColor+";}\n";

	if(this.isLastItem){
	}
	return s;
}

/**
 * メニュー本体
 */
o.Menu = function(){
	this._items = new Array();
}
var pt = o.Menu.prototype = new Object();
pt.zIndex = null;
pt.addItem = function(item){
	this._items.push(item);
}
pt.rayout = function(id,zIndex){
	if(typeof zIndex != "undefined") this.zIndex = zIndex;
	this._setLastItemFlag();
	
	var el = document.getElementById(id);
	document.write(this.getCSS());
	var source = this.getHTML();
	el.innerHTML = source;
	for(var i=0;i<this._items.length;i++){
		var id = this._items[i].getId();
		this._initMenu("topMenuLi"+id,"subMenuUL"+id);
	}
	if(this.zIndex!=null) el.style.zIndex = this.zIndex;
	
}
pt._setLastItemFlag = function(){
	for(var i=0;i<this._items.length;i++){
		this._items[i].setLastItemFlag();
	}
}
pt.getHTML = function(){
	var s = '';
	s+='<ul id="menuAll">\n';
	for(var i=0;i<this._items.length;i++){
		s += this._items[i].getHTML();
	}
	s+='</ul>\n';
	return s;
}
pt.getCSS = function(){
	var s = "";
	//s+=("<h1>aaa</h1><style type='text/css'>body{background-color:#f0f00f;}</style>");
	s+='<style type="text/css">\n';
	s+='/* <![CDATA[ */\n';
	var o = {};
	//メニュー全体(ulタグ)
	o["#menuAll"] = [
		 'margin: 0px;'
		,'padding: 0px;'
		,'width:'+this._getTotalMenuWidth()+'px;'
		,'font-family:"ＭＳ ゴシック", serif;'
		,'font-size:10px;'
	]

	//,'height:'+this._getMaxMenuHeight()+'px;'
	//メニュー内、全てのリンク
	o["#menuAll a"] = [
		'font-family:"ＭＳ ゴシック", serif;'
		,"text-decoration: none;"
		,"font-size:13px;"
		,"line-height:14px;"
		,"font-weight:normal;"
		,"text-decoration:none;"
	];
	//トップメニューのliタグ共通
	o["#menuAll .topMenuLi"] = [
		 'list-style-type: none;'
		,'display:block;'
		,'float:left;'
		,'margin: 0px;'
		,'padding: 0px;'
		,'position:relative;'
	];
	//トップメニューのaタグ共通
	o["#menuAll .menuContent"] = [
		'display:block;',
		'margin: 0px;',
		'padding: 0px;',
		'border:0px solid;',
		'background-repeat: no-repeat;',
		'text-indent:-9999px'
	];
	
	//サブメニューのulタグ共通
	o["#menuAll .subMenuUL"] = [
		'margin:0px;'
		,'padding:0px;'
		,'visibility:hidden;'
		,'position: absolute;'
		,'background-color:#fff;'/*dotの合間の色*/
	]
	//サブメニューのliタグ共通
	o["#menuAll .subMenu"] = [
		'display:block;'
		,'list-style-type: none;'
		,'margin:0px;'
		,'padding:0px;'
		,'border-bottom: 0px solid;'
		,'border-left: 0px solid;'
		,'border-right: 0px solid;'
	]
	//,'overflow: hidden;'

	o["#menuAll .subMenu a"] = [
		 'display: block;'
		,'margin: 0px;'
		,'padding: 0px 0px;'
	];
	o["#menuAll .subMenu a .subMenuTitle"] = [
		,'margin:0px;'
		,'padding:5px 8px'
	]

	for(var i in o){
		s+=i+"{\n";
		if(o[i] instanceof Array){
			s+=o[i].join("\n");
		}else{
			s+=o[i];
		}
		s+="\n}\n";
	}
	for(var i=0;i<this._items.length;i++){
		s += this._items[i].getCSS();
	}
	s+='/* ]]> */\n';
	s+='</style>\n';
	return s;
}


/**
 * トップメニューのトータル横サイズを得る
 */
pt._getTotalMenuWidth = function(){
	var w = 0;
	for(var i=0;i<this._items.length;i++){
		w += this._items[i].width;
	}
	return w;
}
/**
 * トップメニューの(一番大きい)縦サイズを得る
 */
pt._getMaxMenuHeight = function(){
	var h = 0;
	for(var i=0;i<this._items.length;i++){
		h = Math.max(this._items[i].height,h);
	}
	return h;
}
/**
 * メニュー動作の初期化
 */
pt._initMenu = function(topMenuId,subMenuId){
	var self = this;
    var topMenuLi = document.getElementById(topMenuId);
    var subMenuUl = document.getElementById(subMenuId);
	
    if (subMenuUl == null || topMenuLi == null) return;
	
    topMenuLi.onmouseover = function() {
		subMenuUl.style.visibility = "visible";
    }
	
	topMenuLi.onmouseout = function (e) {
		var target = null;
		if (e){
			//mozzila
			target = e.target; 
		}else if(window.event){
			//IE
			target = window.event.toElement;
		}
		subMenuUl.style.visibility = "hidden";
		return false;
	}
}

delete pt;
delete o;

