/*================================================================================*
 * name   : portal.js
 * access : public
 *================================================================================*/

/*** function list ***
 keywordChanger    : [ ヘッダー ] 検索モジュール用
 piggRandomBnr     : [ 左サイドバー ] 芸能人ピグモジュール用 / 静的Jsonパース
 blognews          : [ メインカラム ] 芸能ブログニュースモジュール用 / XML パース
 portalRankChecker : [ メインカラム ] ランキングチェッカーモジュール用 / XML パース
 powerpush         : [ メインカラム ] ピックアップ下サムネイル用 / XML パース
 xmlParse          : [ メインカラム ] Ameba新登場モジュール用 / XML パース	※(他のページでも使用)
 amestamod2        : [ 右サイドバー ] アメーバスタジオモジュール用 / 静的Jsonパース
 officeList        : [ フッター ] 芸能事務所一覧モジュール用 / XML パース
 json-query        : headにnewURLを追加
 blogimage         : 画像リサイズ
 OfficialBanner    : オフィシャルバナー


 *** Commonの機能について ***
 Common.Request.Ajax         : HTTP通信でページを読み込み
 Common.Control.ArrayShuffle : 配列の順をシャッフル
 Common.Control.QueryTime    : 乱数生成
 Common.Control.EscTag       : エスケープ処理
 Common.Control.ImageResize  : 画像リサイズ用 imgタグにonloadを配置して読み込ませている 画像ﾘｻｲｽﾞ onload、非table式フォトアルバムの画像のリサイズ
 Common.Control.ResizeImage  : 画像リサイズ
 Common.Control.NaviNext     : naviNextﾏｳｽ追従
 Common.Library.TabChanger   : タブ切り替え用ライブラリ


 *** Common関数使用例 ***
 var queryTimer = Common.Control.QueryTimer();
 script.src = newURL[i]+"?"+queryTimer;

 */

/*** function list end ***/

//commonクラス読込
var Common = new common();

/*** jQuery Start ***/
$(function() {

	var queryTimer = Common.Control.QueryTimer();
/*--------------------------------------------------------------------------------*
 * name     : json-query
 * function : headにnewURLを追加
 *--------------------------------------------------------------------------------*/
	(function() {

		var newURL = [Common.Constant.NEWS_JSON()+"news.json", Common.Constant.NEWS_JSON()+"osusume.json"]
		  , newURL_len = newURL.length;

		for (i = 0; i < newURL_len; i++) {
			var script = document.createElement("script");
			script.type = "text/javascript";
			script.src = newURL[i]+"?"+queryTimer;

			var head = document.getElementsByTagName('head');
			head.item(0).appendChild(script);
		}

	})();



/*--------------------------------------------------------------------------------*
 * name     : powerpush
 * function : メインカラム ピックアップ下サムネイル用 / XML パース
 *--------------------------------------------------------------------------------*/
	(function() {

		var objPrm = {};
		objPrm.Url = 'ppush.xml';
		objPrm.Type = 'GET';
		objPrm.DataType ='xml';
		objPrm.Timeout = 5000;
		objPrm.Error = function() {
			$('<li class="xmlError"></li>')
			.html("情報の取得に失敗しました。<br />再読み込みをして表示をお待ちください。")
			.appendTo('#ppushList');
		}
		objPrm.Success = function(xml) {
			var powerpush = $(xml).find('powerpush')
			  , items = $(powerpush).find('blog');

			items = Common.Control.ArrayShuffle(items);
			items = items.slice(0, 10);

			$.each(items, function() {
				var ppush = $(this)
				  , upperText = $(this).find('upperText').text()
				  , link = $(this).find('link').text()
				  , imageurl68 = $(this).find('imageurl68').text();

				$('<li></li>')
				.html("<a href=\""+link+"\"><img alt=\""+upperText+"\" src=\""+imageurl68+"\" height=\"68\" width=\"68\"></a>"
					 +"<p><a href=\""+link+"\" title=\""+upperText+"\">"+upperText+"</a></p>")
				.appendTo('#ppushList');
			});
		}
		Common.Request.Ajax(objPrm);

	})();



/*--------------------------------------------------------------------------------*
 * name     : keywordChanger
 * function : ヘッダー、検索モジュール用
 *--------------------------------------------------------------------------------*/
	(function() {

		var constructor = function(dataKey) {
			this.list = dataKey;
		},

		//xmlからのデータ抽出
		initKeywordChanger = function() {
			var xmlURL = '/pcOfficialKeyword.xml'+'?'+queryTimer;
			var objPrm = {};
			objPrm.Url = xmlURL;
			objPrm.Type = 'GET';
			objPrm.DataType = 'xml';
			objPrm.Timeout = 5000;
			objPrm.Error = function() {
				var searchTop = $('.idx #srchBoxTop')
				  , research = document.getElementById('reSrch');
				research == null || research == undefined ? $(searchTop).css('margin-top', '0px') : (function() { return; } )();
			}
			objPrm.Success = function(xml) { parseXml(xml); };

			Common.Request.Ajax(objPrm);
		},

		parseXml = function(xml) {
			var keyData = $(arguments).find('officialKeyword').find('data')
			  , searchWrap = $('#srchBoxTop')
			  , srchResult = $('#searchResult')
			  , formTxt  = $('#txtBox')
			  , formTxt2 = $('#reSrch #txtBox2')
			  , formSelect = $('#selectBox')
			  , li = '<ul id="keyword"><li class="ttl">人気ワード :</li>';

			//シャッフル用関数にデータを渡して返す
			var rndData = new constructor(keyData);
			rndData = Common.Control.ArrayShuffle(rndData.list);

			var changeKeyword = function(rd) {
				var d = $(rd).slice(0, 1)
				  , w = d.find('keyword').text()
				  , t = d.find('type').text()
				  , type
				  , srchResult_len = srchResult.length
				  , rd_len = rd.length
				  , formSelect_len = formSelect.length;

				if (srchResult_len === 0) {
					for (var i = 0; i < rd_len; i++) {
						formTxt.val(w);
						if(formTxt2) formTxt2.val(w);
					}
				}

				if (formSelect_len !== 0) {
					if (t != 0) {
						type = "blog";
					} else {
						type = "talent";
					}
					document.forms.form_1.searchType.value = type;
				}
				if(searchWrap) { appendKeyword(); }
			},

			appendKeyword = function() {
				var ow = rndData.slice(1);

				$.each(ow, function() {
					var k = $(this).find('keyword').text()
					  , flg = $(this).find('type').text()
					  , reString = Common.Control.EscTag(k);

					flg = (flg !== 0) ? "blog" : "talent";
					li += '<li><a href="#" name="'+flg+'">'+reString+'</a></li>';
				});

				li += '</ul>';

				$(searchWrap).find('form ul').after(li);
				$('#keyword li:last').addClass('last');
				$("#keyword a").click(clickHandler);
			},

			clickHandler = function(e) {
				e.preventDefault();

				var type = $(this).attr("name")
				  , keyword = $(this).text()
				  , formElem = document.forms
				  , form_len = formElem.length;

				for (var i = 0; i < form_len; i++) {
					formElem[i].searchKey.value = keyword;
					if (formElem[i].searchType !== undefined) {
						formElem[i].searchType.value = type;
					}
					formElem[i].submit();
				}
			}
			changeKeyword(rndData);
		}
		initKeywordChanger();

		function ofclfooterModule() {};

		ofclfooterModule.prototype = {
			RankChkRecommend : function() {
				var randomArr = Common.Control.ArrayShuffle(recommend)
				  , r = randomArr.slice(0, 1)
				  , r_len = r.length
				  , recommendLink
				  , feature = document.getElementById('feature');

				for (i = 0; i < r_len; i++) {
					recommendLink = '<p><a href="'+r[i][0]+'" target="_blank">'+r[i][1]+'</a></p>';
				}
				feature.innerHTML = recommendLink;
			}
		}

		function LoadJsonp() {
			//3個のurlを取得
			var OfclfooterModule_ = new ofclfooterModule();
			if ($('#feature').length !== 0) {
				OfclfooterModule_.RankChkRecommend();
			}
		}
		LoadJsonp();

	})();



/*--------------------------------------------------------------------------------*
 * name     : piggRandomBnr
 * function : 左サイドバー 芸能人ピグモジュール用(各ジャンルポータルページでも使用) / 静的Jsonパース
 *--------------------------------------------------------------------------------*/
	(function() {

		var objPrm = {};
		objPrm.Url = Common.Constant.OFCL_PIGG() + "json/screen/portal/officialpigg/official_pigg.json?"+queryTimer+"?callback=?";
		objPrm.Data = null;
		objPrm.Callback = {
			ProtoFunc : callback = function(data) {
				var piggData = Common.Control.ArrayShuffle(data.pigg) //データをシャッフル shuffle()を使用
				  , name
				  , piggId
				  , piggObj = new Image();

				$.each(piggData, function() {
					name = this.name;
					piggId = this.piggId;
				});

				//HTMLにアペンド
				var piggPath = 'http://contents.pigg.ameba.jp/api/user/'+piggId+'/image?part=all&scale=120&background=false&type=gif';
				$(piggObj).attr('src', piggPath).attr('alt', 'このピグだーれだ？').attr('width', '120').attr('height', '140');
				var li = '<li id="piggImg"><a href="/piggdetail/'+piggId+'.html" title="このピグだーれだ？" /></a></li>';
					li +='<li id="piggBtn"><a href="/piggdetail/'+piggId+'.html" title="このピグだーれだ？" class="btnPigg">'
					   + '<img src="http://stat100.ameba.jp/ofcl/img/screen/portal/btn_pigg.png" alt="このピグだーれだ？" width="149" height="38" /></a></li>';
				$('#pigg').html(li);
				$(piggObj).appendTo('#piggImg a');
			}
		}
		Common.Request.GetJson(objPrm);

	})();



/*--------------------------------------------------------------------------------*
 * name     : blognews
 * function : メインカラム 芸能ブログニュースモジュール用 / XML パース
 *--------------------------------------------------------------------------------*/
	(function() {

		var objPrm = {};
		objPrm.Url = '/blognews_mobile_blog.xml';
		objPrm.Type = 'GET';
		objPrm.DataType = 'xml';
		objPrm.Timeout = 5000;
		objPrm.Error = function() {
			$('<li class="xmlError"></li>')
			.html("情報の取得に失敗しました。<br />再読み込みをして表示をお待ちください。")
			.appendTo('#blognewsjs');
		}

		objPrm.Success = function(xml) {

			var blogNewsList = $(xml).find('blognews')
			  , newslist = $(blogNewsList).find('news')
			  , index = 1;

			$.each(newslist, function() {
				var blogNews = $(this)
				  , disp = $(this).find('disp').text()
				  , newflg = $(this).find('new').text()
				  , hotflg = $(this).find('hot').text()
				  , title = $(this).find('title').text()
				  , link = $(this).find('link').text();

				if (disp === '1') {
					if (index < 6) {
						if ((index % 5) === 1) {
							$("<ul id=\"left\" class=\"norlLi\">").appendTo('#blognewsjs');
						}
						if (newflg === '1') {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\" class=\"new\">"+title+"</a>")
							.appendTo('#left');
						} else if (hotflg === '1') {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\" class=\"hot\">"+title+"</a>")
							.appendTo('#left');
						} else {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\">"+title+"</a>")
							.appendTo('#left');
						}
					} else {
						if ((index % 5) === 1) {
							$("<ul id=\"right\" class=\"norlLi\">").appendTo('#blognewsjs');
						}
						if (newflg === '1') {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\" class=\"new\">"+title+"</a>")
							.appendTo('#right');
						} else if (hotflg === '1') {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\" class=\"hot\">"+title+"</a>")
							.appendTo('#right');
						} else {
							$('<li></li>')
							.html("<a href=\""+link+"\" title=\""+title+"\">"+title+"</a>")
							.appendTo('#right');
						}
					}
					index++;
				}
			});
		}
		Common.Request.Ajax(objPrm);

	})();



/*--------------------------------------------------------------------------------*
 * name     : portalRankChecker
 * function : メインカラム ランキングチェッカーモジュール用 / XML パース
 *--------------------------------------------------------------------------------*/
	(function() {

		//コンストラクタ設定
		function RnkChecker(xmlObj, intvl) {
			this.xmlPath = xmlObj;
			this.identified = [
				  { "flag":"accessRnk", "linkUrl":"/ranking/day/accessRankingCategory0-1.html", "linkTitle":"総合ランキング" }
				, { "flag":"newRnk", "linkUrl":"/ranking/day/accessRankingCategory48-1.html", "linkTitle":"新登場ランキング" }
				, { "flag":"trendRnk", "linkUrl":"/ranking/day/officialTrendRanking-1.html", "linkTitle":"急上昇ランキング" }
				, { "flag":"imgrelRnk", "linkUrl":"/ranking/image/realtime1.html", "linkTitle":"画像ランキング" }
			]
			this.interval = intvl;
			this.rnkContent = $('div.rnkDataContent');
			this.tabUI = $('#tabUI > li > a');
			this.count = 0;
			this.timeoutID;
			this.articleDomain = Common.Constant.OFFICIALBLOG_FACE();
			this.statDomain = Common.Constant.ICON_IMG();
		}

		//タブスイッチャー
		RnkChecker.prototype = {
			Error			: Common.Library.TabChanger.Error,
			ReplaceToReader	: Common.Library.TabChanger.ReplaceToReader,
			ClickHandler	: Common.Library.TabChanger.ClickHandler,
			Interval		: Common.Library.TabChanger.Interval,
			TabSwitcher		: Common.Library.TabChanger.TabSwitcher,
			//ajax
			getXml : function(key,index) {
				var self = this
				  , domain = "/xml/"
				  , objName = key;

				var objRankChkPrm = {};
				objRankChkPrm.Url = domain+self.xmlPath[0][objName]+"?"+queryTimer;
				objRankChkPrm.Type = 'GET';
				objRankChkPrm.DataType = 'xml';
				objRankChkPrm.Timeout = 10000;
				objRankChkPrm.Error = function() {
					self.Error(objName,index);
				}
				objRankChkPrm.Success = function(xml) {
					self.CreateHtml(xml,objName,index);
				}
				Common.Request.Ajax(objRankChkPrm);
			},

			//更新日付
			CreatePhotoUptime : function(imgUpdate) {
				//更新時間の設定
				var updateYear = imgUpdate.slice(0, 4)
				  , updateMonth = imgUpdate.slice(5, 7)
				  , updateDay = imgUpdate.slice(8, 10)
				  , updateHour = imgUpdate.slice(11, 13)
				  , update
				  , localDate = new Date()
				  , newDate = new Date(updateYear, updateMonth, updateDay, updateHour)
				  , currentDate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate()+1, newDate.getHours()+1);
				return update = updateDay+"日"+currentDate.getHours()+"時更新";
			},

			//createHtml
			CreateHtml : function(xmlData, objName, index) {

				var self = this, xd = xmlData;
				var SetHtml = function(objName) {
					var objName_ = objName
					  , parentXD = $(xd).find('blog')
					  , rnk
					  , amebaId
					  , nickName
					  , imgUrl
					  , articleLink
					  , xd_len
					  , i
					  , listContent='<ul class="imgLi">'
					  , rankStatus
					  , rankNumber
					  , list
					  , imageRnkXD = $(xmlData).find('ranking')
					  , thumbPath
					  , blogPath
					  , imgArticle
					  , imgThumb
					  , updateContent
					  , updateMonth
					  , updateDay
					  , updateHour
					  , updateTime
					  , imgRankList
					  , imgRank_h3
					  , imgRankListArr = [];

					imageRnkXD = imageRnkXD.slice(0,10);

					var imageRnkXD_len = imageRnkXD.length;

					xd_len = (imageRnkXD_len === 0) ? parentXD.length : imageRnkXD.length;

					for (i = 0; i < xd_len; i++) {

						if (imageRnkXD_len === 0) {
							//総合・急上昇・新登場
							rank = $(parentXD[i]).find('rank').text();
							amebaId = $(parentXD[i]).find('ameba_id').text();
							nickName = $(parentXD[i]).find('nick_name').text();
							replaceName = self.ReplaceToReader(Common.Control.EscTag(nickName));

							articleLink = $(parentXD[i]).find('articlelink').text();
							updateMonth = $(xd).find('blogs').attr('upmonth');
							updateDay   = $(xd).find('blogs').attr('upday');

							if (rank <= 3) {
								imgUrl = $(parentXD[i]).find('profile_img_url68').text();
							} else {
								imgUrl = $(parentXD[i]).find('profile_img_url').text();
							}

							updateContent = '<span class="update">'+updateMonth+'月'+updateDay+'日更新</span>';
							thumbPath = '<a href="http://ameblo.jp/'+amebaId+'/" title="'+nickName+'" class="thumbBox viewCount"><img src="'+self.articleDomain+''+imgUrl+'" alt="nickName" /></a>';
							blogPath  = '<a href="http://ameblo.jp/'+amebaId+'/" title="'+nickName+'" class="viewCount">'+replaceName+'</a>';

						} else {
							//画像ランキング
							rank = $(imageRnkXD[i]).find('rank').text();
							amebaId  = $(imageRnkXD[i]).find('amebaId').text();
							nickName = $(imageRnkXD[i]).find('upperText').text();
							replaceName = self.ReplaceToReader(Common.Control.EscTag(nickName));

							imgUrl = $(imageRnkXD[i]).find('imageFileUrl').text();
							imgUrl = imgUrl.replace("http://stat001.ameba.jp", "http://official.stat.ameba.jp/imageResizeList");
							imgArticle =  $(imageRnkXD[i]).find('imagePageUrl').text();
							imgUpdate  = $(xmlData).find('targetDate').text();
							updateTime = self.CreatePhotoUptime(imgUpdate);

							var dotStr = imgUrl.lastIndexOf(".")
							  , imgUrl_len = imgUrl.length
							  , imgUrlPath = imgUrl.substr(0, dotStr)
							  , imgUrlExtension = imgUrl.substr(dotStr, imgUrl_len);

							if (rank <= 3) {
								imgUrl = imgUrlPath+"_68"+imgUrlExtension;
								imgThumb = '<img src="'+imgUrl+'" alt="'+nickName+'" width="68" />';
							} else {
								imgUrl = imgUrlPath+"_48"+imgUrlExtension;
								imgThumb = '<img src="'+imgUrl+'" alt="'+nickName+'" width="48" />';
							}

							imgThumb = $(imgThumb).each(function() {

								var orgH
								  , this_ = $(this)
								  , maxHeight
								  , newThumbImg = newImg()
								  , timer = setInterval(function() {
										if (newThumbImg.complete) {
											orgH = newThumbImg.height;
											if (this_.attr("width") === "68") {
												if (orgH < "68") {
													maxHeight = "68";
													minPadding(orgH, maxHeight, this_);
												}
											} else {
												if (orgH < "48") {
													maxHeight = "48";
													minPadding(orgH, maxHeight, this_);
												}
											}
											clearInterval(timer);
										}
									}
								  , 100);

								function newImg() {
									NewThumbImg = new Image();
									NewThumbImg.src = imgUrl;
									return NewThumbImg;
								}

								function minPadding(orgH, maxHeight, this_) {
									var minImgTop = Math.abs(Math.round((maxHeight - (orgH * 1)) / 2)) + "px";
									return $(this_).css("padding-top", minImgTop);
								}
							});

							thumbPath = '<a href="'+imgArticle+'" class="thumbBox_imgRank viewCount"></a>';
							updateContent = '<span class="update">'+updateTime+'</span>';
							blogPath  = '<a href="'+imgArticle+'" title="'+nickName+'" class="viewCount">'+replaceName+'</a>';
							imgRankList = $('<li />').append(thumbPath);
							$(imgRankList).find(".thumbBox_imgRank").append(imgThumb);
						}

						if (rank <= 3) {
							var n = i + 1;
							var classNameRank = "rank"+n+" top3";
							listContent += '<li class=\"'+classNameRank+'\">';
							$(imgRankList).addClass(classNameRank);
						} else {
							listContent += '<li>';
						}

						switch (rank) {
							case "1" : rankNumber = '<img alt="1位" src="'+self.statDomain+'rank1st_02.gif" />'; break;
							case "2" : rankNumber = '<img alt="2位" src="'+self.statDomain+'rank2nd_02.gif" />'; break;
							case "3" : rankNumber = '<img alt="3位" src="'+self.statDomain+'rank3rd_02.gif" />'; break;
							default  : rankNumber = '<img alt="" src="'+self.statDomain+'rank'+rank+'.gif" />';
						}

						if (objName_ === self.identified[0].flag || objName_ === self.identified[1].flag) {

							var beforeRnk = parseInt($(parentXD[i]).find('rank_before').text())
							  , numRank = parseInt(rank);

							if (numRank < beforeRnk) {
								rankStatus = '<img width="12" height="12" src="'+self.statDomain+'rank_up2.gif" alt="up↑" />';
							} else if (numRank > beforeRnk) {
								rankStatus = '<img width="12" height="12" src="'+self.statDomain+'rank_down2.gif" alt="down↓" />';
							} else {
								rankStatus = '<img width="12" height="12" src="'+self.statDomain+'rank_stay2.gif" alt="stay→" />';
							}

							list = '<span class="ranking">'+rankNumber+''+rankStatus+'</span>';

						} else {
							list = '<span class="ranking">'+rankNumber+'</span>';

							if (objName_ === self.identified[3].flag) {
								list = '<span class="ranking">'+rankNumber+'</span>';
								imgRank_h3 = '<h3>'+list+''+blogPath+'</h3>';
								imgRankList.append(imgRank_h3);
								imgRankListArr.push(imgRankList[0]);
							}
						}
						listContent += thumbPath;
						listContent += '<h3>'+list+''+blogPath+'</h3></li>';
					}

					if (self.identified[index].flag !== self.identified[3].flag) {
						var contentId = "#"+self.identified[index].flag;
						listContent += '</ul><p class="detailLink"><a href="'+self.identified[index].linkUrl+'">'+self.identified[index].linkTitle+'を<br />もっと見る</a></p>';
						$(contentId).html(listContent);
						$(contentId).find('ul').before(updateContent);
					} else {
						var contentId = "#"+self.identified[index].flag
						  , imgRank_ul = $('<ul class="imgLi"></ul>')
						  , detailLink = '<p class="detailLink"><a href="'+self.identified[index].linkUrl+'">'+self.identified[index].linkTitle+'を<br />もっと見る</a></p>'
						  , i
						  , list_len = imgRankListArr.length;

						for (var i = 0; i < list_len; i++) {
							imgRank_ul = $(imgRank_ul).append(imgRankListArr[i]);
						}
						$(contentId).html(imgRank_ul).append(detailLink);
						$(contentId).find('ul').before(updateContent);
					}
				}

				if (objName === self.identified[index].flag) {
					SetHtml(objName);
				}
			}
		}

		//初期設定(1個目のコンテンツを表示にする)
		function tabInit(){
			TabChange = new RnkChecker(
				[{
				  "accessRnk" : "rankingChecker_0.xml"
				, "newRnk"    : "rankingChecker_48.xml"
				, "trendRnk"  : "rankingChecker_up.xml"
				, "imgrelRnk" : "ofcImgrelRankingHourly_20.xml"
				}]
				, "10000"
			);
			var xml_len = TabChange.xmlPath[0].length, key, index = 0;
			for (key in TabChange.xmlPath[0]) {
				TabChange.getXml(key,index);
				index ++;
			}
			TabChange.tabUI.first().addClass("active");
			TabChange.rnkContent.first().show();
			TabChange.ClickHandler(TabChange.rnkContent);
			TabChange.Interval();
		}
		tabInit();

	})();



/*--------------------------------------------------------------------------------*
 * name     : amestamod2
 * function : 右サイドバー アメーバスタジオモジュール用 / 静的Jsonパース
 *--------------------------------------------------------------------------------*/
	(function() {

		//コンストラクタ設定 getJson
		function AmestaMod(u1) {
			var self = this;
			self.url = u1;
			self.chatCountFlag = ["おしゃべり中", "満室", "ピックアップ","スケジュール"];
			self.thumbUrl = Common.Constant.OFFICIALBLOG_FACE();
		}

		AmestaMod.prototype = {
			GetAjax: function() {
				var self = this;
				var objPrm = {};
				objPrm.Url = self.url + "?" + queryTimer + "?callback=?";
				objPrm.Data = null;
				objPrm.Callback = {
					ProtoFunc: portal_amestaMod = function(jsonData) {
						var onAir = jsonData.onair
						  , pickUp = jsonData.pickup
						  , schedule = jsonData.schedule
						  , dataArr = [pickUp, schedule];
						self.CreateHtmlMainCol(onAir, pickUp, schedule);
					}
				}
				Common.Request.GetJson(objPrm);
			},

			ReplaceToReader : function(string, n) {
				var maxlen = n
				  , threeReader = "..."
				  , self = string
				  , self_len = self.length;

				//console.log(self);
				if (maxlen < self_len) {
					self = self.slice(0, maxlen) + threeReader;
				}
				return self;
			},

			CreateStartTime : function(day, time) {
				var day_ = day
				  , time_ = time;
				day_ = day_.replace("2011-", "");
				day_ = day_.replace("-", "/");
				return day_ + ' ' + time_ + '～';
			},

			CreateMainAmestaCol : function(contents) {
				var contents_ = contents
				  , amestaMdl = '<div class="mdl clr" id="amestaMdl">';
				amestaMdl += '<h2>ただ今おしゃべり中の有名人<a href=\"http://www.amebastudio.jp\">Ameba Studio</a></h2><div id=\"amestaMdl_inner\">'+contents_+'</div></div>';
				$("#realtimeBlogFlashMdl").before(amestaMdl);
			},

			CreateHtmlMainCol : function(data1, data2, data3) {
				if (data1.length === 0) { return this.EmptyData(); }
				var self = this
				  , obj_ = data1
				  , obj_len = obj_.length
				  , maxNum = 3
				  , count = 2
				  , onAirArr = []
				  , pickupArr = []
				  , scheduleArr = []
				  , onAir_len
				  , pickup_len
				  , schedule_len
				  , castUrl
				  , name_
				  , amebaId
				  , chatTitle
				  , chatCount
				  , chatBoard
				  , startDay
				  , startTime
				  , chatStatus
				  , i
				  , ulTag = ''
				  , liTag = ''
				  , divTag = ''
				  , statusElement
				  , leftElem = ''
				  , rightElem = ''
				  , detailLink = '<p class=\"detailLink\"><a title=\"Ameba Studioの番組表をもっと見る\" href=\"http://www.amebastudio.jp\">もっと見る</a></p>';

				if (obj_len === 0) { return false; }

				for (i = 0; i < obj_len; ++i) {

					var chatStatusFlag = obj_[i].chatcount;

					if (self.chatCountFlag[0] === chatStatusFlag || self.chatCountFlag[1] === chatStatusFlag) {
						onAirArr.push(obj_[i]);
						onAirArr = Common.Control.ArrayShuffle(onAirArr);
						count--;
					} else if (self.chatCountFlag[2] === chatStatusFlag) {
						pickupArr.push(obj_[i]);
					} else if (self.chatCountFlag[3] === chatStatusFlag) {
						scheduleArr.push(obj_[i]);
					}
				}

				pickup_len = pickupArr.length;
				schedule_len = scheduleArr.length;

				if (pickup_len !== 0) {
					pickupArr = Common.Control.ArrayShuffle(pickupArr);
				}

				onAirArr = onAirArr.slice(0, maxNum);
				onAir_len = onAirArr.length;

				if (onAir_len === 1) {
					//オンエアー中が1件の場合、ピックアップとスケジュールを足す
					onAirArr.push(pickupArr[0]);
					onAirArr.push(scheduleArr[0]);
					for (var i = 2; i >= count; --i) {
						data3.unshift(scheduleArr[i]);
					}
				} else if (onAir_len === 2) {
					//オンエアー中が2件の場合、ピックアップを足す
					onAirArr.push(pickupArr[0]);
					for (var i = 2; i >= count; --i) {
						data3.unshift(scheduleArr[i]);
					}
				} else if (onAir_len === 0 || onAir_len === 3) {
					//オンエアー中が0件の場合、終了
					for (var i = 2; i >= 0; --i) {
						data2.unshift(pickupArr[i]);
						data3.unshift(scheduleArr[i]);
					}
					if (onAir_len === 0) {
						self.CreateHtmlSideBarCol(data2, data3);
						return false;
					}
				}

				for (i = 0; i < maxNum; ++i) {

					castUrl = onAirArr[i].castUrl;
					altName = onAirArr[i].name;
					name_ = self.ReplaceToReader(onAirArr[i].name, 10);
					chatStatusFlag = onAirArr[i].chatcount;
					amebaId = onAirArr[i].amebaId;
					chatTitle = onAirArr[i].chattitle;
					chatBoard = self.ReplaceToReader(onAirArr[i].chatboard, 18);
					day  = onAirArr[i].startday;
					time = onAirArr[i].starttime;

					switch (chatStatusFlag) {
						case self.chatCountFlag[0]:
							chatStatus = "talking";
							chatCount = onAirArr[i].chatcount;
							break;
						case self.chatCountFlag[1]:
							chatStatus = "noVacancy";
							chatCount = onAirArr[i].chatcount;
							break;
						case self.chatCountFlag[2]:
							chatStatus = "pickup";
							chatCount = onAirArr[i].chatcount;
							break;
						case self.chatCountFlag[3]:
							chatStatus = "startTime";
							chatCount = self.CreateStartTime(day,time);
							break;
					}

					statusElement = '<p class=\"'+chatStatus+' status\"><span>'+chatCount+'</span></p>';
					leftElem  = '<p class="leftList"><a href=\"'+castUrl+'\" class="thumb"><img width="68" height="68" src=\"'+self.thumbUrl+''+amebaId+'_68.jpg\" alt=\"'+altName+'\"></a><a href=\"'+castUrl+'\" class="talentName">'+name_+'</a></p>';
					rightElem = '<h3><a href=\"'+castUrl+'\" class="programName">'+chatTitle+'</a></h3><p class="programDetail">'+chatBoard+'</p>';
					divTag = '<div class="box">'+leftElem+rightElem+'</div>';

					liTag += (i != (maxNum-1)) ? '<li>' : '<li class=\"last\">';
					liTag += statusElement + divTag + '</li>';
				}

				ulTag = '<ul>'+liTag+'</ul>'+detailLink;

				self.CreateMainAmestaCol(ulTag);
				self.CreateHtmlSideBarCol(data2, data3);
			},

			CreateHtmlSideBarCol : function (data1, data2) {

				var data1_len = data1.length
				  , data2_len = data2.length;

				if (data1_len === 0 && data2_len === 0) return this.EmptyData();
				var self = this
				  , data1 = Common.Control.ArrayShuffle(data1)
				  , objPickup_ = data1.slice(0, 1)
				  , objSchedule_ =  data2.slice(0, 2)
				  , arg_len = arguments.length
				  , objArr = [objPickup_, objSchedule_]
				  , castUrl
				  , name_
				  , amebaId
				  , chatCount
				  , startDay
				  , startTime
				  , chatStatus
				  , i
				  , content_ = ''
				  , flagment0_ = ''
				  , flagment1_ = ''
				  , fArray_ = []
				  , ulTag = '<ul class="amestaSideList">'
				  , idName_ = ["amestaPickup","amestaSchedule"]
				  , liTag = ''
				  , li2_ = ''
				  , divTag = ''
				  , statusElement
				  , leftElem = ''
				  , rightElem = ''
				  , detailLink_ = '<p class=\"detailLink\"><a title=\"Ameba Studioの番組表をもっと見る\" href=\"http://www.amebastudio.jp\">もっと見る</a></p>'
				  , key;

				for (i = 0; i < arg_len; ++i) {

					var objArr_len = objArr[i].length;

					for (var j = 0; j < objArr_len; ++j) {

						castUrl = objArr[i][j].castUrl;
						altName = objArr[i][j].name;
						name_ = objArr[i][j].name;
						chatStatusFlag = objArr[i][j].chatcount;
						amebaId = objArr[i][j].amebaId;
						chatTitle = objArr[i][j].chattitle;
						startDay = objArr[i][j].startday;
						startTime = objArr[i][j].starttime;
						chatBoard = objArr[i][j].chatboard;
						day = objArr[i][j].startday;
						time = objArr[i][j].starttime;
						startTime = self.CreateStartTime(day,time);

						leftElem  = '<a href=\"'+castUrl+'\" class="thumb"><img width="68" height="68" src=\"'+self.thumbUrl+''+amebaId+'_68.jpg\" alt=\"'+altName+'\"></a>';
						rightElem = '<p class=\"time rightCol\">'+startTime+'</p><h4 class=\"programTitle rightCol\"><a href=\"'+castUrl+'\">'+name_+'</a></h4><a href=\"'+castUrl+'\" class="programDetail">'+chatTitle+'</a>';
						liTag  = '<li>'+leftElem+rightElem+'</li>';

						if (i === 0) {
							flagment0_ += liTag;
						} else {
							flagment1_ += liTag;
						}
					}
					content_ += (i === 0) ? '<h3 id=\"'+idName_[i]+'\">ピックアップ</h3>'+ulTag+flagment0_+'</ul>': '<h3 id=\"'+idName_[i]+'\">スケジュール</h3>'+ulTag+flagment1_+'</ul>'+detailLink_;
				}
				$("#amestaSideMdl").append(content_);
			},
			EmptyData : function() { return false; }
		}
		function Amesta() {
			var amesta = new AmestaMod("http://stat100.ameba.jp/amesta/portal_amestaMod.json");
			amesta.GetAjax();
		}
		Amesta();

	})();




/*--------------------------------------------------------------------------------*
 * name     : xmlParse
 * function : メインカラム Ameba新登場モジュール用(他のページでも使用) / XML パース
 *--------------------------------------------------------------------------------*/
	(function() {

		var xmlGenre = "ofc_rank_daily_"+i+".xml";
		var xmlGenreArr =[
				{ genre: "女性タレント", genreId: "1", genreUrl: "/ranking/day/accessRankingType2-1.html" },
				{ genre: "男性タレント", genreId: "8", genreUrl: "/ranking/day/accessRankingType1-1.html" },
				{ genre: "アイドル", genreId: "2", genreUrl: "/ranking/day/accessRankingCategory2-1.html" },
				{ genre: "グラビアアイドル", genreId: "3", genreUrl: "/ranking/day/accessRankingCategory3-1.html" },
				{ genre: "女優", genreId: "4", genreUrl: "/ranking/day/accessRankingCategory4-1.html" },
				{ genre: "女性モデル", genreId: "5", genreUrl: "/ranking/day/accessRankingCategory5-1.html" },
				{ genre: "ママブロガー", genreId: "6", genreUrl: "/ranking/day/accessRankingCategory6-1.html" },
				{ genre: "女子アナ/キャスター", genreId: "7", genreUrl: "/ranking/day/accessRankingCategory7-1.html" },
				{ genre: "男性モデル", genreId: "10", genreUrl: "/ranking/day/accessRankingCategory10-1.html" },
				{ genre: "スポーツ", genreId: "17", genreUrl: "/ranking/day/accessRankingCategory17-1.html" },
				{ genre: "お笑い", genreId: "12", genreUrl: "/ranking/day/accessRankingCategory12-1.html" },
				{ genre: "MUSIC", genreId: "13", genreUrl: "/ranking/day/accessRankingCategory13-1.html" },
				{ genre: "プロフェッショナル", genreId: "24", genreUrl: "/ranking/day/accessRankingCategory24-1.html" },
				{ genre: "俳優", genreId: "9", genreUrl: "/ranking/day/accessRankingCategory9-1.html"  },
				{ genre: "野球", genreId: "18", genreUrl: "/ranking/day/accessRankingCategory18-1.html" },
				{ genre: "サッカー", genreId: "19", genreUrl: "/ranking/day/accessRankingCategory19-1.html" },
				{ genre: "Visual系", genreId: "16", genreUrl: "/ranking/day/accessRankingCategory16-1.html" },
				{ genre: "HIPHOP", genreId: "14", genreUrl: "/ranking/day/accessRankingCategory14-1.html" },
				{ genre: "声優", genreId: "22", genreUrl: "/ranking/day/accessRankingCategory22-1.html" },
				{ genre: "政治家", genreId: "40", genreUrl: "/ranking/day/accessRankingCategory40-1.html" },
				{ genre: "平成生まれ", genreId: "62", genreUrl: "/ranking/day/accessRankingCategory62-1.html" },
				{ genre: "女子力アップ", genreId: "63",	 genreUrl: "/ranking/day/accessRankingCategory63-1.html" },
				{ genre: "AB型女子", genreId: "78", genreUrl: "/ranking/day/accessRankingCategory78-1.html" },
				{ genre: "小学生モデル", genreId: "83", genreUrl: "/ranking/day/accessRankingCategory83-1.html" },
				{ genre: "韓流", genreId: "37", genreUrl: "/ranking/day/accessRankingCategory37-1.html" }
				];

		var xmlGenreArr_len = xmlGenreArr.length;

		for (var i = 0; i < xmlGenreArr_len; i++) {
			var rnd = Math.floor(Math.random() * xmlGenreArr_len)
			  , genreRnd = xmlGenreArr[rnd].genre
			  , genreIdRnd = xmlGenreArr[rnd].genreId
			  , genreUrlRnd = xmlGenreArr[rnd].genreUrl;
		};

		var objPrm = {};
		objPrm.Url = '/xml/ofc_rank_daily_' + genreIdRnd + '.xml';
		objPrm.Type = 'GET';
		objPrm.DataType = 'xml';
		objPrm.Timeout = 5000;
		objPrm.Error = function () {
			$('<p class="xmlError">')
			.html('情報の取得に失敗しました。<br />再読み込みをして表示をお待ちください。')
			.appendTo($('#genreRnkList'));
		};
		objPrm.Success = function (xml) {
			var wrap = $('<dl class="rnkLi clr">').appendTo($('#genreRnkList'));

			$(xml).find('blog').each(function (i) {

				var rank = $(this).find('rank').text()
				  , nickName = $(this).find('nick_name').text()
				  , amebaId = $(this).find('ameba_id').text()
				  , rankBefore = $(this).find('rank_before').text();

				var profileUrl = Common.Constant.OFFICIALBLOG_FACE() + amebaId + '_68.jpg'
				  , amebloUrl = 'http://ameblo.jp/' + amebaId + '/';

				var rankUpImg   = '<img width="12" height="12" alt="前日比ランキングアップ" src="' + Common.Constant.ICON_IMG() + 'rank_up2.gif" />'
				  , rankStayImg = '<img width="12" height="12" alt="前日比ランキングステイ" src="' + Common.Constant.ICON_IMG() + 'rank_stay2.gif" />'
				  , rankDownImg = '<img width="12" height="12" alt="前日比ランキングダウン" src="' + Common.Constant.ICON_IMG() + 'rank_down2.gif" />';

				var dayBeforeImg;
				if (rank < rankBefore) {
					dayBeforeImg = rankUpImg;
				} else if (rank == rankBefore) {
					dayBeforeImg = rankStayImg;
				} else if (rank > rankBefore) {
					dayBeforeImg = rankDownImg;
				}

				if (nickName.length > 10) {
					var nickNameSlice = nickName.substr(0,8);
					var nickName = nickNameSlice+'…';
				}

				var dtCont1 = $('<a />').attr('href', amebloUrl).html('<img src="' + profileUrl + '" width="68" height="68" />')
				  , dtCont2 = $('<a />').attr('href', amebloUrl).html('<img src="' + profileUrl + '" width="48" height="48" />')
				  , ddContH3Rnk1 = $('<h3 />').html('<span class="ranking"><img src="' + Common.Constant.ICON_IMG() + 'rank1st_02.gif" alt="' + rank + '位" /></span>' + dayBeforeImg + '<a href="' + amebloUrl + '">' + nickName +'</a>')
				  , ddContH3Rnk2 = $('<h3 />').html('<span class="ranking"><img src="' + Common.Constant.ICON_IMG() + 'rank2nd_02.gif" alt="' + rank + '位" /></span>' + dayBeforeImg + '<a href="' + amebloUrl + '">' + nickName +'</a>')
				  , ddContH3Rnk3 = $('<h3 />').html('<span class="ranking"><img src="' + Common.Constant.ICON_IMG() + 'rank3rd_02.gif" alt="' + rank + '位" /></span>' + dayBeforeImg + '<a href="' + amebloUrl + '">' + nickName +'</a>')
				  , ddContH4 = $('<h4 />').html('<span class="ranking">' + rank + '位</span>' + dayBeforeImg + '<a href="' + amebloUrl + '">' + nickName +'</a>');

				switch (i) {
					case 0 :
						$('<dt class="rnk1">').append(dtCont1).appendTo(wrap);
						$('<dd class="rnk1">').append(ddContH3Rnk1).appendTo(wrap);
						break;
					case 1 :
						$('<dt class="rnk2">').append(dtCont1).appendTo(wrap);
						$('<dd class="rnk2">').append(ddContH3Rnk2).appendTo(wrap);
						break;
					case 2 :
						$('<dt class="rnk3">').append(dtCont1).appendTo(wrap);
						$('<dd class="rnk3">').append(ddContH3Rnk3).appendTo(wrap);
						break;
					default :
						$('<dt>').append(dtCont2).appendTo(wrap);
						$('<dd>').append(ddContH4).appendTo(wrap);
				}

				if (i === 9) { return false; }
			});

			$('<p class="detailLink">')
			.html('<a href="' + genreUrlRnd + '" title="' + genreRnd +'ランキングをもっと見る">もっと見る</a>')
			.appendTo($('#genreRnk'));
		};
		Common.Request.Ajax(objPrm);

		$('#genreTitle').html(genreRnd + 'ランキング');
	})();



/*--------------------------------------------------------------------------------*
 * name     : officeList
 * function : フッター 芸能事務所モジュール用 / XML パース
 *--------------------------------------------------------------------------------*/
	(function() {

		var objPrm = {};
		objPrm.Url = '/office_xml/officeList.xml' + '?' + queryTimer;
		objPrm.Type = 'GET';
		objPrm.DataType = 'xml';
		objPrm.Timeout = 1000;
		objPrm.Error = function() {
			$('<p class="xmlError">').html('情報の取得に失敗しました。<br />再読み込みをして表示をお待ちください。').appendTo($('#officeLi'));
		}
		objPrm.Success = function(xml) {
			var articleLen = $(xml).find('article').length
			  , articleArr = new Array();

			$(xml).find('article').each(function(idx) {
				var articleObj = Object();
				articleObj.img  = $(this).find('item').text();
				articleObj.name = $(this).find('name').text();
				articleObj.link = $(this).find('link').text();
				articleArr[idx] = articleObj;
			});

			articleArr = Common.Control.ArrayShuffle(articleArr);

			var officeUl = $('<ul class="clr">').appendTo($('#officeLi'));

			var articleSliceArr = articleArr.slice(0,10)
			  , articleSliceArr_len = articleSliceArr.length;

			for (i = 0; i < articleSliceArr_len; i++){
				var officeNum  = articleSliceArr[i].img
				  , officeName = articleSliceArr[i].name
				  , officeUrl  = articleSliceArr[i].link
				  , officeBnrPath = 'http://stat.ameba.jp/ofcl/img/screen/portal/bnr/bnr_office_' + officeNum + '.gif'
				  , officeAnchor = $('<a />').attr('href', officeUrl).html('<img src="' + officeBnrPath + '" width="177" height="34" alt="' + officeName +'" />');

				var rmndr = (i + 1) % 5;

				if (rmndr === 0) {
					$('<li class="last">').append(officeAnchor).appendTo(officeUl);
				} else {
					$('<li>').append(officeAnchor).appendTo(officeUl);
				};
			};
		}
		Common.Request.Ajax(objPrm);
	})();



});

/*** jQuery End ***/

/*--------------------------------------------------------------------------------*
 * name     : OfficialBanner
 * function :
 *--------------------------------------------------------------------------------*/
window.onload = function() {
	var self = this
	  , li
	  , nowBanner = null
	  , bannerList = null
	  , creteFlag = false
	  , randomNum = -1
	  , jsonData = []
	  , reRecommend;

	this.init = function() {
		this.AD_LIST;
		this.recommend;

		var recommend_len = recommend.length;

		if (typeof AD_LIST && typeof recommend === "undefined") { return; }

		if(AD_LIST.length && recommend_len <= 0) { return; }

		for (var i = 0; i < recommend_len; i++) {
			ramNum1 = Math.floor(Math.random()*recommend_len);
			ramNum2 = Math.floor(Math.random()*recommend_len);
			n = recommend[ramNum1];
			recommend[ramNum1] = recommend[ramNum2];
			recommend[ramNum2] = n;
		}
		reRecommend = recommend.slice(0,3);

		Array.prototype.push.apply(AD_LIST, reRecommend);
		this.nowBanner = document.getElementById("nowBanner");
		this.bannerList = document.getElementById('bannerList');

		if (this.nowBanner === null) { return; }

		this.shuffleBanner();
		this.createList();
		this.nowBanner.onmouseover = function() { self.openList(); };
		this.bannerList.onmouseover = function() { self.openList(); };
		this.bannerList.onmouseout = function() { self.closeList(); };
	}

	this.shuffleBanner = function() {
		this.randomNum = Math.floor(Math.random()*AD_LIST.length);
		this.nowBanner.appendChild(this.setA(AD_LIST[this.randomNum]));
	}

	this.openList = function() {
		if(this.creteFlag === false) { this.createList(); }
		this.show(true);
	}

	this.closeList = function() {
		this.show(false);
	}

	this.createList = function() {
		this.bannerList.innerHTML = "";

		var ulBlog = document.createElement("ul")
		  , ulRecommend = document.createElement("ul")
		  , closebt = document.createElement("p");

		closebt.innerHTML = '<a href=\"#\" class="close">閉じる</a>';
		closebt.setAttribute("id", "closebt");
		this.bannerList.appendChild(closebt);
		this.bannerList.appendChild(ulBlog);

		var more = document.createElement("p");
		more.innerHTML='<a href="http://link.ameba.jp/59655/" class="more">もっと見る</a>';
		this.bannerList.appendChild(more);
		this.bannerList.appendChild(ulRecommend);

		ulBlog.id = "ulBlog";
		ulRecommend.id = "ulRecommend";

		var AD_LIST_len = AD_LIST.length;

		for (var i = 0; i < AD_LIST_len; i++) {
			if (i === this.randomNum) { continue };
			if (!AD_LIST[i]) { continue };
			li = document.createElement("li");
			li.appendChild(this.setB(AD_LIST[i]));

			if (AD_LIST[i][2] === "option_header_news") {
				ulBlog.appendChild(li);
			} else {
				ulRecommend.appendChild(li);
			}
		}
		this.creteFlag = true;
		closebt.onclick = function() { self.closeList(); return false; };
	}

	this.setA = function (data) {
		var a = document.createElement("a");
		a.href = data[0] || '';
		a.innerHTML = data[1] || '';
		a.className = data[3];
		a.id = data[3] || 'recommend_news';
		return a;
	}

	this.setB = function (dataB) {
		var a = document.createElement("a");
		a.href = dataB[0] || '';
		a.innerHTML = "・" + dataB[1] || '';
		var num = dataB[4];
		switch (num) {
			case "0": a.setAttribute("class",dataB[2]); break;
			case "1": a.className="new"; break;
			case "2": a.className="hot"; break;
		}
		return a;
	}

	this.show = function(flag) {
		if(flag) {
			this.bannerList.style.display = "block";
			refstring = "";
		} else {
			this.bannerList.style.display = "none";
		}
	}

	this.getURL = function() {
		var refstring = document.referrer
		  , regexp = new RegExp(/^(https?|ftp);\/\//)
		  , urls = [
			"http://backnumber.dailynews.yahoo.co.jp/",
			"http://dailynews.yahoo.co.jp/",
			"http://netallica.yahoo.co.jp/",
			"http://news.livedoor.com/",
			"http://news.goo.ne.jp/",
			"http://ime.nu/"
		]
		  , urls_len = urls.length;
		for(var i = 0; i < urls_len; ++i) {
			if (refstring.match((regexp, urls[i]))) {
				this.show(true);
				break;
			}
		}
	}
	this.init();
	this.getURL();
}




