/*	rollover
/*	scroll
/*	fixed page-up position
/*	popup window
************************************************************************* */


(function($) {

	//- init --------------------------------------------------------------

	$(function() {				
		$.common.scroll();
//		$.common.openWindow();
		$('.page-up p').exFixed(function(){});
		new RolloverImage( 'rollover', 'on' );
		
	});


	//---------------------------------------------------------------------

	$.common = {
		scroll: function(options) {	// anchor scroller	// excute class no-scroll
			var scroller = (function() {
				var c = $.extend({
					easing:100,
					step:30,
					fps:60,
					fragment:''
				}, options);
				
				c.ms = Math.floor(1000/c.fps);
				var timerId;
				var param = {
					stepCount:0,
					startY:0,
					endY:0,
					lastY:0
				};
				
				// fnc
				function move() {
					if (param.stepCount == c.step) {
						// scroll end
						setFragment(param.fragment);
						
						window.scrollTo(getCurrentX(), param.endY);
					} else if (param.lastY == getCurrentY()) {
						// scroll
						param.stepCount++;
						window.scrollTo(getCurrentX(), getEasingY());
						param.lastY = getEasingY();
						timerId = setTimeout(move, c.ms); 
					} else {
						// error	
						if (getCurrentY()+getViewportHeight() == getDocumentHeight()) {
							setFragment(param.fragment);
						}
					}
				}
				function setFragment(fragment){
					location.href = location.href.split('#')[0] + fragment;
				}

				function getEasingY() {
					return Math.floor(getEasing(param.startY, param.endY, param.stepCount, c.step, c.easing));
				}
				function getEasing(start, end, stepCount, step, easing) {
					var s = stepCount / step;
					return (end - start) * (s + easing / (100 * Math.PI) * Math.sin(Math.PI * s)) + start;
				}
				function targetOffsetTop(target){
					return target.offset().top;
				}
				return {
					set: function(options) {
						this.stop();
						if (options.startY == undefined) options.startY = getCurrentY();
						param = $.extend(param, options);						
						param.lastY = param.startY;
						param.fragment = options.fragment;
						timerId = setTimeout(move, c.ms); 
					},
					stop: function(){
						clearTimeout(timerId);
						param.stepCount = 0;
					}
				};
			})();
			
			function getCurrentY() {
					return document.body.scrollTop  || document.documentElement.scrollTop;
			}
			function getCurrentX() {
					return document.body.scrollLeft  || document.documentElement.scrollLeft;
			}
			function getDocumentHeight(){
					return (document.compatMode && document.compatMode != "BackCompat")?document.documentElement.scrollHeight:document.body.scrollHeight;
			}
			function getViewportHeight(){
					return (!$.browser.safari && !$.browser.opera) ? document.documentElement.clientHeight || document.body.clientHeight || document.body.scrollHeight : window.innerHeight;
			}
			// init
			$('a[href^=#], area[href^=#]').not('a[href=#], area[href=#], a.no-scroll, area.no-scroll').click(function(){

				var fragment = $(this).attr('href');
				var target = $(fragment);
				if (target.length == 0) target = $('a[name='+fragment+']');
				
				if (target.length) {
					scroller.set({
						endY: ((getDocumentHeight() - target.offset().top )) < getViewportHeight() ? getDocumentHeight() - getViewportHeight() : target.offset().top,
						fragment: fragment,
						_target :	target
					});

					return false;
				}
			});
		},
		openWindow	:	function(options){
			var c = $.extend({
				targetClass	:	'jq-blank-link',
				windowName	:	'relatedSite',
				scrollBar		:	1,
				locationBar	:	1,
				menuBar			:	1,
				resize			:	1,
				statusBar		:	1,
				toolBar 		:	1,
				directorBar:	1
			}, options);
			$('a[target=_blank]').each(function(){
				$(this).click(function(){
															 
					var target = $(this);
					var url = target.attr('href');
					var winops = 'width=' +get_browser_width()+ ',height=' +get_browser_height()+ ',scrollbars=' +c.scrollBar+ ',location=' +c.locationBar+ ',menubar=' +c.menuBar+ ',resizable=' +c.resize+ ',status=' +c.statusBar+ ',toolbar=' +c.toolbar+ ',directories=' +c.directorBar;
					
//alert(					window.name	);
					var SUB_WIN = window.open(url,c.windowName,winops);
					SUB_WIN.focus();
					
					//----------------------------------------------- get_browser_width
					function get_browser_width() {
						if ( window.innerWidth ) { return window.innerWidth; }  
						else if ( document.documentElement && document.documentElement.clientWidth != 0 ) { return document.documentElement.clientWidth; }  
						else if ( document.body ) { return document.body.clientWidth; }  
						return 0;  
					}
					
					//----------------------------------------------- get_browser_height
					function get_browser_height() {
						if ( window.innerHeight ) { return window.innerHeight; }  
						else if ( document.documentElement && document.documentElement.clientHeight != 0 ) { return document.documentElement.clientHeight; }  
						else if ( document.body ) { return document.body.clientHeight; }  
						return 0;  
					}

					return false;
				});
				
			});
		}
	};
})(jQuery); 
 
/*
 *rollover
 *2007-12-19
 *jquery-1.2.1
 *
 */

function RolloverImage( className, onSuffix, aSuffix ){
	this.init( className, onSuffix, aSuffix );
}

RolloverImage.prototype = {

	init : function( className, onSuffix, aSuffix ){
		if(!document.getElementById || !document.images || !className) return;

		// 
		this.targetClassName = className;
		this.onSuffix = onSuffix;
		this.aSuffix = aSuffix;
		//this.mdSuffix = mdSuffix;
		this.buttons = [];

		// 
		var _this  = this;
		var imgs   = [];
		var inputs = [];
		var rolloverObj    = [];

		$("." + this.targetClassName ).each(function(i){
			var el = $(this);
			if( el.hasClass(_this.targetClassName) && (this.tagName=="IMG" || this.tagName=="INPUT") ){
				rolloverObj.push(this);
			}
		});

		$.each(rolloverObj, function(i){ _this.registButton(this); });
		this.preloadImages();
	},


	registButton : function( el ){
		var _this = this;
		var btn = new Object();
		btn.src = el.src;
		btn.filetype = btn.src.substring(btn.src.lastIndexOf('.'));
		btn.basename = btn.src.substring(0, btn.src.length-btn.filetype.length);
		btn.onsrc = btn.basename + this.onSuffix + btn.filetype;

		el.offsrc = btn.src;
		el.onsrc  = btn.onsrc;
		el.lock   = false;
		if( this.aSuffix ){
			btn.activesrc = btn.basename + this.aSuffix + btn.filetype;
			el.activesrc = btn.activesrc;
		}

		this.buttons.push( el );

		if( !this.aSuffix ){
			$(el).bind( 'mouseover', function(){ _this.swapImage( el, 'on' ); } );
			$(el).bind( 'mouseout',  function(){ _this.swapImage( el, 'off'); } );
			if(el.parentNode && el.parentNode.tagName=="A"){
				var p = el.parentNode;
				$(p).bind( 'focus', function(){ _this.swapImage( el, 'on' ); } );
				$(p).bind( 'blur',  function(){ _this.swapImage( el, 'off'); } );
			}
		}
		else {
			$(el).bind( 'mouseover', function(){ if(!el.lock) _this.swapImage( el, 'on' ); } );
			$(el).bind( 'mouseout',  function(){ if(!el.lock) _this.swapImage( el, 'off'); } );
			$(el).bind( 'mouseup',   function(){
				$(_this.buttons).each(function(i){
					_this.deactivate(this)
				});
				_this.activate( el );
			} );

			if(el.parentNode && el.parentNode.tagName=="A"){
				var p = el.parentNode;
				$(p).bind( 'focus', function(){ if(!el.lock) _this.swapImage( el, 'on' ); } );
				$(p).bind( 'blur',  function(){ if(!el.lock) _this.swapImage( el, 'off'); } );

				$(p).bind( 'keypress',  function(e){
					if( jQuery.browser.msie || (!jQuery.browser.msie && e.keyCode == 13) ){
						//Event.stop(e);
						$(_this.buttons).each(function(i){
							_this.deactivate(this)
						});
						_this.activate( el );
					}
				} );
			}

		}
	},


	preloadImages : function(){
		var ret = [];
		for( var i=0; i<this.buttons.length; i++ ){
			(new Image()).src = this.buttons[i].onsrc;
			ret[ret.length] = this.buttons[i].onsrc;
			if(this.buttons[i].activesrc){
				(new Image()).src = this.buttons[i].activesrc;
				ret[ret.length] = this.buttons[i].activesrc;
			}
		}
	},

	swapImage : function( obj, status ){
		if( !obj || !obj[status+"src"] ) return;
		if( !obj.lock )
			obj.src = obj[status+"src"];
	},

	activate : function( el ){
		this.swapImage( el, 'active' );
		this.lock( el );
	},

	deactivate : function( el ){
		this.unlock( el );
		this.swapImage( el, 'off' );
	},

	lock : function( obj ){
		if( obj.lock == 'undefined' ) return;
		if(!obj.lock) obj.lock = true;
	},

	unlock : function( obj ){
		if( obj.lock == 'undefined' ) return;
		if( obj.lock ) obj.lock = false;
	}

}
