$(function(){
    var $window = $('.blast_window'),
        $maximize = $window.find('.maximize'),
        $minimize = $window.find('.minimize'),
        $close = $window.find('#clsbtn'),
        $title = $window.find('#blast_title'),
        $contents = $window.find('.blast_content'),
        //$showButton = $(''),
        $showButton = $('#blast'),
        $baseWindow = $(window);
        /*
         * ドラッグできるようにする。
         */
    //jQuery('.window').draggable();
    $title.mousedown(function() {
        //$('.window').draggable();
        $window.draggable( {
		//containment:'#mv_dlg',
		containment:'#tasuke',
		scroll: false,	
	});
     });
    $title.mouseup(function(){
        $window.draggable('destroy');
    });
    $title.mouseenter(function(){
        $(this).css("cursor","move");
    });
    $title.mouseleave(function(){
        $(this).css("cursor","default");
    });

    /*
     * (ブラウザ全体の)ウィンドウサイズを取得する。
     */
    var width = $baseWindow.width(),
        height = $baseWindow.height();

    /*
     * もともと表示されているウィンドウサイズを取得する。
     */
    var originalWidth = $window.width(),
        originalHeight = $window.height();
     
    /*
     * ウィンドウの幅、高さ、位置を記録するための変数を準備
     */
    var windowWidth, windowHeight, windowOffset;     
     
    var duration = 750;
     
     
    /*
     * 初期サイズ合わせ。
     */
    windowWidth = $window.width();
    $title.css({ width: windowWidth+'px' });
     
    /*
     * 閉じるボタン(×)をクリック時の挙動
     */
    $close.on('click', function(){
	if ($window.hasClass('minimized')) {
		var p3pos='';
        	for(var i=0; i<minPos.length; i++) {
        	    if(minPos[i] == 'blast') {
        	            p3pos = i;
        	    }
        	}
        	for(var i=p3pos; i<minPos.length; i++) {
        	    if (minPos[i+1] !== undefined) {
        	            minPos[i] = minPos[i+1];
        	    } else {
        	            minPos.pop();
        	    }
        	    leftpos = (parseInt(175)*(parseInt(i))+ parseInt(5)*(parseInt(i+1)))+'px';
        	    $("."+minPos[i+1]+"_window").css('left',leftpos);
        	}
	}
        $window.css({ display: 'none' });
    });
    /*
     * 最大化ボタン(□)をクリックした時の挙動
     */
    $maximize.on('click', function(){
        width = $baseWindow.width();
        height = $baseWindow.height();
        /*
         * miximizedクラスを使って最大化フラグを管理
         */
        $(this).toggleClass('maximized');
        if($(this).hasClass('maximized')){
            /*
             * 最大化フラグがあるときは
             * ブラウザウィンドウの横幅、縦幅まで
             * ウィンドウサイズを拡張、
             * 位置は左上に移動する。
             */
             
            /*
             * 最大化解除の際の位置戻しができるように
             * ウィンドウの位置を事前に記憶しておく。
             */
            windowOffset=$window.offset();
            $window.stop(true).animate({
                top: '0px',
                left: '0px',
                width: width+'px',
                height: height+'px'
            }, {
                duration: duration,
                queue: false
            });
            $title.stop(true).animate({
                width: width+'px'
            },{
                duration: duration,
                queue: false
            });
            $contents.stop(true).animate({
                width: width+'px',
                height: height+'px'
            },{
                duration: duration,
                euque: false
            });
        } else {
            /*
             * ウィンドウの位置を記憶しておく。
             */
            $window.stop(true).animate({
                top: windowOffset.top+'px',
                left: windowOffset.left+'px',
                width: originalWidth+'px',
                height: originalHeight+'px'
            }, {
                duration: duration,
                queue: false
            });
            $title.stop(true).animate({
                width: originalWidth+'px'
            },{
                duration: duration,
                queue: false
            });
            $contents.stop(true).animate({
                width: originalWidth+'px',
                height: originalHeight+'px'
            },{
                duration: duration,
                euque: false
            });
        }
        $contents.css({display:'inline-block'});
    });

    /*
     * ウィンドウを表示 ボタンをクリックしたときの挙動
     */
    $showButton.on('click', function(){
	if($window.hasClass('minimized')){
	    $contents.css({ display: 'inline-block'});
            document.getElementById("bname").style.fontSize = "24px";
            $window.animate({
                width: windowWidth+'px',
                height: windowHeight+'px',
                top: windowOffset.top+'px',
                left: windowOffset.left+'px'
            },{
                duration: duration,
                queue: false
            });
            $title.animate({
                width: windowWidth+'px'
            },{
                duration: duration,
                queue: false
            });
	    $window.toggleClass('minimized');
        } else {
        	$window.css({ display: 'inline-block' });
	}
    });
     
     
 
    /*
     * 最小化(-)ボタンをクリックしたときの挙動
     */
    $minimize.on('click', function(){
        //var height = $(window).height();
	//var height = $("#mv_dlg").innerHeight();
	//var height = $("#mv_dlg").outerHeight() + 56;
	var height = $("#bottom").offset().top;
        var titleHeight = $title.height();
	document.getElementById("bname").innerHTML = "BLAST";
	document.getElementById("bname").style.fontSize = "13px";
	//$window.css('position','absolute');
 
        /*
         * minimizedクラスで最小化フラグを管理
         */
        $window.toggleClass('minimized');
        if($window.hasClass('minimized')){
            /*
             * 最小化フラグありの場合は
             * ウィンドウの現在位置を記録した後に
             * コンテンツ非表示、ウィンドウの横幅を
             * 変更した後に画面最下部に移動させる。
             */
	    minPos[minPos.length] = 'blast';
            windowOffset= $window.offset();
            windowWidth = $window.width();
            windowHeight = $window.height();
            $contents.css({ display: 'none' });
            $window.css('min-width','170px');
	    $window.css('min-height',titleHeight+'px');
            $window.animate({
                top: height +'px',
                //left: '0px',
		left: (parseInt(175)*(parseInt(minPos.length)-parseInt(1)) + parseInt(5)*parseInt(minPos.length))+'px',
                //width: originalWidth+'px',
                width: '170px',
                height: titleHeight+'px'
		//height:'16px'
            },{
                duration: duration,
                queue: false
            });
            $title.animate({
                //width: originalWidth+'px'
                width: '170px',
		top: '0px',
		left: '0px'
            },{
                duration: duration,
                queue: false
            });
            $minimize.animate({
                top: '3px'
            },{
                duration: duration,
                queue: false
            });
            $close.animate({
                top: '3px'
            },{
                duration: duration,
                queue: false
            });

		$(".under_blast").toggleClass('fa-window-minimize fa-window-restore');
        } else {
            /*
             * 最小化フラグを持たない場合は
             * コンテンツを再表示したのち、ウィンドウサイズ、位置を
             * 以前の状態に戻す。
             */
            for(var i=0; i<minPos.length; i++) {
                if(minPos[i] == 'blast') {
                        p3pos = i;
                }
            }
            for(var i=p3pos; i<minPos.length; i++) {
                if (minPos[i+1] !== undefined) {
                        minPos[i] = minPos[i+1];
                } else {
                        minPos.pop();
                }
                leftpos = (parseInt(175)*(parseInt(i))+ parseInt(5)*(parseInt(i+1)))+'px';
                $("."+minPos[i+1]+"_window").css('left',leftpos);
            }
            $contents.css({ display: 'inline-block'});
	    $window.css('min-width','178px');
	    $window.css('min-height','42px');
	    document.getElementById("bname").innerHTML = "&nbsp;&nbsp;BLAST";
	    document.getElementById("bname").style.fontSize = "20px";
	    //$window.css('position','fixed');
            $window.animate({
                width: windowWidth+'px',
                height: windowHeight+'px',
                top: windowOffset.top+'px',
                left: windowOffset.left+'px'
            },{
                duration: duration,
                queue: false
            });
            $title.animate({
                width: windowWidth+'px',
		top: '4px',
                left: '4px'
            },{
                duration: duration,
                queue: false  
            });
            $minimize.animate({
                top: '9px'
            },{
                duration: duration,
                queue: false
            });
            $close.animate({
                top: '9px'
            },{
                duration: duration,
                queue: false
            });

	    $(".under_blast").toggleClass('fa-window-restore fa-window-minimize');
        }
    });

    $window.mousemove(function(e) {
	var minflg = 0;
	if($window.hasClass('minimized')){
		minflg = 1;
	}
	if (minflg == 0) {
		width = $window.width();
		height = $window.height();
		var curposX = e.offsetX;
       		var curposY = e.offsetY;
		if(e.target.id == 'dialog_blast') {
       		    if (curposX < 4 && curposY < 4) {
        	      	$(this).css("cursor","se-resize");
       		    } else if (curposX <4 && curposY > height-4) {
        	       	$(this).css("cursor","sw-resize");
       		    } else if(curposX > width-4 && curposY > height-4){
        	       	$(this).css("cursor","se-resize");
       		    } else if (curposX > width-4 && curposY <4) {
        	       	$(this).css("cursor","ne-resize");
       		    } else if (curposX > width-4 || curposX < 4 ) {
        	       	$(this).css("cursor","e-resize");
       		    } else if (curposY > height-4 || curposY < 4) {
        	       	$(this).css("cursor","n-resize");
       		    } else {
			$(this).css("cursor","default");
		    }
		} else {
			$(this).css("cursor","default");
		}
	}
    });
	
    var move_flg = "";
    var moveFlgLeft = false,
        moveFlgRight = false,
        moveFlgTop = false,
        moveFlgBottom = false;
    var dlgW = 0;
    var dlgH = 0;
    var clkposX = 0;
    var clkposY = 0;
//    var leftposX = 0;
//    var curposX = 0;
//    var curposY = 0;
    $window.mousedown(function(e) {
	changeDialogZindex(".blast_window");
	setMoveFlag("false");	// 直前にmouseupイベントが起きなかった場合の対策

	var minflg = 0;
        if($window.hasClass('minimized')){
                minflg = 1;
        }
        if (minflg == 0) {
		//get click position
        	dlgW = $window.width();
        	dlgH = $window.height();
		clkposX = e.pageX;
		clkposY = e.pageY;
		//get left and top position of dialog
		var leftposX = parseInt(document.getElementById("dialog_blast").style.left.replace("px",""));
		//if dialog don't move
		if (isNaN(leftposX)) {
        	        leftposX = 0;
        	}
		var rightposX = leftposX + dlgW;
		
		topposY = parseInt(document.getElementById("dialog_blast").style.top.replace("px",""));
		if (isNaN(topposY)) {
        	        topposY = 0;
        	}
		bottomposY = topposY + dlgH;
	
		//set click-flag and get current position
		if (leftposX >  clkposX - 4) { //click left edge
			moveFlgLeft = true;
			setMoveFlag("true");
		}
		else if (rightposX - 4 <  clkposX) { //click right edge
			moveFlgRight = true;
			setMoveFlag("true");
		}
		if ( topposY > clkposY - 4) { //click top edge
			moveFlgTop = true;
			setMoveFlag("true");
        	}
        	else if ( bottomposY -4 < clkposY) { //click top edge
			moveFlgBottom = true;
			setMoveFlag("true");
        	}
	}
    });
/*
    $window.mouseup(function(e) {
	setMoveFlag("false");
    });
    $("#tasuke").mouseup(function(e) {
	setMoveFlag("false");
    });
    $("[id^=dialog]").mouseup(function(e) {
	setMoveFlag("false");
    });
*/
    var mouseMoveFunc = function(e) {
        var minflg = 0;
        if($window.hasClass('minimized')){
                minflg = 1;
        }
        if (minflg == 0) {
		if (move_flg == "true") {
                        var curposX = e.pageX;
                          if(curposX < 1) curposX = 1;
                        var curposY = e.pageY;
                          if(curposY < 1) curposY = 1;
			if (moveFlgLeft) {
                                var curposMaxX = $('#tasuke').width() - parseInt($window.css("min-width")) - 2;
                                if(curposX > curposMaxX) curposX = curposMaxX;

				changeW = dlgW - (curposX-clkposX);
				$window.css("left",curposX);
				$window.css("width",changeW);
				$title.css("max-width",changeW-12);
				$title.css("width",changeW);
                		$(".blast_content").css("width",changeW-6);
			}
			if (moveFlgRight) { 
                                var curposMaxX = $('#tasuke').width() - 1;
                                if(curposX > curposMaxX) curposX = curposMaxX;

				changeW = dlgW + (curposX-clkposX);
				$window.css("width",changeW);
				$title.css("max-width",changeW-12);
				$title.css("width",changeW);
				$(".blast_content").css("width",changeW-6);
			}
			if (moveFlgTop) {
                                var curposMaxY = $('#tasuke').height() - parseInt($window.css("min-height")) - 2;
                                if(curposY > curposMaxY) curposY = curposMaxY;

                	        changeY = dlgH + (clkposY-curposY);
				chgtopY = curposY;
                	        $window.css("top",chgtopY);
                	        $window.css("height",changeY);
                	        $(".blast_content").css("height",changeY-43);
                	}
                	if (moveFlgBottom) {
                                var curposMaxY = $('#tasuke').height() - 1;
                                if(curposY > curposMaxY) curposY = curposMaxY;

                	        changeY = dlgH + (curposY-clkposY);
                	        $window.css("height",changeY);
                	        $(".blast_content").css("height",changeY-43);
                	}
		}
	}
    };
    function setMoveFlag(flg) {
        move_flg = flg;
        if(flg == "true") {
                $(":root").css("user-select", "none");
//                document.onselectstart = function(){return false;};
        } else {
                $(":root").css("user-select", "auto");
//                document.onselectstart = function(){return true;};
                moveFlgLeft = false;
                moveFlgRight = false;
                moveFlgTop = false;
                moveFlgBottom = false;
        }
    }
    $(document).mousemove(mouseMoveFunc);
    $(document).mouseup(function(e) { setMoveFlag("false"); });
//    $("#tasuke").mousemove(mouseMoveFunc);
//    $window.mousemove(mouseMoveFunc);
//    $("[id^=dialog]").mousemove(mouseMoveFunc);

});
