/**ニュース管理オブジェクト
 * @vesrion	2.2 (2009.10.13)
 * 
 * site: 閲覧中のサイト
 * page: 閲覧中のページ
 * trackingCode: GoogleAnalyticsのトラッキングコード
 */
var JcastJS2 = {
        isInitialized: false,
        ua: '',
        site: '',
        page: '',
        trackingCode: 'UA-145095-4'
}

/** 通知管理クラス
 * アプリケーション全体の通知を管理
 */
JcastJS2.Notification = function (){
	
	// 通知名を格納するハッシュ 
	var	_notifications = {};
	
	
	/* 通知のポスト
	/* @param	notificationName	String	通知名
	 * ポストされた通知名がハッシュ内に存在していれば、ポストを実行
	 */	
	this.post = function ( notificationName ) {
		if ( _notifications[ notificationName ] ) {
			_notifications[ notificationName ].post();
		}
	}
	
	
	/* 通知の監視者登録
	 * @param	notificationName	String	通知名
	 * @param	target				Object	監視者
	 * @param	methodName			String	通知を受けた際に監視者が実行するメソッド名
	 * 通知の監視者を登録
	 * ハッシュ内に存在しない通知名であれば新たに通知オブジェクトを生成
	 */	
	this.addObserver = function ( notificationName, target, methodName ) {
		if ( !_notifications[ notificationName ] ) {
			_notifications[ notificationName ] = new NotificationItem ();
		}
		_notifications[ notificationName ].addObserver ( target, methodName );
	}
	
	
	/* 通知の監視者削除
	 * （未だ作ってない）
	 */	
	this.removeObserver = function ( notificationName, target ) {
	}
	
	
	/** 通知クラス
	 * 通知名に紐づけられた通知オブジェクト
	 * メンバに監視者の配列を持ち、
	 * 監視者の登録と通知を受けた際のポストを行う
	 * （いずれは引数を持たせたい？）
	 */
	var NotificationItem = function () {
		var _observers	= [];
		
		// add notification observer
		this.addObserver = function ( target, methodName ) {
			_observers.push ({
				target: target,
				methodName: methodName });
		}
		
		// post notification
		this.post = function() {
			$.each( _observers, function ( i, obj ){
				obj.target[ obj.methodName ]();
			});
		}
	}
	
}
JcastJS2.notification = new JcastJS2.Notification();

// shortcut window.console.log
// var ___log;
// if ( ! window.console ) window.console = { log: function( msg, flag ) { if (flag!=true) {alert( msg )}; } };
// ___log = function( msg ){ window.console.log( msg ); }


/**初期化
 */
var initialize = function() {

	try {
		
		// UA の特定 
		var ua = navigator.userAgent;
		if ( ua.indexOf( 'Windows' ) != -1 ) {
			$( 'html' ).addClass( 'ifwin' );
		}
		if ( ua.indexOf( 'MSIE 6' ) != -1 ) {
			$( 'html' ).addClass( 'ifie6' );
			JcastJS2.ua	= 'ie6';
		}
		if ( ua.indexOf( 'MSIE 7' ) != -1 ) {
			$( 'html' ).addClass( 'ifie7' );
			JcastJS2.ua	= 'ie7';
		}
		if ( ua.indexOf( 'MSIE 8' ) != -1 ) {
			$( 'html' ).addClass( 'ifie8' );
			JcastJS2.ua	= 'ie8';
		}
		
		// スクリーン管理オブジェクトの生成 
		var screenSubject = new JcastJS2.ScreenSubject();
		
		// サムネイルのトリミング 
		JcastJS2.trimThumbnails( screenSubject );
		setTimeout( function(){ screenSubject.change() }, 400 );
		
		// カラム管理オブジェクトの生成 
		setTimeout( JcastJS2.columnsController, 400 );
                
                //パン屑bg変更
		setTimeout( JcastJS2.topicPathAddClass, 100 );	
	
                //ブックマーク表示非表示
		setTimeout( JcastJS2.toolBookmarkVisible, 100 );

		// 検索フィールドの振る舞い定義 
		JcastJS2.setupSearchField();
		
		// 印刷機能 
		setTimeout( JcastJS2.print.setup, 100);

		// 記事 広告
		var $adBottomArea2 = $( "#MCAdEntryBottomArea2" );
		var adBottomArea2Length = $adBottomArea2.length;
		if( adBottomArea2Length > 0 ){ setTimeout( JcastJS2.adEntryBottomArea2.jsonLoad, 100 ); }

		//写真で見るニュース jcarousel
		var $photoNews = $( "#LCPhotoNews" );
		var photoNewsLength = $photoNews.length;
		if( photoNewsLength > 0 ){ setTimeout( JcastJS2.jcarouselSetting, 80 ); }

	} catch(e) {
//		alert( 'INITIALIZE ERROR: '+e );
	}	
}


$(function(){
	
	if ( JcastJS2.isInitialized ) return;
	JcastJS2.isInitialized = true;
	initialize();

/* twitter */
var $twitter = $( "#TwitterList" );
var twitterLength = $twitter.length;
if( twitterLength > 0 ){ 

//var TWHid = $( '#TwitterHash' ).children().attr("class");
//var TWHurl = "tweet/" + TWHid + ".json";

var TWLid = $( '#TwitterList' ).children().attr("class");
var TWLurl = "tweet/" + TWLid + ".json";


//Twitter.initialize( "", TWHurl, "#TWTimeLineHash", "");
Twitter.initialize( "", TWLurl, "#TWTimeLineList", "list" );


//$( "#TwitterHashBT" ).click(function(){
//	BTclass = $( this ).attr( 'class' );
//	URL = "tweet/" + BTclass + ".json";
//	Twitter.initialize( 5, URL, "#TWTimeLineHash", "", "again" );
//	});
	
$( "#TwitterListBT" ).click(function(){
	BTclass = $( this ).attr( 'class' );
	URL = "tweet/" + BTclass + ".json";
	Twitter.initialize( 5, URL, "#TWTimeLineList", "list", "again" );
	});
}


/* 天気設定エリア */
var $weatherIframe = $( "#weatherAreaSettingWrap" );
var weatherLength = $weatherIframe.length;
var wflag = 0;

if( weatherLength > 0 ){
//    JcastJS2.weatherSetting();
    $( '#weatherAreaSettingWrap .setArea-bt img' ).click(function () {
        if( wflag == 0 ) {
            JcastJS2.weatherCreate();
            wflag = 1
        } else {
            return false;
        }
    });
}



/* コメント */
var commentNum = $('#MCCommentForm form').size();
        if (commentNum> 0) {
                SET_URL = 'http://210.172.192.80/mt/mt-comments.cgi';
                $('#MCCommentForm form').attr( 'action', SET_URL );
        };

})



/* 天気設定 */
JcastJS2.weatherCreate = function(){

    var WHTML = '';
    WHTML += '<iframe src="http://www.j-cast.com/weather/area_setting.html" noresize scrolling="no" hspace="0" vspace="0" frameborder="0" marginheight="0" marginwidth="0" height="0" width="100%" allowTransparency="true" id="wIframe"></iframe>'	
    $( '#weatherIframe' ).html( WHTML );


    $('#weatherIframe iframe').load(function(){

        var defIframeH = $( '#weatherIframe iframe' ).contents().find( '#weatherAreaSetting' ).height();
        $( '#weatherIframe' ).attr( 'style', 'border-top:1px solid #ccc; border-left:1px solid #ccc; border-right:1px solid #ccc; border-bottom:1px solid #ddd;' );
        $( '#weatherIframe iframe' ).animate({ height: defIframeH+20 }, 500 );

        $( '#weatherAreaSettingWrap .setArea-bt img' ).bind( 'click', function(){ 
            var iframeH = $( '#weatherIframe iframe' ).contents().find( '#weatherAreaSetting' ).height();
            $( '#weatherIframe' ).attr( 'style', 'border-top:1px solid #ccc; border-left:1px solid #ccc; border-right:1px solid #ccc; border-bottom:1px solid #ddd;' );
            $( '#weatherIframe iframe' ).animate({ height: iframeH+20 }, 500 );
        });
        
        $( '#weatherIframe iframe' ).contents().find( '#close' ).bind( 'click', function(){
                $( '#weatherIframe iframe' ).animate({ height: 0 }, {
                    complete : function () { $( '#weatherIframe' ).attr( 'style', 'border:none' ); }
                } );
            });
        $( '#weatherIframe iframe' ).contents().find( 'input' ).bind( 'click', function(){
            $('#weatherIframe iframe').load(function(){
                var iframeH2 = $( this ).contents().find( '#weatherAreaSetting' ).height() ;
                $( '#weatherIframe iframe' ).animate({ height: iframeH2+20 }, 500 );
            });
        });

    });
}



/** カラム管理オブジェクト
 *  - ウインドウのスクロール位置変化に際し、常にカラムが表示されるようY座標を調整
 *  - ウインドウリサイズ時に、最も高いカラムの高さに揃える
 */
JcastJS2.columnsController = function(){
	var $w = $( window ),				// shortcut
		$html = $( 'html' ),
		$center = $( '#MainContentsInner' ),
		$Center = $( '#MainContents' ),
		$right = $( '#RightColumnInner' ),
		$Right = $( '#RightColumn' ),
		$left = $( '#LeftColumnInner' ),
		$Left = $( '#LeftColumn' ),
		leftOffsetY, leftOrigY,
		HEIGHT_ADJUSTER = ( JcastJS2.ua	== 'ie6' ) ? 3 : 0,
		MARGIN_BOTTOM = 0, //24
		LIMIT_ADJUSTER = 0, //14
		IE6_SCROLL_DURATION = 200,
		VIEW_WIDTH_LIMIT = 550,
		VIEW_WIDTH_CLASSES = [ 'narrow-view', 'wide-view' ],
		smartphone = JcastJS2.isMobile();


	// 左カラムの自動スクロール 
	var autoScroll = function(){
		var columnHeight = $left.height(),
			columnBottom = leftOffsetY + columnHeight,
			scrollBottom = $w.scrollTop() + $w.height(),
			columnUnderHeibht = columnBottom - scrollBottom;
			
		if ( columnUnderHeibht + MARGIN_BOTTOM < 0 ) {
			
			// カラム下が空いた場合 
			var top = leftOrigY - columnUnderHeibht - MARGIN_BOTTOM,
				limit = $Left.height() - columnHeight + LIMIT_ADJUSTER;
			
			if ( top > limit ) {
				
				// 左カラムの Y座標の補正値が許される値を超えた場合（親要素をつきぬける）、下端に位置させる 
				$left.css({
						top: limit,
						position: 'absolute' });
				
			} else {
				
				// 固定位置に位置させる
				// 但しIE6は position: fixed に対応していないため、
				// アニメーション移動させる 
				if ( JcastJS2.ua == 'ie6' ) {
					$left.stop()
						 .animate({ top: top }, { duration: IE6_SCROLL_DURATION });
				} else {
					$left.css({
							top: $w.height() - columnHeight,
							position: 'fixed' });
				}
			}
		} else {
		
			// カラム下が空いてない場合：成り行きの高さに位置 
			$left.css({	top: leftOrigY,
						position: 'absolute' });
			
		}
	}
	
	
	// 最大の高さのカラムに合わせる 
	var adjustHeight = function() {
		var center = $center.outerHeight(),
			left = $left.outerHeight(),
			right = $right.outerHeight(),
			max;
		max = ( center < left ) ? left : center;
		max = ( max < right ) ? right : max;
		$Center.height( max + HEIGHT_ADJUSTER );
		$Left.height( max + HEIGHT_ADJUSTER );
		$Right.height( max );
	}
	
	
	// ビューの幅を定義 
	var defineViewWidth = function() {
		var isNarrow = $center.width() < VIEW_WIDTH_LIMIT,
			applyClass = isNarrow ? VIEW_WIDTH_CLASSES[0] : VIEW_WIDTH_CLASSES[1],
			removeClass = isNarrow ? VIEW_WIDTH_CLASSES[1] : VIEW_WIDTH_CLASSES[0];
		$html.removeClass( removeClass );
		$html.addClass( applyClass );
	}
	
	if ( $center.length == 0 ) return;

	if ( $( '.layout-2columns' ).length > 0 ) {
		$Left.remove();
	} else if( smartphone == true ) {
		leftOffsetY = $left.offset().top;
		leftOrigY = parseInt( $left.css( 'top' ) );
	} else {
		leftOffsetY = $left.offset().top;
		leftOrigY = parseInt( $left.css( 'top' ) );
		//leftOrigY = JcastJS2.numberFromUnitedString( $left.css( 'top' ) );
		$w.bind( 'scroll.columnsScrollController, resize.columnsScrollController', autoScroll );
		autoScroll();
	}
	
	$w	.bind( 'resize.columnsWidthObserver', defineViewWidth )
		.bind( 'resize.columnsHeightController', adjustHeight );
	adjustHeight();
	defineViewWidth();
	autoScroll();
	
	
	
	var ResizeObserver = function() {
		
		this.anObjectDidResized = function() {
			adjustHeight();
		}
		JcastJS2.notification.addObserver( 'anObjectDidResized', this, 'anObjectDidResized' );
		
	}
	var resizeObserver = new ResizeObserver();
	
}



/** パン屑（TopicsPath）の背景設定 first endにclassを追加
 */
JcastJS2.topicPathAddClass = function() {

	var $TopicPath = $( '#MCTopicPath ul li' );

	if( $TopicPath.length == 1 )
	{
            $TopicPath.attr( 'class', 'path-single' );
        } else if( $TopicPath.length > 1 ) {
            $( '#MCTopicPath ul li:last' ).attr( 'class', 'path-end' );
        } else {
		return false;
	}

}

/** ブックマーク 表示非表示
 */
JcastJS2.toolBookmarkVisible = function() {


    var ua = navigator.userAgent;
    if ( ua.indexOf( 'Windows' ) != -1 ) {
        $( ".entry-bookmark .bookmark-other a" ).click(function(){
            $( this ).parent().parent().parent().next().toggle();
        }); 
    } else {
	$( ".entry-bookmark .bookmark-other a" ).click(function(){
	    $( this ).parent().parent().parent().next().slideToggle(
		"normal"
	    );
	});
    }
}



/** ブラウザのスクリーン（window）の監視対象オブジェクト
 */
JcastJS2.ScreenSubject = function() {
	
	// declare
	var $w = $( window ),
		observerList = {},
		rect, left, top;
	
	function didChangeScreen(e) {
		left = $w.scrollLeft();
		top = $w.scrollTop();
		rect = { left: left, top: top, right: left + $w.width(), bottom: top + $w.height() };
		var key, observer;
		for ( key in observerList ) {
			observer = observerList[ key ];
			observer.observer[ observer.method ]( rect );
		}
	}
	this.change = function() {
		didChangeScreen();
	}
	
	/* 監視者の追加
	 * @param	key			String	observer のキー
	 * @param	observer	Object	observer
	 * @param	method		String	update された際に呼び出されるメソッド
	 */
	this.addObserver = function( key, observer, method ) {
		observerList[ key ] = { observer: observer, method: method };
	}
	this.removeObserver = function( key ) {
		delete observerList[ key ];
	}
	
	$( window ).bind( 'scroll.ScreenSubject, resize.ScreenSubject', didChangeScreen );
	
}



/** サムネイルのトリミング
 * @param	screenSubject	ScreenSubject	スクリーン監視対象オブジェクト
 */
JcastJS2.trimThumbnails = function( screenSubject ) {
	
	var $w = $( window ),				// shortcut
		TRIMED_PHOTO_FADEIN_DURATION = 500,
		counter = 0;
	
	
	
	/* サムネイル画像のの位置調整とオンデマンドロード
	 * @param	photo	ImageElement
	 */
	var PhotoFrameView = function( photoFrame ) {
		
		// declare
		var $photo,
			$frame = $( photoFrame ),				// IMG 要素を内包する枠 
			width = $frame.width(),
			height = $frame.height(),
			offset, left, top, right, bottom,
			eventId = 'pf' + counter++,
			src, className, alt, link;

		// src を引っこ抜く
		src = $( '.PFSrc', $frame ).text();
		className = $( '.PFClass', $frame ).text();
		alt = $( '.PFAlt', $frame ).text();
		link = $( '.PFLink', $frame ).text();
		
		
		/* 画像の読み込み後に呼ばれ、画像の位置調整を行う
		 */
		function adjustPhotoPosition() {
			
			// declare
			var rect = { width: $photo.width(), height: $photo.height() },		// IMG 要素の矩形サイズ 
				centerPosition = { x: ( width - rect.width ) * 0.5, y: ( height - rect.height ) * 0.5 },
																				// 枠の中心座標 
				position, posX, posY;											// 座標
			
			// 仮の高さを与える
			// ウインドウリサイズ・スクロールとバインドする 
			if (className.search(/trim-\d{1,3}-\d{1,3}/) == 0){
				// className でトリミング 
				position = className.match(/\d{1,3}/g);
				posX = position[0];
				posY = position[1];
				if(posX < 0 || posX > 100 || posY < 0 || posY > 100){
					posX = 50;
					posY = 50;
				}
			} else { // centerでトリミング
				posX = 50;
				posY = 50;
			}
			
			// 0-100 で指定してもらう
//			posX = Math.round((posX * 2 - 100 ) / 100);
//			posY = Math.round((posY * 2 - 100 ) / 100);
			posX = (posX * 2 - 100 ) / 100;
			posY = (posY * 2 - 100 ) / 100;
			
			$photo.css({
				left: centerPosition.x + centerPosition.x * posX,
				top: centerPosition.y + centerPosition.y * posY,
				opacity: 0,
				visibility: 'visible',
				display: 'block'
			}).animate({
				opacity : 1
			}, {
				duration : TRIMED_PHOTO_FADEIN_DURATION
			})
			
		}
		
		
		// スクリーンの状態が変化するたびに呼ばれる 
		// @param	screenRect	Object{ left, top, right, bottom }
		this.update = function( screenRect ) {
			offset = $frame.offset();
			left = offset.left;
			top = offset.top;
			right = left + width;
			bottom = top + height;
			
			// スクリーン上に表示されているようであれば画像の読み込みを開始（左右の位置は評価していない） 
			if ( screenRect.top < bottom && top < screenRect.bottom ) {
				screenSubject.removeObserver( eventId );
				// img の生成 
//				$frame.html( '<a href="' + link + '"><img alt="' + alt + '" class="' + className + '" /></a>' );
				$frame.html( '<a href="' + link + '" onClick="pageTracker._trackEvent(trCategory,\'center_top_news2\',\'image\');"><img alt="' + alt + '" class="' + className + '" /></a>' );
//				$frame.html( '<img alt="' + alt + '" class="' + className + '" />' );
				$photo = $( 'img', $frame );
				$photo.load(function(){ adjustPhotoPosition() });
				$photo.attr( 'src', src );
			}
		}
		
		if ( src ) {
			// スクリーンの状態を監視 
			screenSubject.addObserver( eventId, this, 'update' );
			
		} else {
			// src が設定されていなければ、オンデマンドロードはせずにレイアウトを行う 
			$photo = $( 'img', $frame );
			var photo = $photo.get(0);
			if ( photo.complete ) {
				adjustPhotoPosition();
			} else {
				$photo.load(function(){ adjustPhotoPosition() });
			}
		}
		
	}
	
	
	
	// photo-frame クラスに内包される IMG 要素の位置調整 
	$( '.photo-frame' ).each(function(){
		new PhotoFrameView( this );
	})
	
}



/** 検索フィールド
 */
JcastJS2.setupSearchField = function() {

	var $searchField = $( '#search-field' ),
		$searchButton = $( '#search-button' ),
		defaultValue = $searchField.attr( 'value' );
	
	$searchField.focus(function(){
		$searchField.css({
				backgroundPosition: 'left -22px',
				color: '#000' });
		$searchButton.css({
				backgroundPosition: 'right -22px' });
		if ( $searchField.attr('value') == defaultValue ) $searchField.attr('value', '');
	})
	$searchField.blur(function(){
		$searchField.css({
				backgroundPosition: 'left 0px',
				color: '#666' });
		$searchButton.css({
				backgroundPosition: 'right 0px' });
		if ( $searchField.attr('value') == '' ) $searchField.attr('value', defaultValue);
	})
	
}

/** 印刷関連
 *
 */
JcastJS2.print = {}
JcastJS2.print.printWindowManager;
JcastJS2.print.printWindowOpener;

// 設定

JcastJS2.print.CONF = {
	// printing elements
	
	// span.entry-cat-title（カテゴリ名）は 2009.10.1 のリニューアルで失われた要素だが、
	// 比較的重要な要素なので、一応残しておく
	
	PRINTING_ELMEMENTS: [
		'h1',
		'div#MCTopicPath',
		'div#entry-date',
		/*'span.number-of-comments',*/
		'div.syomei',
		'div[id^="under-a"]',
		'div[id^="entry-main-a"]',
		'span.entry-cat-title',
		'div#title-wideshow',
		'div#MCEntryBody'
	],
	
	// print window
	ROOT_PATH: 'http://www.j-cast.com/',
	PRINT_WINDOW_PATH: 'print_window.html',
	PRINT_WINDOW_NAME: 'printWindow',
	
	// channel
	PRINT_CHANNEL_ELEMMENTS	: {
		'channel-news'			: {	src		: 'images/print_window/logo-news.gif',
							alt		: 'J-CAST ニュース ビジネス & メディアウォッチ',
							qrImg	: 'images/print_window/qr-news.jpg',
							qrName	: 'J-CAST モバイル ニュース',
							qrUrl	: 'http://www.j-cast.com/m/news.html' },
					
		'channel-tv'			: {	src		: 'images/print_window/logo-tv.gif',
							alt		: 'J-CAST テレビウォッチ',
							qrImg	: 'images/print_window/qr-tv.jpg',
							qrName	: 'J-CAST モバイル テレビウォッチ',
							qrUrl	: 'http://www.j-cast.com/tv/m/' },
					
		'channel-mono'			: {	src		: 'images/print_window/logo-mono.gif',
							alt		: 'J-CAST モノウォッチ',
							qrImg	: 'images/print_window/qr-mono.jpg',
							qrName	: 'J-CAST モバイル モノウォッチ',
							qrUrl	: 'http://www.j-cast.com/mono/m/' },
					
		'channel-kaisha'		: {	src		: 'images/print_window/logo-kaisha.gif',
							alt		: 'J-CAST 会社ウォッチ',
							qrImg	: 'images/print_window/qr-kaisha.jpg',
							qrName	: 'J-CAST モバイル 会社ウォッチ',
							qrUrl	: 'http://www.j-cast.com/kaisha/m/' },
					
		'channel-motto'			: {	src		: 'images/print_window/logo-motto.gif',
							alt		: 'もっとJ-CAST',
							qrImg	: 'images/print_window/qr-motto.jpg',
							qrName	: 'もっとJ-CAST',
							qrUrl	: 'http://www.j-cast.com/motto/m/' },
		'channel-skytree'		: {	src		: 'images/print_window/logo-news.gif',
							alt		: 'J-CAST スカイツリーウォッチ',
							qrImg	: 'images/print_window/qr-news.jpg',
							qrName	: 'J-CAST スカイツリーウォッチ',
							qrUrl	: 'http://www.j-cast.com/m/news.html' }
	}
}

// 印刷ウインドウを開くボタン

JcastJS2.print.PrintWindowOpener = function () {
	
	// Class Variable:
	var CONF = JcastJS2.print.CONF;
	
	// Class Method:
	// Send printing elements to print window
	this.sendPrintingElements	= function ( printWindowManager ) {
		// printing elements container
		var sendObject		= new Object();
		// title
		sendObject.title	= document.title;
		// URL
		sendObject.url		= document.URL;
		// channel name
		sendObject.channel	= (function(){
				return $('body').attr( 'class' ).match( /channel-\w*/ );
			})();
		// html elements
		var htmlData		= new Array();
		for ( var i=0; i<CONF.PRINTING_ELMEMENTS.length; i++ ) {
			try {
				// temporary container
				var obj			= new Object();
				// jQuery selector
				obj.selector	= CONF.PRINTING_ELMEMENTS[i];
				// jQuery's value
				var value		= $( obj.selector );
				// html
				obj.value		= value.html();
				// html object
				var html		= value.get(0);
				// tag name
				obj.tagName		= html.tagName;
				// set to container
				htmlData[i] 	= obj;
			} catch( e ) {
				//alert( 'error:  '+e );
			}
		}
		// set to container
		sendObject.htmlData	= htmlData;
		// execute
		printWindowManager.receivePrintingElements( sendObject );
	}
	
	// initial
	// define open print window method
	$( 'a.button_open_print_window, a.alternative_button_open_print_window' )
		.removeAttr	( 'href' )
		.css		( 'cursor', 'pointer' )
		.click		( function(){
			window.open( CONF.ROOT_PATH + CONF.PRINT_WINDOW_PATH, CONF.PRINT_WINDOW_NAME, 'toolbar=no,location=no,directories=no,scrollbars=yes,status=no,menubar=no,titlebar=no,channelmode=nofavorites=no' );
		});
	
}

// 印刷ウインドウ

JcastJS2.print.PrintWindowManager = function () {
	
	var CONF = JcastJS2.print.CONF;
	
	if ( window.opener ) {
	
		// Class Variable:
		
		// Class Method:
		// reseive printing elements
		this.receivePrintingElements = function ( sendObject ) {

			// title
			document.title = sendObject.title;
			// URL
			$( 'li#document-url span.right-elm' )	.html( sendObject.url )
			// channel
			var channel = String( sendObject.channel );
			$( 'body' ).addClass( channel );
			// logotype
			$( 'div#pw-wrap-logotype' ).html( '<img src="' + CONF.PRINT_CHANNEL_ELEMMENTS[channel].src + '" alt="' + CONF.PRINT_CHANNEL_ELEMMENTS[channel].alt + '" />' );
			// generate html elements
			
			$.each( sendObject.htmlData, function( key, value ){
				try {
					// exception processing - pre
					switch( value.selector ) {
						case 'div#entry-date':
							var html = '<span class="left-elm">掲載日:</span><span class="right-elm">'+value.value+'</span>';
							break;
						case 'span.number-of-comments':
							var html = String( value.value.match( /\d+/ ) );
							break;
						case 'div.syomei':
							var html = value.value;
							$( value.selector ).css( 'line-height', '10pt' );
							break;
						case 'div#MCEntryBody':
							var html = value.value+'<div style="clear:both;"></div>';
							break;
						default
						:	var html = value.value;
					}
					// set html
					$( value.selector ).html( html ).css( 'visibility', 'visible' );
					$("#MCAdEntryCenterrectangle").remove();
					// exception processing - post
					switch( value.selector ) {
						case 'div#title-wideshow':
							var origtext = $( 'div#under-a01_wideshow-wrapper span' ).html();
							var addtext = $( 'div#title-wideshow a' ).html();
							$( 'div#under-a01_wideshow-wrapper span' ).html( origtext+" ◆ "+addtext );
							break;
					}
				} catch( e ) {
					//alert( 'error:  '+e );
				}
			} );
			// QR Code
			$( 'img#pw-qr-img' )					.attr({	src: CONF.PRINT_CHANNEL_ELEMMENTS[channel].qrImg,
															alt: CONF.PRINT_CHANNEL_ELEMMENTS[channel].qrName });
			$( 'span#pw-qr-name' )					.html( CONF.PRINT_CHANNEL_ELEMMENTS[channel].qrName );
			$( 'span#pw-qr-url' )					.html( CONF.PRINT_CHANNEL_ELEMMENTS[channel].qrUrl );
			// show
			$( '#pw-container')						.css( 'visibility', 'visible' );
			// print
			var timer								= setTimeout( "print()", 500 );
		}
		
		// initial
		// order printing elements to opener window
		window.opener.JcastJS2.print.printWindowOpener.sendPrintingElements( this );
		// close button
		$( 'a#pw-button-close' ).click(function(){ window.close(); });
	
	} else {
		$( '#pw-container').css( 'visibility', 'hidden' );
		window.close();
	}
	
}

JcastJS2.print.setup = function () {

	if ( $('body#print-window').length==1 ) {
		// print window
		// create printer window manager instance
		JcastJS2.print.printWindowManager	= new JcastJS2.print.PrintWindowManager ();
	}
	
	if ( $('.button_open_print_window').length>0 ) {
		// print window opener
		// create printer window opener instance
		JcastJS2.print.printWindowOpener	= new JcastJS2.print.PrintWindowOpener ();
	}
}

/*
 * ページの属性(サイト、ページ種別)を保持する
 * トラッキングの際など引数に指定する
 */
JcastJS2.setPageAttr = function() {
   var site, page;

   // 閲覧中のサイトを特定。デフォルトはニュース
   var url = document.location.href;
   var site = url.match(/tv|mono|kaisha|other/);
   //var site = url.match(/tv|mono|kaisha|other|weather|japan|motto/);
   if (!site) { site = 'news'; }
   if (site == 'other') { site = 'mono'; }
   JcastJS2.site = site;
   // クエリー部分は削除
   url = url.replace(/\?.*$/, "");
   // ページタイプの判別
   var indexPat = /j-cast\.com(\/)?(tv|mono|kaisha|motto|weather|japan)?(\/)?(index\.html)?$/;
   var categoryPat = /\/(index\.html|index\.php)?$/;
   if (url.match(indexPat)) {
       page = 'index';
   } else if (url.match(categoryPat)) {
       page = 'category';
   } else {
       page = 'entry';
   }
   JcastJS2.page = page;
}

/*
 * ページの属性(サイト、ページ種別)を返却
 */
JcastJS2.getPageAttr = function() {
   var site, page;

   // 閲覧中のサイトを特定。デフォルトはニュース
   var url = document.location.href;
   var site = url.match(/tv|mono|kaisha|other/);
   //var site = url.match(/tv|mono|kaisha|other|weather|japan|motto/);
   if (!site) { site = 'news'; }
   if (site == 'other') { site = 'mono'; }
   JcastJS2.site = site;
   // クエリー部分は削除
   url = url.replace(/\?.*$/, "");
   // ページタイプの判別
   var indexPat = /j-cast\.com(\/)?(tv|mono|kaisha|motto|weather|japan)?(\/)?(index\.html)?$/;
   var categoryPat = /\/(index\.html|index\.php)?$/;
   if (url.match(indexPat)) {
       page = 'index';
   } else if (url.match(categoryPat)) {
       page = 'category';
   } else {
       page = 'entry';
   }
   return site + '_' + page;
}




/*
 * Analytics トラッキングコード埋め込みのタグを生成
 */
JcastJS2.makeTrackTag = function(action, label, value) {
   JcastJS2.setPageAttr();
   var category = JcastJS2.site + '_' + JcastJS2.page;
   var res = "pageTracker._trackEvent('" +  category +　"','" + action + "','" + label + "','" + value + "');";
   return res;
}


/*
 * 関連記事をGoogleへ問い合わせ。記事ページのBody下部からコール
 */
JcastJS2.gsearchRequestRelatedEntries = function(keywords) {
      // var word = 'site:www.j-cast.com -/m/ -/other/ -ly -index' + keywords;
      var word = keywords + '-モバイル -/m/ -/other/ -/ly/ site:www.j-cast.com filetype:html';

      // リクエストURLを構築
         var requestURL = 'http://ajax.googleapis.com/ajax/services/search/web?' + [
        'key=ABQIAAAAtyKNdTFIAYke0f3-DVzFNRQv9xoASmsZ9C_dt3JJvdWtTWG4dBTMgkAvBnQO3_RTJRh0hutuC6GdjA',
        'q=' + encodeURIComponent(word),
        'v=1.0',              // APIバージョン
        'output=json',        // データ形式
        'callback=JcastJS2.gsearchDispRelatedEntries', // コールバック関数
        'context=none',       // コールバック関数に渡すパラメータ（省略すると引数の形式が変わるので注意）
        'num=8'               // 取得するエントリの最大数
      ].join('&');

      // SCRIPTタグを作成し、bodyに追加
      var e     = document.createElement('SCRIPT');
      e.type    = 'text/javascript';
      e.src     = requestURL;
      e.charset = 'UTF-8';
      document.body.appendChild(e);

      // イベント処理をキャンセル
      //event.preventDefault && event.preventDefault();
      //event.returnValue = false;
}

/*
 * Googleへの問い合わせ結果を表示
 */
JcastJS2.gsearchDispRelatedEntries = function(context, data, status, error) {
     var dispMax = 2;
     var currentUrl = location.href;
     var result = [];

    var relateCnt = 0;
    if(status == 200) {
        result.push('<ul>');
        var entries = data['results'];
        for(var i = 0 ; i < entries.length ; ++i) {
          var entry = entries[i];
          if (currentUrl != entry.url) {
             relateCnt++;
             //track = JcastJS2.makeTrackTag('center_related_top', relateCnt, relateCnt);
             //result.push('<li><a href="' + entry.url + '" onClick="' + track + '" >' +  entry.titleNoFormatting + '</a></li>');
             result.push('<li><a href="' + entry.url + '" onClick=\"pageTracker._trackEvent(trCategory, \'center_top_related\');">' +  entry.titleNoFormatting + '</a></li>');
           }
           if (relateCnt >= dispMax) {
             break;
          }
        }
        result.push('</ul>');
      } else {
        // エラーメッセージを表示
        //result = [error];
      }

      if (relateCnt <= 0) {
          return;
      }

      now = new Date();
      date = now.getFullYear()+"年";
      date+= now.getMonth()+1+"月";
      date+= now.getDate()+"日";

      glink = 'Google からクリッピング';
      result.push('<div class="cliped-by-google">' + glink + ' - ' + date + '</div>');
      document.getElementById('gRelatedEntries').innerHTML = '<div class="related-article">' + result.join('') + '</div>';
      setTimeout( function(){ JcastJS2.notification.post( 'anObjectDidResized' ) }, 2500 );
}



/*
 * 記事ページボトムエリア　load jsonp for adingo #MCAdEntryBottomArea2
 */
JcastJS2.adEntryBottomArea2 ={};

JcastJS2.adEntryBottomArea2.jsonLoad = function() {
    $.jsonp({
        url : 'http://product.adingo.jp/c/hybridplus/api.php',
        data : {
            apikey : '0065500004',
            type : 'jsonp'
        },
        callback: "callback",
        timeout: 5000,
        success: function( data ) {
            var datalength = data.length;
            JcastJS2.adEntryBottomArea2.writeHtml( data, datalength );
        },
        error: function(d,msg) {
//            alert( d + msg );
        }
    });
}

JcastJS2.adEntryBottomArea2.wordTitle = [
	"注目ワード",
	"仕事・資格関連",
	"金融関連"
]

/*
 * 広告書き出し
 * adingo-keywords-wrapper
 * @param  data        Array   jsnop形式 key - word,ref,url
 * @param  datalength  Number  data総数
 */
JcastJS2.adEntryBottomArea2.writeHtml = function( data, datalength ){
    var datalength  = datalength;
    var slicelength = datalength / 3;

    var pointStart  = 0;
    var pointFirst  = slicelength*1;
    var pointSecond = slicelength*2;
    var pointThird = slicelength*3;

    var titleCount = 0;
    var HTML_DATA = '';

    if( data !== '' ){
        for(var i=0; i<datalength ;i++){
            var DataBody = data[i];
            var word = DataBody.word;
            var ref = DataBody.ref;
            var url = DataBody.url;

            if( i == pointSecond || i == pointFirst || i == pointStart ){
                HTML_DATA += '<div class="keywords-contents">';
                HTML_DATA += '<div class="keyword-title">' + JcastJS2.adEntryBottomArea2.wordTitle[ titleCount ] + '</div>';
                titleCount++;
            }

            HTML_DATA += '<div class="keyword"><a href="' + url + '" target="_blank">' + word + '</a></div>';

            if( i == pointFirst -1 || i == pointSecond -1 || i == pointThird -1 ){
                HTML_DATA += '</div>';
            }

        }
        $( '#adingo-keywords-wrapper' ).html( HTML_DATA );
        setTimeout( JcastJS2.ReAdjustHeight, 300 );
    }
}

// 再度最大の高さのカラムに合わせる 
JcastJS2.ReAdjustHeight = function() {
	var $center = $( '#MainContentsInner' ),
		$Center = $( '#MainContents' ),
		$right = $( '#RightColumnInner' ),
		$Right = $( '#RightColumn' ),
		$left = $( '#LeftColumnInner' ),
		$Left = $( '#LeftColumn' ),
		HEIGHT_ADJUSTER = ( JcastJS2.ua	== 'ie6' ) ? 3 : 0;

	var center = $center.outerHeight(),
	left = $left.outerHeight(),
	right = $right.outerHeight(),
	max;
	max = ( center < left ) ? left : center;
	max = ( max < right ) ? right : max;
	$Center.height( max + HEIGHT_ADJUSTER );
	$Left.height( max + HEIGHT_ADJUSTER );
	$Right.height( max );
}


/*
 * twitter
 * maxnum number  表示件数
 * url    string  xml
 * id     string  書き出しdiv
 */

Twitter = {}

Twitter.initialize = function( maxnum, url, id, type, info ){
	Twitter.readTwitterXml( maxnum, url, id, type, info );
}

Twitter.readTwitterXml = function( maxnum, url, id, type, info ){

$.ajax({  
url : url,  
dataType : 'json',
timeout: 5000,
error: function( XMLHttpRequest, textStatus ){
    $( id ).append( "再度お試しください。" );
    return false;
},
success: function(data, dataType){
    Twitter.twitterHtmlCreate( data, maxnum, id, type, info );
}
});

}

Twitter.twitterHtmlCreate = function( data, maxnum, id, type, info ){

var SetMaxLength = ( maxnum !== '')? maxnum: data.length;
var MaxLength = ( typeof SetMaxLength == 'undefined' )? data.results.length : SetMaxLength ;

if(data != ""){

	for(var i=0; i<MaxLength ;i++){

	if( type == "list" ){
	
		var DataBody = data[i];
		var screen_name    = DataBody.user.screen_name;
		var text           = Twitter.twitterTitle( DataBody.text );	
		var date           = niceTime( DataBody.created_at );
		var url = "http://twitter.com/" + screen_name;
		var url_id = DataBody.id_str;
		
		var setIdNum = $( id + " #tubuyaki-no" + url_id ).length;

		if( setIdNum > 0 ){
			return false;
		}
		
		var profile_img = DataBody.user.profile_image_url;

	} else {

		var DataBody = data.results[i];	
		var screen_name    = DataBody.from_user;
		var text           = Twitter.twitterTitle( DataBody.text );	
		var date           = niceTime( DataBody.created_at );
		var url = "http://twitter.com/" + screen_name;
		var url_id = DataBody.id_str;
		var profile_img = DataBody.profile_image_url;

	}
	

	var HTML_DATA_TWITTER = new String;
	HTML_DATA_TWITTER += '<div id="tubuyaki-no' + url_id + '" class="twitter-tubuyaki-main">';
	HTML_DATA_TWITTER += '<div class="ph"><img src="' + profile_img + '"></div>';
	HTML_DATA_TWITTER += '<div class="twitter-tubuyaki-text">';
	HTML_DATA_TWITTER += '<p><a href="http://twitter.com/' + screen_name + '">' + screen_name + '</a>&nbsp;';
	HTML_DATA_TWITTER += text;
	HTML_DATA_TWITTER += '</p>';
	HTML_DATA_TWITTER += '<div class="twitter-date"><a href="' + url + '/status/' + url_id + '" onClick="TBM.tr(\'right_twitter\', \'\');">' + date + '</a></div>';
	HTML_DATA_TWITTER += '</div>';
	HTML_DATA_TWITTER += '</div>';
	
	if( info == 'again' ){
		$( id ).prepend( HTML_DATA_TWITTER );
	} else {
		$( id ).append( HTML_DATA_TWITTER );	
	}
	var delay = 300 * i;
	var timer = setTimeout( 'Twitter.twitterFadeIn("' + id + '","' + url_id + '",' + timer + ')', delay);
	
	}
}
}

Twitter.twitterFadeIn = function( id, url_id, timer ){

$( id + " #tubuyaki-no" + url_id ).fadeIn
(
1000
);
clearTimeout(timer);
}

Twitter.twitterTitle = function( text ){
	text = text.replace(/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:@&=+$,%#]+)/gi,'<a href="$1">$1</a>');
	text = text.replace(/#(\w+)/gi,'<a href="http://twitter.com/search?q=%23$1">#$1</a>');
	text = text.replace(/@(\w+)/gi,'<a href="http://twitter.com/$1">@$1</a>');

  return text;
}


/*
 * JavaScript Pretty Date
 * Copyright (c) 2008 John Resig (jquery.com)
 * Licensed under the MIT license.
 */

var niceTime = (function() {
 
var ints = {
"秒": 1,
"minutes": 60,
"hours": 3600,
"days": 86400,
"week": 604800,
"month": 2592000,
"years": 31536000
};
 
return function( time ) {
 
time = +new Date( time.replace(/^(.+ .+ .+)( .+ .+)( .+)$/,"$1$3$2") );

var gap = ((+new Date()) - time) / 1000,
amount, measure;
 
for (var i in ints) {
if (gap > ints[i]) { measure = i; }
}
 
amount = gap / ints[measure];
amount = gap > ints.day ? (Math.round(amount * 100) / 100) : Math.round(amount);
amount += ' ' + measure + (amount > 1 ? '' : '') + '&nbsp;ago';
 
return amount;
};
 
})();


JcastJS2.isMobile = function() {
  var useragents = [
    'iPhone',
    'iPod',
    'Android',
    'dream',
    'CUPCAKE',
    'blackberry9500',
    'blackberry9530',
    'blackberry9520',
    'blackberry9550',
    'blackberry9800',
    'webOS',
    'incognito',
    'webmate'
  ];
  var pattern = new RegExp(useragents.join('|'), 'i');
  return pattern.test(navigator.userAgent);
}

/** 画像で見るニュース設定
 */
JcastJS2.jcarouselSetting = function() {

	if( $( '#LCPhotoNews' ).length != 0 )
	{
		$('#first-carousel').jcarousel({scroll:1});
	} else {
		return false;
	}
}

