/*************************************************


	Site Name   DEC
	File Name   common.js

	Update Date 2010/09/20
	Update Date 2010/12/16


*************************************************/

/**
 * Common Function
 */

var SITE_ROOT_PATH = '/';

(function($){

	$(function(){
		$.commonFunc.footerPosAdjuster('#area_footer', '.js_fontSizeTriggerDisable');
		$.commonFunc.setFloatingNav('#mod_pagetop', 160, 1000, 'easeInOutQuint');
		$.commonFunc.setBackground('.comingsoon01', 'mod_gnav_comingsoon01.gif');
		//$.commonFunc.setBackground('.comingsoon02', 'mod_gnav_comingsoon02.gif');
		//$.commonFunc.pngfix('.js_pngfix');
		//$.commonFunc.exfixed('.js_fixed');
		$.commonFunc.rollover();
		$.commonFunc.fade();
		$.commonFunc.externallink();
		$.commonFunc.smoothscroll();
	});

	$.commonFunc = {

		/**
		 * Footer Position Adjuster
		 */
		footerPosAdjuster : function(elem, class_exclude){
			if($(class_exclude).size() > 0) return;
			var main = function(){
				var $target = $(elem);
				var h_rest = $('#area_header').attr('offsetHeight') + $('#area_contents').attr('offsetHeight');
				var h_target = $target.height();
				var h_win = $(window).height();
				var rest = h_win - h_rest;
				if(rest > h_target){
					$('#area_contents').css({
						marginBottom : rest - h_target - 10
					});
				}else{
					$('#area_contents').css({
						marginBottom : 0
					});
				};
			};
			var fontSizeListener = function(){
				var $temp = $('<div />', {
					id : 'js_fontsizeChecker',
					text : 'check font size...'
				}).css({
					visibility : 'hidden',
					position : 'absolute',
					top : 0,
					left : '-9999px'
				});
				$('body').append($temp);
				var h_temp = $('#js_fontsizeChecker').height();
				var checkFontSize = function(){
					if(h_temp !== $('#js_fontsizeChecker').height()){
						main();
						h_temp = $('#js_fontsizeChecker').height();
					};
				};
				setInterval(checkFontSize, 500);
			};
			$(window).resize(function(){
				main();
			});
			var timer = setTimeout(function(){
				main();
				clearTimeout(timer);
			}, 500);
			fontSizeListener();
		},

		/**
		 * Floating Nav
		 */
		setFloatingNav : function(elem, dy, duration, easing){
			var timer;
			var $elem = $(elem);
			$elem.css({
				top : dy
			});
			$(window).scroll(function(){
				var vy = $.browser.safari ? $('body').scrollTop() : $('html').scrollTop();
				$elem.stop().animate({
					top : vy+dy
				}, duration, easing);
			}).resize(function(){
				$elem.hide();
				timer = setTimeout(function(){
					$elem.show();
					clearTimeout(timer);
				}, 2000);
			});
		},

		/**
		 * Coming Soon
		 */
		setBackground : function(elem, bgImg){
			var bgDir = 'common/images/mod_gnav/';
			$(elem).hover(
				function(){
					$('#mod_gnav ul').css({
						background : 'transparent url(' + SITE_ROOT_PATH + bgDir + bgImg + ') bottom left no-repeat'
					});
				},
				function(){
					$('#mod_gnav ul').css({
						background : 'none'
					});
				}
			).click(function(){return false;});
		},

		/**
		 * Call SE function from SWF (for vision && works && twitter swf)
		 */
		callSoundFunc : function(evt){
			var $swf = $('#swf_se').get(0);
			if($swf.callSe) $swf.callSe(evt); // 'over' or 'click'
		},

		/**
		 * Call SE function from SWF (for html elem)
		 */
		bindMouseOverEvent : function(){
			var $target = $('#mod_gnav a, #mod_pagetop a, #mod_pageback a, #mod_siteci a, #mod_spcontents_index .mod_block');
			var $swf = $('#swf_se').get(0);
			$target.mouseenter(function(){
//				console.log('mouseenter');
				if($swf.callSe) $swf.callSe('over');
			}).click(function(){
//				console.log('mouseout');
				if($swf.callSe) $swf.callSe('click');
			});
		},

		/**
		 * Check Browser
		 */
		isMSIE6 : ($.browser.msie && $.browser.version < 7) ? true : false,

		/**
		 * Pngfix for IE6
		 */
		pngfix : function(target){
			if(this.isMSIE6) DD_belatedPNG.fix(target);
		},

		/**
		 * Exfixed for IE6
		 */
		exfixed : function(target) {
			if(this.isMSIE6) $(target).exFixed();
		},

		/**
		 * rollover
		 */
		rollover : function(options){
			var setting = $.extend({
				selector : '.js_rollover',
				postfix : '_on'
			}, options);
			var image_cache = new Object();
			$(setting.selector).each(function(){
				var imgsrc = this.src;
				var dot = this.src.lastIndexOf('.');
				var imgsrc_on = this.src.substr(0, dot) + setting.postfix + this.src.substr(dot, 4);
				image_cache[this.src] = new Image();
				image_cache[this.src].src = imgsrc_on;
				$(this).hover(
					function(){this.src = imgsrc_on;},
					function(){this.src = imgsrc;}
				);
			});
		},

		/**
		 * fade
		 */
		fade : function(options){
			var setting = $.extend({
				selector : '.js_fade',
				opacity : '20'
			}, options);
			$(setting.selector).hover(
				function(){
					$(this).dequeue().fadeTo(300, setting.opacity/100);
				},
				function(){
					$(this).dequeue().fadeTo(300, 1);
				}
			);
		},

		/**
		 * open new window for external link
		 */
		externallink : function(options){
			var setting = $.extend({
				selector : '.js_externallink'
			}, options);
			var popupEvent = function(e){
				window.open(this.href);
				e.preventDefault();
				e.stopPropagation();
			}
			$(setting.selector).each(function(){
				$(this).click(popupEvent);
				$(this).keypress(popupEvent);
			});
		},

		/**
		 * smooth scroll
		 */
		smoothscroll : function(options){
			var self = this;
			var setting = $.extend({
				selector : '.js_pagelink',
				sclpos : 0,
				scldurat : 0.5,
				easing : 'easeOutExpo'
			}, options);
			$(setting.selector).click(function(){
				var target = $(this.hash);
				if(target.length){
					var targetOffset = target.offset().top - setting.sclpos;
					var bodyHeight = $('body').height();
					var windowHeight = $(window).height();
					if(bodyHeight - targetOffset < windowHeight){
						$('html, body').stop().animate(
							{scrollTop : bodyHeight - windowHeight},
							{duration : setting.scldurat * 1000, easing : setting.easing}
						);
					}else{
						$('html, body').stop().animate(
							{scrollTop : targetOffset},
							{duration : setting.scldurat * 1000, easing : setting.easing}
						);
					};
					return false;
				};
			});
		}

	};

})(jQuery);
