/*=======================================================================
	MeeBox : jQuery plugin that can be customized variously
	Examples and documentation at: 
	Version: 1.2.0 (20/05/2009)　since 19/03/2009
	Copyright (c) 2009 Mee Factory
	Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
	
	Setting Memo : 
	/
	/=======NAME========:============Meaning=============: Property
	/countGA            : Google Analytics Count Switch  : true or false
	/adBannerRefresh    : AD Banner Switch               : true or false
	/scrollingCenter    : Position fixed to the center   : true or false
	/settingHeightNum   : [scrollingCenter] true position: pixel
	/followScroll       : follow to the scroll           : true or false
	/targetContents     : Put out images [id or class]   : id is [#],class is [.]
	/movieContents      : Hidden Movie Contents          : Movie Contents id or class
	/bgColor            : Background Color               : Hexadecimal number EX)'#000000'
	/bgOpacity          : Background Color Transparency  : 1 = 100% , 0.5 = 50%
	/closeTextColor     : [Close] Area Text Color        : Hexadecimal number EX)'#000000'
	/closeBgColor       : [Close] Area Background Color  : Hexadecimal number EX)'#000000'
	/loaderImageURL     : Loader Image Address           : URL of absolute path
	/adBannerURL        : AD Banner Address              : URL of AD Banner
	/adBannerTarget     : AD Banner Load Target Tag      : Tag ID 
=======================================================================*/

(function($) {
	var opts = {}; 
	/* メインスイッチの設定 */
	var meeBoxSwitch = false;
	
	$.fn.meeBox = function(settings) {
		opts.settings = $.extend({}, $.fn.meeBox.defaults, settings);
		
		return this.each(function() {
			var $this = $(this);
			var o = $.metadata ? $.extend({}, opts.settings, $this.metadata()) : opts.settings;
			
			$this.unbind('click').click(function() {
				$.fn.clickEvent(this, o); return false;
			});
		});
	};

		
	/*背景と読み込む画像を準備する関数================================ */	
	$.fn.setPhoto = function(pageName){
		
		var targetName = $(opts.settings.targetContents);
					
		var targetContentsWidth = targetName.width();
		var targetContentsHeight = targetName.height();
		var targetContentsPaddingL = targetName.css('padding-left');
		var targetContentsPaddingR = targetName.css('padding-right');
		
		var targetContentsTop = Math.floor(targetContentsHeight/2) - 20;
		var targetContentsLeft = Math.floor(targetContentsWidth/2) - 20;

		targetName.append(
			$('<div></div>').attr({'id':'mee_photo_bg'})
			.css({
				 'position':'absolute',
				 'top':'0px',
				 'left':'0px',
				 'padding-left':targetContentsPaddingL,
				 'padding-right':targetContentsPaddingR,
				 'width':targetContentsWidth,
				 'height':targetContentsHeight,
				 'background-color':opts.settings.bgColor,
				 'opacity':'0.5',
				 'z-index':'1000'
			})
		);
		
		targetName.append(
			$('<div></div>').attr({'id':'mee_photo'})
			.css({
				 'position':'absolute',
				 'top':targetContentsTop,
				 'left':targetContentsLeft,
				 'width':'40px',
				 'height':'40px',
				 'background-color':'#FFFFFF',
				 'background-image':'URL(' + opts.settings.loaderImageURL + ')',
				 'background-position':'center center',
				 'background-repeat':'no-repeat',
				 'z-index':'1010'
			})
		);
		
		$('div#mee_photo').append(
			$('<img>').attr({
			'id':'mee_img',
			'src':pageName
			})
			.css({
				'position':'absolute',
				'visibility':'hidden',/* 初めは視覚的に非表示 */
				'top':'0px',
				'left':'0px',
				'z-index':'1020'
			})
		);
		
		myTimer = setInterval("$.fn.countTimer()", 1000);
	};
	

	/* メインのクリックイベントの設定 */
	$.fn.clickEvent = function(el, opts){
		/* メインスイッチをONにする */
		$.meeBoxSwitch = true;
		
		var pageName = $(el).attr("href");
		
		$.fn.setPhoto(pageName);
		
		var thisPageAdd = document.location.href;
		
		/* Googlo Analyticsのカウント 設定*/
		if(opts.countGA){
			$.fn.countGA(pageName, thisPageAdd);
		};
		
		/* ADバナーのリフレッシュ 設定*/
		if(opts.adBannerRefresh){
			$.fn.setADBanner(thisPageAdd);
		};
		
		
		/* 一時的に見えなくするFlash 設定*/
		var setHideMovieDiv = $(opts.movieContents);
		if(setHideMovieDiv){//無ければ実行しない
			setHideMovieDiv.css('visibility','hidden');
		};
		
		
		/* スクロールの追従 設定*/
		if(opts.followScroll === true){
			$(window).scroll(function () { 
				/* メインスイッチがtrueの時だけ動く */
				if($.meeBoxSwitch === true){
					for(i = 0; i < 50000; i++){
						$.meeBoxSwitch = false;
						if(i > 49998){
							$.fn.meeFollowScroll();
							$.meeBoxSwitch = true;
						};
					};
				}else{
					return false;
				};
			});
		};   
		
		//クリックしたaのリンク先に飛ばないようにする
		return false;
	};
	

	
	
	
	
	$.fn.meeBox.start = function(imgWidth, imgHeight){
		/* ここでグローバルな「loadImageSize」に値を入れる */
		$.loadImageSize = imgHeight;
		
		var loadingBox = $('div#mee_photo');
		var targetContentsHeight = $(opts.settings.targetContents).height();
		
		var movingPosArray = $.fn.getScrollingPos(imgWidth, imgHeight);
		
		if(opts.settings.scrollingCenter === true){
			//スクロールした真ん中に出す場合
			var movingTop = $.fn.getNowPos();
		}else{
			//常にターゲットの真ん中に出す場合
			var movingTop  = Math.floor((targetContentsHeight - imgHeight)/2) + opts.settings.settingHeightNum;
		}
		//var movingTop = $.fn.getNowPos();
		var movingLeft = movingPosArray[1];
		
		loadingBox.animate({
		top : movingTop,
		left : movingLeft,
		width : imgWidth,
		height : imgHeight
		},'slow',
			function(){
				$('img#mee_img')
				.css({
					'display':'none',
					'visibility':'visible'
				}).fadeIn(2000);
				
				$('div#mee_photo').prepend(
					$('<div></div>')
					.attr({'id':'visibilityMap'})
					.css({
						'position':'relative',
						'width':imgWidth,
						'height':imgHeight,
						'background-image':'URL("http://cancam.tv/img/visibility_map.gif")',
						'z-index':'1030'
					})
				);
				
				$('div#mee_photo').append(
					$('<div></div>')
					.attr({'id':'mee_close'})
					.css({
						 'position':'relative',
						 'padding-top':'4px',
						 /* 'top':imgHeight, */
						 'width':imgWidth,
						 'height':'20px',
						 'color':opts.settings.closeTextColor,
						 'text-align':'center',
						 'cursor':'pointer',
						 'background-color':opts.settings.closeBgColor
					})
					.text('×CLOSE×')
				)
				.click(function(){/*CLOSEボタンの設定*/
					$('div#mee_photo').fadeOut(1000,function(){
						$('div#mee_photo').remove();
						$('div#mee_photo_bg').remove();
						
						var setCloseMovieDiv = $(opts.settings.movieContents);
		
						if(setCloseMovieDiv){/*無ければ実行しない*/
							setCloseMovieDiv.css('visibility','visible');
						};
					 });
					/* メインスイッチを切る */
					$.meeBoxSwitch = false;
					return false;
				});
			}
		);
	};
	
	/*初めに出るローダーのYを取得する関数======================================== */
	$.fn.getScrollingPos = function(imgWidth, imgHeight){
		var loadingBox = $('div#mee_photo');
		
		var nowTop =  parseInt(loadingBox.css('top'),10);
		var nowLeft = parseInt(loadingBox.css('left'),10);
		
		var movingTop = nowTop - Math.floor(imgHeight/2) + 20;
		var movingLeft = nowLeft - Math.floor(imgWidth/2) + 20;
		
		var targetContentsHeight = $(opts.settings.targetContents).height();
		
		var compareNum = Math.floor(targetContentsHeight - movingTop);
		
		if(imgHeight > compareNum){
			movingTop =  Math.floor(targetContentsHeight - imgHeight) - 40;
		};
		
		return [movingTop, movingLeft];
	};
	
	/*scrollingCenter = trueの場合のYを取得する関数============================== */
	$.fn.getNowPos = function(){
		var nowWindowSize = $(window).height();
		var nowbodySize = $('body').height();
		var targetContentsHeight = $(opts.settings.targetContents).height();
		
		var targetContTop = opts.settings.targetContTop;
		var targetContBottom = (nowbodySize - targetContTop) - targetContentsHeight;
		
		//現在のスクロール位置を取得
		var yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
		} else if (document.body) {
			yScroll = document.body.scrollTop;
		};
		
		var yScrollTarget;
		
		/* スクロール位置が一番上の時 */
		if(yScroll === 0 || yScroll <= targetContTop){
			yScrollTarget = yScroll;
			return yScrollTarget; 
		};
		
		/* スクロール位置が一番下の時 */
		var bottomLimit = (nowbodySize - nowWindowSize) - yScroll;
	
		if(bottomLimit <= 0){
			yScrollTarget = targetContentsHeight - ($.loadImageSize + 30);
			return yScrollTarget; 
		};
		
		//Bodyがターゲットの時はtargetContTopを0にしておく
		if(opts.settings.targetContents === 'body'){
			targetContTop = 0;
		};
		
		
		/* ウインドウサイズが画像より小さいとき */
		if($.loadImageSize > nowWindowSize){
			yScrollTarget = yScroll - (($.loadImageSize + 20) - nowWindowSize); 
			return yScrollTarget; 
		};
		
		
		//通常の処理
		yScrollTarget = yScroll + Math.floor((nowWindowSize - ($.loadImageSize + 20))/2) + targetContTop;
		
		return yScrollTarget;
	};
	
	/*ウインドウがスクロールついて行く時の関数==================================== */
	$.fn.meeFollowScroll = function(){
		var nowScrollPos = $.fn.getNowPos();
		
		$('div#mee_photo').animate({'top' : nowScrollPos},400);
	};
	
	/*カウントする関数================================ */
	$.fn.countTimer = function(){
		var imgID = $('img#mee_img');
		
		var setWidth = imgID.css('width');
		var setHeight = imgID.css('height');
		
		var setWidthNum = parseInt(setWidth,10);
		var setHeightNum = parseInt(setHeight,10);
		
		if(setWidth  === 'auto'){/*=====IEの時=====*/
			 
			var setWidth1 = imgID.width();
			var setHeight1 = imgID.height();
		
			clearInterval(myTimer);
			$.fn.meeBox.start(setWidth1, setHeight1);
			
			return false;
			
		}else if(setWidthNum > 0){/*==IE以外の時==*/
			clearInterval(myTimer);
			$.fn.meeBox.start(setWidthNum, setHeightNum);
			
			return false;
		};
	};
	
	/*ADバナーをリフレッシュする関数================================ */					   
	$.fn.setADBanner = function(thisPageAdd){
		var thisPageADDLength = thisPageAdd.length;
		var thisPagePath = thisPageAdd.slice(thisPageAdd.indexOf('/', 7), thisPageADDLength);
		var loadAddName =  opts.settings.adBannerURL + '#' + thisPagePath;
		
		var myCSSClip = 'rect(0px ' +  300 + 'px ' + 250 +'px auto)';
		
		var targetElement = $(opts.settings.adBannerTarget);
		
		targetElement.empty();
		targetElement.hide();
		
		targetElement.append(
			$('<iframe></iframe>').attr({
				'id':'meeWin_inner',
				'src':loadAddName,
				'scrolling':'no',
				'frameborder':'0',
				'width':'320',
				'height':'270'
			})
			.css({
				'position':'absolute',
				'border':'0px',
				'z-index':'20',
				'clip':myCSSClip
			})
		);
		
		targetElement.show();
	};
	/*============================================================== */
	
	/*Googlo Analyticsでカウントする関数============================ */
	$.fn.countGA = function(pageName, thisPageAdd){
		var pageNameLen = pageName.length;
		var fileType = pageName.slice((pageNameLen-4),pageNameLen);
		
		var thisPageADDLength = thisPageAdd.length;
		var thisPagePath = thisPageAdd.slice(thisPageAdd.indexOf('/', 7), thisPageADDLength);
		
		var nowFileNameNum = thisPagePath.lastIndexOf('/');
		var nowFilePathName = thisPagePath.slice(0, (nowFileNameNum + 1));
		
		var countName;
		
		if(fileType.match(/ jpg | gif | png /) === 'null'){
			countName = nowFilePathName + pageName;
		}else{
			countName = nowFilePathName + pageName.replace(fileType,'.html');
		};
		
		/* Googlo Analyticsのカウント関数を実行 */
		pageTracker._trackPageview(countName);
	};
	
	
	/* デフォルトの設定 */
	$.fn.meeBox.defaults = {
		countGA:true,
		adBannerRefresh:true,
		scrollingCenter:true,
		settingHeightNum:0,
		followScroll:true,
		targetContents:'body',
		targetContTop:0,
		targetContBottom:0,
		movieContents:'null',
		bgColor:'#000000',
		bgOpacity:0.5,
		closeTextColor:'white',
		closeBgColor:'#CC0000',
		loaderImageURL:'http://cancam.tv/img/mee_loading.gif',
		adBannerURL:'http://cancam.tv/content/ad_banner.html',
		adBannerTarget:'#can_rectangle'
	};
})(jQuery);

