(function($){
/****************************************************************/





/*_________________________________
ウィンドウサイズの取得
---------------------------------*/
$.xGetWindowSize = function(){
	var obj={width:0,height:0};
	if (window.innerHeight) obj={width:window.innerWidth,height:window.innerHeight};
	else if (document.documentElement && document.documentElement.clientHeight != 0) obj={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight};
	else if (document.body) obj={width:document.body.clientWidth,height:document.body.clientHeight};
	return obj;
}
/*_________________________________
ドロップダウンエフェクト
universal.cssのdropdownクラス群必須
---------------------------------*/
$.xDropEffect = function(){
	$("ul","div.dropdown").slideUp(0);
	$("a","div.dropdown").attr("title","");
	$("div","div.dropdown").hover(
		function(){
			var target_el=$("ul",this);
			target_el.addClass("drophover");
			target_el.slideDown(100);
			var title_el=$("h3 a",this);
			if($.browser.msie) title_el.addClass("droptitle");
		},
		function(){
			var target_el=$("ul",this);
			target_el.removeClass("drophover");
			target_el.slideUp(0);
			var title_el=$("h3 a",this);
			if($.browser.msie) title_el.removeClass("droptitle");
		}
	);
	return this;
}

/*_________________________________
最大(最小)深度に設定
-----------------------------------
1.	最大深度
	$(element).xGetNextDepth(true);

2.	最小深度
	$(element).xGetNextDepth(false);
___________________________________*/
$.fn.xSetHighestDepth = function(b){
	var b=b==null?true:b;
	var depth = 0;
	var d = 0;	
	$.each($("body > *"),function(){
		d = $(this).css("z-index");
		if(b){
			if(d!="auto" && depth < Number(d)) depth = d;
		}else{
			if(d!="auto" && depth > Number(d)) depth = d;
		}
	});
	this.css("z-index",depth+1);
	return this;
}



/*_________________________________
指定要素のサイズを揃える
-----------------------------------
1.	heightを大きい側に合わせる
	$(element).xSizeEven({target:targetElement})

2.	heightを小さい側に合わせる
	$(element).xSizeEven({target:targetElement,rules:"small"})

3.	widthを大きい方に合わせる
	$(element).xSeizeEbent(target:targetElement,type:"width"})
___________________________________*/

$.fn.xSizeEven = function(args){
	var args = $.extend({target:"",type:"height",rules:"large"},args);
	if(!args.target) return;
	var target = $(args.target);
	if(args.type != "width"){
		var nH1 = this.height();
		var nH2 = target.height();
		if(args.rules == "large") (nH1>nH2) ? target.css("height",nH1) : this.css("height",nH2);
		else (nH1<nH2) ? target.css("height",nH1) : this.css("height",nH2);
	}
	if(args.type != "height"){
		var nW1 = $(this).width();
		var nW2 = target.width();
		if(args.rules == "large") (nW1>nW2) ? target.css("width",nW1) : this.css("width",nW2);
		else (nW1<nW2) ? target.css("width",nW1) : this.css("width",nW2);
	}
	return this;
}




/*_________________________________
最前面にブロックレイヤー作成
-----------------------------------
	$(element).xBlockLayer({target:targetElement,color:color,alpha:alpha,id:id,xClose:function})
___________________________________*/
$.fn.xBlockLayer = function(args){
	var args = $.extend({target:"body",color:"#000",alpha:"80",id:"blocklayer",xClose:""},args);
	$("body").append("<div id='"+args.id+"'></div>");
	var target=$("#"+args.id);
	var ua=$.browser;
	var ch=(ua.msie)?document.body.clientHeight:$("html").attr('clientHeight');
	var sh=(ua.msie)?document.body.scrollHeight:$("html").attr('scrollHeight');
	if(ch>sh) sh=(ua.opera)?ch:"100%";
	target.css({
		height:sh,
		width:"100%",
		background:args.color,
		position:"absolute",
		top:"0",
		left:"0"
	}).animate({opacity:0.7},0).xSetHighestDepth(true);
	$("#"+args.id).click(function(){
		if(args.xClose) args.xClose();
		else $(this).remove();
	});
	return this;
}




/*_________________________________
スムーススクロール
-----------------------------------
	$(ClickElement).xScroll({target:targetElement,time:ms})
	あらかじめhtml内に変数pageを設定し、bodyにpageと同名のIDを付加
	それにより、body#id内に#targetを発見したとき、もしくは単純なpagetop時にのみ処理を行う。
___________________________________*/
$.fn.xScroll = function(args){
	var args = $.extend({stage:($.browser.opera)?"html":"html,body",time:1000},args);
	this.click(function(){
		var target=$(this).attr("href").split("#")[1];
		if($(target=="body"||"#"+target,"body#"+page)[0]){
			var nTop=$("#"+target).offset().top-250||0;
			$(args.stage).animate({scrollTop:nTop},args.time,'swing');
			return false;
		}else{
			return true;
		}
	});
	return this;
}




/*_________________________________
コンテンツの開閉
-----------------------------------
1.	引数指定なし	クリックした次にある要素を開閉する
	$(ClickElement).xOpenClose();
	
2.　引数に開閉要素を指定　	指定要素を開閉する
	$(ClickElement).xOpenClose({tareget:targetElement});
___________________________________*/
$.fn.xOpenClose = function(args){
	var args = $.extend({target:$(this[0]).next(),time:200},args);
	var target = $(args.target);
	if(target.css("display") == "none") target.slideDown(args.time);
	else target.slideUp("fast");
	return this;
}



/*_________________________________
ツールチップスの表示
-----------------------------------
	・指定タグのタイトルタグを元に、指定要素を表示する。
	・Universal.css(div#tooltips)を使用
	
	$(ロールオーバー要素).xToolTips(
		tips:ツールチップス要素のID名,
		x:ツールチップスのx座標(マウスポインタからの距離),
		y:ツールチップスのy座標(マウスポインタからの距離),
		title:ツールチップスのテキスト内容(title属性よりも優先して表示する)
	)
___________________________________*/
$.fn.xToolTips = function(args){
	var args=$.extend({tips:"tooltips",x:15,y:-40,title:""},args);
	$(this).each(function(){
		var me=$(this);
		var title=(args.title||me.attr("title"));
		$("img",me).each(function(){$(this).attr("alt","")});
		me.hover(
			function(e){
				$("#"+args.tips).hide().remove();
				me.attr("title","");
				$("body").append("<div id='"+args.tips+"'>"+title+"</div>");
				var level=Number($("img#noias_viewer_stage").css("zIndex"))+1;
				if(!level) level=10000;
				$("#"+args.tips).css({position:"absolute",top:e.pageY+args.y,left:e.pageX+args.x,zIndex:level});
			},
			function(){
				me.attr("title",title);
				$("#"+args.tips).hide().remove();
			}
		);
		me.mousemove(function(e){
			$("#"+args.tips).css({top:e.pageY+args.y,left:e.pageX+args.x});
		});
	});
	return this;
}
/*_________________________________
画像拡大
-----------------------------------
	aのhrefを取得し、新画像を読み込む
	$(a.class or a#ID).xImgLager({stage_name:新画像ID名,block_name:ブロックレイヤーID名})
	※オプションは、IDがバッティングしそうな場合のみ。
___________________________________*/
$.fn.xImgLarger=function(args){
	var args=$.extend({stage_name:"noias_viewer_stage",block_name:"blocklayer",loader_name:"noias_viewer_loader",overlay_name:"noias_viewer_overlay",border_width:5},args);
	var this_el=this;
	var img_el=$("img",this);
	
	/*
	img_el.removeAttr("alt");
	this_el.attr("tooltips","拡大する").removeAttr("title");
	this_el.css("outline","none");
	*/
	
	this.xToolTips({title:"拡大する"});
	//Close Action
	var xClose=function(){
		var stage_el=$("#"+args.stage_name);
		$("div#"+args.loader_name).remove();
		if(stage_el.attr("loaded")){
			stage_el.animate(
				{
					width:stage_el.attr("_width"),
					height:stage_el.attr("_height"),
					top:stage_el.attr("_y"),
					left:stage_el.attr("_x")
				},
				{
					complete:function(){
						$("img",this_el).css("visibility","visible");
						$("#"+args.block_name).remove();
						stage_el.remove();
						$("#tooltips").hide().remove();
						if($.browser.msie) $("select").css("visibility","visible");
					}
				},
				400
			);
		}else{
			$("#"+args.block_name).remove();
			stage_el.remove();
			$("#tooltips").hide().remove();
			if($.browser.msie) $("select").css("visibility","visible");
		}
	}
	//Enlarge Action
	function xEnlarge(stage_el,target_el,loader_el,window_obj,offset_obj,nW,nH){
		var new_nW=stage_el.width();
		var new_nH=stage_el.height();
		var new_nX=(window_obj.width/2)-(new_nW/2);
		var new_nY=(window_obj.height/2)+(document.body.scrollTop||document.documentElement.scrollTop)-(new_nH/2);
		stage_el.
			attr("loaded",true).
			css({"border":args.border_width+"px solid #fff","position":"absolute","width":nW,"height":nH,"top":offset_obj.top,"left":offset_obj.left}).
			animate({width:new_nW,height:new_nH,top:new_nY,left:new_nX},300);
		//base image & loader image hide
		target_el.css("visibility","hidden");
		loader_el.remove();
	}
	
	
	//Main Action
	this.click(
		function(){
			//ie only
			if($.browser.msie) $("select").css("visibility","hidden");
			//Put Block
			$(this).xBlockLayer({xClose:xClose,id:args.block_name});
			$("#"+args.block_name).css("cursor","pointer").xToolTips({title:"閉じる"});
			//Set Property
			var target_el=$("img",this);
			var imgpath=$(this).attr("href");
			var offset_obj=target_el.offset();
			var window_obj=$.xGetWindowSize();
			var nW=target_el.width();
			var nH=target_el.height();
			//Put Load Element
			$("body").append("<img src='"+imgpath+"' id='"+args.stage_name+"' /><div id='"+args.loader_name+"'></div>");
			//Set Loader
			var loader_el=$("div#"+args.loader_name);
			loader_el.
				animate({opacity:0.4},0).
				css({"z-index":Number($("div#blocklayer").css("zIndex"))+1,"border":args.border_width+"px solid #fff","background":"#fff url(https://ss2.xrea.com/pu-pi.com/wp-content/themes/pu-pi/images/share/loader.gif) no-repeat center center","position":"absolute","width":nW,"height":nH,"top":(offset_obj.top)-args.border_width,"left":(offset_obj.left)-args.border_width}).
				click(xClose);
			//Set Stage
			var stage_el=$("#"+args.stage_name);
			stage_el.
				css("cursor","pointer").
				xSetHighestDepth(true).
				attr({"_x":(offset_obj.left)-args.border_width,"_y":(offset_obj.top)-args.border_width,"_width":nW,"_height":nH}).
				click(xClose).
				xToolTips({title:"閉じる"});
			//2nd Enlarge
			if(nW<stage_el.width()) xEnlarge(stage_el,target_el,loader_el,window_obj,offset_obj,nW,nH);
			//First Enlarge
			else stage_el.load(function(){xEnlarge(stage_el,target_el,loader_el,window_obj,offset_obj,nW,nH)});
			//finish
			return false;
		}
	);
	return this;
}


/*_________________________________
Cookieの保存・読み出し
-----------------------------------
読み込み
	$.cookie('クッキー名');
書き込み
	$.cookie('クッキー名','保存したい値',{expires: 保存したい日数,path:'cookieが有効なパス'});
削除
	$.cookie('クッキー名',null);
___________________________________*/
$.cookie = function(name, value, options) {
    if (typeof value != 'undefined'){
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString();
        }
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
/****************************************************************/
})(jQuery);
