/*	jquery.lh.js
	http://www.lhsalon.jp/sample/jquery/
-------------------------------------------------------------------------- */
(function($) {
	$.fn.extend({
		/*	RollOver
		-------------------------------------------------------------------------- */
		rollOver : function(findObj) {
			var _fObj = findObj;
			var tgt = $(this);
			if( _fObj && !$(this).find(_fObj).length )
				return $(this);
			$(this).hover( rOver, rOut ).each( preLoad );
			function rOver() {
				var tgt = changeTgt( $(this) );
				tgt.each( function() {
					if( $(this).attr("src") )
						$(this).attr("src", tgt.attr("src").replace("_off.", "_on."));
				} );
			}
			function rOut() {
				var tgt = changeTgt( $(this) );
				tgt.each( function() {
					if( $(this).attr("src") )
						$(this).attr("src", tgt.attr("src").replace("_on.", "_off."));
				} );
			}
			function changeTgt(tgt) {
				return ( _fObj ) ? tgt.find(_fObj) : tgt;
			}
			function preLoad() {
				var tgt = changeTgt( $(this) );
				tgt.each( function() {
					if( $(this).attr("src") )
						$("<img>").attr("src", $(this).attr("src").replace("_off.", "_on."));
				} );
			}
			return $(this);
		},
		/*	Alpha RollOver
		-------------------------------------------------------------------------- */
		alphaRo : function(opt) {
			if( !opt ) opt = new Object();
			var _from = opt.from!=null ? opt.from : 1;
			var _to = opt.to!=null ? opt.to : 0.8;
			var _f = opt.fade!=null ? opt.fade : false;
			var _s = opt.speed!=null ? opt.speed : "normal";
			var _g = opt.group!=null ? opt.group : true;
			var _a = opt.active!=null ? "."+opt.active : ".act";
			$(this).css({"opacity":_from}).bind("mouseenter", {toNum:_to}, toOpacity).bind("mouseleave", {toNum:_from}, toOpacity).filter(_a).trigger("mouseenter").unbind("mouseenter").unbind("mouseleave");
			if( $(this).css("display") == "inline" ) $(this).css({display:"inline-block"});
			function toOpacity(e) {
				var tgt = $(this);
				var rel = tgt.attr('rel');
				if( rel && _g ) {
					tgt = $("*[rel='"+rel+"']");
				}
				( _f ) ? tgt.queue([]).animate({"opacity":e.data.toNum}, {duration:_s}) : tgt.css("opacity", e.data.toNum);
			}
			return $(this);
		},
		/*	Smooth Scroll
		-------------------------------------------------------------------------- */
		smScroll : function (opt) {
			var _hash, _h, _inH, _flag=true;
			var strUA = navigator.userAgent.toLowerCase();
			var _scrTgt = $('html');
			if( strUA.indexOf("safari") != -1 ) _scrTgt = $('body');
			if( !opt ) opt = new Object();
			var s = opt.speed!=null ? opt.speed : 700;
			var ease = opt.easing!=null ? opt.easing : '';
			var fHash = opt.hash!=null ? opt.hash : true;
			$(this).click(function() {
				var tgt = $(this).attr('href').substr(1);
				_h = Math.max( document.body.clientHeight , document.body.scrollHeight );  
				_h = Math.max( _h , document.documentElement.scrollHeight );  
				_h = Math.max( _h , document.documentElement.clientHeight );
				_inH = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
				toPos(tgt);
				return false;
			});
			if( fHash ) {
				setInterval( function() {
					var sHash = getHash();
					toPosBrowse(sHash);
				}, 200 );
			}
			function toPos(gHash) {
				if( _flag ) {
					_hash = gHash;
					_flag = false;
					_scrTgt.animate({scrollTop:toGetPoint()}, s, ease, setHash);
				}
			}
			function toPosBrowse(gHash) {
				if( _hash && _hash !== gHash && _flag ) {
					_hash = gHash;
					_scrTgt.queue([]).scrollTop(toGetPoint());
					flag = true;
				}
			}
			function toGetPoint() {
				var result = 0;
				if(_hash != '') {
					result = $("*[name='"+_hash+"']").offset().top;
					if(result+_inH > _h) result = _h-_inH;
				}
				return result;
			}
			function getHash() {
				if ( typeof window.location.hash !== 'undefined' ) {
					return window.location.hash.substr(1);
				} else {
					return location.hash.substr(1);
				}
			}
			function setHash() {
				if( fHash ) {
					if ( typeof window.location.hash !== 'undefined' ) {
						if ( window.location.hash !== _hash ) {
							window.location.hash = _hash;
						}
					} else if( location.hash !== _hash ) {
						location.hash = _hash;
					}
				}
				_flag = true;
			}
			return $(this);
		},
		/*	Popup Window
		-------------------------------------------------------------------------- */
		anotherWin : function(opt) {
			if( !opt ) opt = new Object();
			var _w = opt.width!=null ? opt.width : 500;
			var _h = opt.height!=null ? opt.height : false;
			var _n = opt.name!=null ? opt.name : 'subWindow';
			var _s = opt.scrollbars!=null ? opt.scrollbars : 'yes';
			var _r = opt.resizable!=null ? opt.resizable : 'yes';
			var _m = opt.menubar!=null ? opt.menubar : 'yes';
			$(this).click( function() {
				var url = $(this).attr('href');
				var rule = 'width='+_w+',scrollbars='+_s+',resizable='+_r+',menubar='+_m;
				if( _h ) rule += ',height='+_h;
				window.open(url, _n, rule);
				return false;
			});
			return $(this);
		},
		/*	Set Same Height
		-------------------------------------------------------------------------- */
		setHeight : function(child, opt) {
			if( !opt ) opt = new Object();
			var _o = opt.outer!=null ? opt.outer : false;
			$(this).each( function() {
				var sHeight = 0;
				$(this).find( child ).each( function() {
					$(this).css('height', 'auto');
					var gH = _o ? $(this).outerHeight() : $(this).height();
					if( sHeight<gH )
						sHeight = gH;
				} );
				$(this).find( child ).each( function() {
					var lHeight = _o ? sHeight-$(this).outerHeight()+$(this).height() : sHeight;
					$(this).height(lHeight);
				} );
			} );
			return $(this);
		},
		/*	Set Division Anchor
		-------------------------------------------------------------------------- */
		setDivAnchor : function(opt) {
			if( !opt ) opt = new Object();
			var _not = opt.not!=null ? opt.not : false;
			var _tgt = $(this).filter( getTarget );
			_tgt.css("cursor", "pointer").each( function() {
				var _tgt = $(this);
				_tgt.hover( function() {
					_tgt.addClass("act");
				}, function() {
					_tgt.removeClass("act");
				} );
				_tgt.click( function() {
					window.location = _tgt.find("a").attr("href");
					return false;
				} );
			} );
			function getTarget(result) {
				if( _not && $(this).filter(_not).length > 0 ) {
					return false;
				} else {
					return true;
				}
			}
			return $(this);
		}
	});
})(jQuery);
