/* salt ロールオーバー */

/* saltPreload
 * @version: 1.0
 * 
 * Option:
 * addString (省略可) : imgの末尾に付くstringを指定する。
 *      ex) btn_01.png -> btn_01_on.png
 *          $("#foo, .bar").saltPreload({addString: "_on"});
 * 
 * How to use:
 * $(Any Elements).saltPreload({addString: Any String});
 * 
 * 親エレメントを指定(複数指定可能)してやれば、その下にぶら下がっているimgを全部パースする。はず。
 * addStringがあれば末尾に指定した文字列を付与してプリロードする。はず。
 * 
 * ToDo:
 * callbackを指定出来るようにする。
 * シーケンシャルに読み込めるようにする。
 */

(function($){
    jQuery.fn.saltPreload = function(options)
    {
        var defaults = {
            addString: ""
        }
        settings = $.extend({}, defaults, options);
        this.each(function(){
            var $this = $(this);
            var source;
            var cache = [];
            for(i = 0; i < $this.find("img").length; i++)
            {
                source = $this.find("img").eq(i).attr("src");
                if (settings.addString.length > 0) {
                    sourceExt = source.substr(source.lastIndexOf("."), source.length);
                    source = source.replace(sourceExt, settings.addString + sourceExt);
                }
                var cacheImage = document.createElement("img");
                cacheImage.src = source;
                cacheImage.onerror = function(){
                	return false;
            	};
                cache.push(cacheImage);
       		};
        });
	};
})(jQuery);

/* /salt ロールオーバー/ */


/* flatheights */

/*
	jquery.flatheights.js
	Version: 2007-08-01
*/

/*
======================================================================
	$.changeLetterSize.addHandler(func)
	文字の大きさが変化した時に実行する処理を追加
======================================================================
*/

jQuery.changeLetterSize = {
	handlers : [],
	interval : 1000,
	currentSize: 0
};

(function($) {

	var self = $.changeLetterSize;

	/* 文字の大きさを確認するためのins要素 */
	var ins = $('<ins>M</ins>').css({
		display: 'block',
		visibility: 'hidden',
		position: 'absolute',
		padding: '0',
		top: '0'
	});

	/* 文字の大きさが変わったか */
	var isChanged = function() {
		ins.appendTo('body');
		var size = ins[0].offsetHeight;
		ins.remove();
		if (self.currentSize == size) return false;
		self.currentSize = size;
		return true;
	};

	/* 文書を読み込んだ時点で
	   文字の大きさを確認しておく */
	$(isChanged);

	/* 文字の大きさが変わっていたら、
	   handlers中の関数を順に実行 */
	var observer = function() {
		if (!isChanged()) return;
		$.each(self.handlers, function(i, handler) {
			handler();
		});
	};

	/* ハンドラを登録し、
	   最初の登録であれば、定期処理を開始 */
	self.addHandler = function(func) {
		self.handlers.push(func);
		if (self.handlers.length == 1) {
			setInterval(observer, self.interval);
		}
	};

})(jQuery);

/*
======================================================================
	$(expr).flatHeights()
	$(expr)で選択した複数の要素について、それぞれ高さを
	一番高いものに揃える
======================================================================
*/

(function($) {

	/* 対象となる要素群の集合 */
	var sets = [];

	/* 高さ揃えの処理本体 */
	var flatHeights = function(set) {
		var maxHeight = 0;
		set.each(function(){
			var height = this.offsetHeight;
			if (height > maxHeight) maxHeight = height;
		});
		set.css('height', maxHeight + 'px');
	};

	/* 要素群の高さを揃え、setsに追加 */
	jQuery.fn.flatHeights = function() {
		if (this.length > 1) {
			flatHeights(this);
			sets.push(this);
		}
		return this;
	};

	/* 文字の大きさが変わった時に、
	   setsに含まれる各要素群に対して高さ揃えを実行 */
	$.changeLetterSize.addHandler(function() {
		$.each(sets, function() {
			this.height('auto');
			flatHeights(this);
		});
	});

})(jQuery);


/*
Copyright (c) 2007, KITAMURA Akatsuki

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/

/* /flatheights/ */



/* jquery.rollover.js */

/**
 * jQuery.rollover
 *
 * @version    1.0.3
 * @author     Hiroshi Hoaki <rewish.org@gmail.com>
 * @copyright  2010 Hiroshi Hoaki
 * @license    http://rewish.org/license/mit The MIT License
 * @link       http://rewish.org/javascript/jquery_rollover_plugin
 *
 * Usage:
 * jQuery(document).ready(function($) {
 *   // <img>
 *   $('#nav a img').rollover();
 *
 *   // <input type="image">
 *   $('form input:image').rollover();
 *
 *   // set suffix
 *   $('#nav a img').rollover('_over');
 * });
 */
jQuery.fn.rollover = function(suffix) {
	suffix = suffix || '_on';
	var check = new RegExp(suffix + '\\.\\w+$');
	return this.each(function() {
		var img = jQuery(this);
		var src = img.attr('src');
		if (check.test(src)) return;
		var _on = src.replace(/\.\w+/, suffix + '$&');
		jQuery('<img>').attr('src', _on);
		img.hover(
			function() { img.attr('src', _on); },
			function() { img.attr('src', src); }
		);
	});
};

/* /jquery.rollover.js/ */


/* scrollsmoothly.js */


/**

 * scrollsmoothly.js

 * Copyright (c) 2008 KAZUMiX

 * http://d.hatena.ne.jp/KAZUMiX/

 * Licensed under the MIT License:

 * http://www.opensource.org/licenses/mit-license.php

 */



(function(){

    var easing = 0.25;
    var interval = 20;
    var d = document;
    var targetX = 0;
    var targetY = 0;
    var targetHash = '';
    var scrolling = false;
    var splitHref = location.href.split('#');
    var currentHref_WOHash = splitHref[0];
    var incomingHash = splitHref[1];
    var prevX = null;
    var prevY = null;

    // ドキュメント読み込み完了時にinit()を実行する

    addEvent(window, 'load', init);



    // ドキュメント読み込み完了時の処理
    function init(){
        // ページ内リンクにイベントを設定する
        setOnClickHandler();
        // 外部からページ内リンク付きで呼び出された場合
        if(incomingHash){
            if(window.attachEvent && !window.opera){
                // IEの場合はちょっと待ってからスクロール
                setTimeout(function(){scrollTo(0,0);setScroll('#'+incomingHash);},50);
            }else{
                // IE以外はそのままGO
                scrollTo(0, 0);
                setScroll('#'+incomingHash);
            }
        }
    }


    // イベントを追加する関数
    function addEvent(eventTarget, eventName, func){
        if(eventTarget.addEventListener){
            // モダンブラウザ
            eventTarget.addEventListener(eventName, func, false);
        }else if(window.attachEvent){
            // IE
            eventTarget.attachEvent('on'+eventName, function(){func.apply(eventTarget);});
        }
    }

    function setOnClickHandler(){
        var links = d.links;
        for(var i=0; i<links.length; i++){
            // ページ内リンクならスクロールさせる
            var link = links[i];
            var splitLinkHref = link.href.split('#');
            if(currentHref_WOHash == splitLinkHref[0] && d.getElementById(splitLinkHref[1])){
                addEvent(link, 'click', startScroll);
            }
        }
    }



    function startScroll(event){
        // リンクのデフォルト動作を殺す
        if(event){ // モダンブラウザ
            event.preventDefault();
            //alert('modern');
        }else if(window.event){ // IE
            window.event.returnValue = false;
            //alert('ie');
        }

        // thisは呼び出し元になってる
        setScroll(this.hash);

    }



    function setScroll(hash){
        // ハッシュからターゲット要素の座標をゲットする
        var targetEle = d.getElementById(hash.substr(1));
        if(!targetEle)return;
        // スクロール先座標をセットする
        var ele = targetEle
        var x = 0;
        var y = 0;
        while(ele){
            x += ele.offsetLeft;
            y += ele.offsetTop;
            ele = ele.offsetParent;
        }
        targetX = x;
        targetY = y;
        targetHash = hash;
        // スクロール停止中ならスクロール開始
        if(!scrolling){
            scrolling = true;
            scroll();
        }

    }



    function scroll(){
        var currentX = d.documentElement.scrollLeft||d.body.scrollLeft;
        var currentY = d.documentElement.scrollTop||d.body.scrollTop;
        var vx = (targetX - currentX) * easing;
        var vy = (targetY - currentY) * easing;
        var nextX = currentX + vx;
        var nextY = currentY + vy;
        if((Math.abs(vx) < 1 && Math.abs(vy) < 1)
           || (prevX === currentX && prevY === currentY)){
            // 目標座標付近に到達していたら終了
            scrollTo(targetX, targetY);
            scrolling = false;
           location.hash = targetHash;
            prevX = prevY = null;
            return;
        }else{
            // 繰り返し
            scrollTo(parseInt(nextX), parseInt(nextY));
            prevX = currentX;
            prevY = currentY;
            var scope = this;
            setTimeout(function(){scroll.apply(scope)},interval);
        }
    }
}());



/* /scrollsmoothly.js/ */


$(function() {


// groubal menu 

	// ロールオーバー画像を先読みする
	$("#g_navi li").saltPreload({addString: "_on"});


	// ホバー処理
	$("#g_navi li").hover(
		function(){
			var imgurl = $(this).find("img").attr("src");
			var filetype = imgurl.slice(-4);
			var bgurl = imgurl.replace(filetype, "_on" + filetype);
			
			$(this).closest("li").css({
				"background-image":"url("+bgurl+")",
				"background-repeat":"no-repeat",
				"background-position":"left top"
			});
			$(this).find("img").animate({opacity:0},0);
		},
		function(){
			$(this).find("img").stop().animate({opacity:1},300);
		}
	);


/* roll over */
	$('#head_link a img').rollover();

/* footer flat height */
	$('#footerlist >ul').flatHeights();

//外部リンク	
	$('a[class="outlink"]').click(function(){
						this.target = "_blank";
	});

// ソーシャルブックマーク制御

	$("ul.sns a").attr("target", "_blank");

	var sns, real_url, urlList = [];
	var page_title = $("title").text();
	for(i=0; i<$("ul.sns a").length; i++){
		urlList = $("ul.sns a").eq(i).attr("href");
		real_url = location.href;
		$("ul.sns a").eq(i).attr("href" , urlList.replace(L_HOME, real_url));
	};

	//現在のページURL
	var page_url = encodeURIComponent(window.location.href);
	//現在のページタイトル
	var page_title = encodeURIComponent(document.title);

	//はてなブックマーク
	$("#sns_hatena").click(function() {
		//別ウィンドウで開く
		window.open("http://b.hatena.ne.jp/append?" + page_url, "");
		return false;
	});

	//livedoorクリップ
	$("#sns_livedoor").click(function() {
		//別ウィンドウで開く
		window.open("http://clip.livedoor.com/clip/add?link=" + page_url + "&title=" + page_title + "&jump=myclip", "");
		return false;
	});

	//Twitter
	$("#sns_twitter").click(function() {
		//別ウィンドウで開く
		window.open("http://twitter.com/home?status=" + page_title + " " + page_url, "");
		return false;
	});

	//Googleブックマーク
	$("#sns_google").click(function() {
		//別ウィンドウで開く
		window.open("http://www.google.com/bookmarks/mark?op=edit&bkmk=" + page_url + "&title=" + page_title, "");
		return false;
	});

	//Yahoo!ブックマーク
	$("#sns_yahoo").click(function() {
		//別ウィンドウで開く
		window.open("http://bookmarks.yahoo.co.jp/action/bookmark?t=" + page_title + "&u=" + page_url + "&r=my&fr=ybm_yn", "");
		return false;
	});

	//Facebook
	$("#sns_facebook").click(function() {
		//別ウィンドウで開く
		window.open("http://www.facebook.com/sharer.php?u=" + page_url + "&t=" + page_title, "");
		return false;
	});



//アナリティクス
$('a[href^=https://saltworks.jp/]').click(function(){
  var url = location.href;
  if ( !url.match(/^https:/) ) {
   var L_HOME = $(this).attr('href');
   _gaq.push(['_link', L_HOME ]); return false;
  }
 });

 $('a[href^=http://dvd.saltwedding.jp]').click(function(){
  var url = location.href;
  if ( !url.match(/^http:/) ) {
   var L_HOME = $(this).attr('href');
   _gaq.push(['_link', L_HOME ]); return false;
  }
 });

});

