﻿
/*

RotationSlider for jQuery(gt Ver 1.3.2) 
Developped  by Coichiro Aso
Copyright Codesign.verse 2009　http://codesign.verse.jp/
Licensed under the MIT license:http://www.opensource.org/licenses/mit-license.php/

コピーライト書いてますが、削除しない限り
ご自由にお使い頂けます
ただし使用の際は、自己責任でお願いします。

-------------------------------------------------------------------------------------------*/

/*note
↑＝→＊↑↑/→→ で求めることができる。
等しくないの演算子は「!=」
$.inArray(value,array)=index
aとかの挙動を停止するときは、関数の戻り値にfalseを設定する？！
------------------------------------------------------------------------------------------*/
(function($) {

    $.fn.rotationslider = function(options) {

        var defaults = {
            radi: 3200,
            litradi: 10,
            speed: 1000
        };

        var options = $.extend(defaults, options);
        var target = $(this);
        var elem = $("li", target);
        var ewid = elem.width();
        var ehei = elem.height();
        var clicker = $("div#csb a");
        var iwid = [];
        var ihei = [];
        var xpos = [];
        var ypos = [];
        var mycos = [];
        var mysin = [];
        var myange = [];
        var myscale = [];
        var myopac = [];
        var myzindex = [];
        var step = Math.PI * 2 / elem.length;
        var offset = 0;
        var radi = options.radi;
        var camdist = radi * 2;
        var scrz = radi;
        var speed = options.speed;
        var ids = [];
        var trp = 0;

        function setimgsize() {
            for (i = 0; i < elem.length; i++) {
                var elemi = $("img", elem[i]);
                if (elemi.length != 0) {
                    for (n = 0; n < elemi.length; n++) {
                        iwid[i * 10 + n] = $(elemi[n]).width();
                        ihei[i * 10 + n] = $(elemi[n]).height();
                    }
                }
            }
        }

        function setids() {
            for (i = 0; i < elem.length; i++) {
                ids[i] = "#" + $(elem[i]).attr("id");
            }
        }

        function setpos(spd, chc) {

            if (Math.abs(offset) > elem.length - 1) {
                offset = 0
            }

            if (chc == "s" || chc == "e") {
                offset = offset;
            } else {
                if (chc >= 0) {
                    offset += 1;
                } else if (chc < 0) {
                    offset -= 1;
                }
            }

            for (i = 0; i < elem.length; i++) {
                myange[i] = (i + offset) * step % (Math.PI * 2);
                mycos[i] = Math.cos(myange[i]);
                mysin[i] = Math.sin(myange[i]);
                myscale[i] = scrz / (camdist - mycos[i] * radi);
                xpos[i] = mysin[i] * radi * myscale[i] - ewid * myscale[i] / 2 + target.width() / 2;
                ypos[i] = target.height() / 2 - ehei * myscale[i] / 2;
                myzindex[i] = Math.round(20 + mycos[i] * 10);
                myopac[i] = 0.7 + mycos[i] * 0.3;
            }

            for (i = 0; i < elem.length; i++) {
                $(elem[i])
					.css("z-index", myzindex[i])
					.animate({
					    top: ypos[i],
					    left: xpos[i],
					    width: ewid * myscale[i],
					    height: ehei * myscale[i],
					    opacity: myopac[i],
					    fontSize: myscale[i] * 100 + "%"
					}, spd);
                var elemi = $("img", elem[i]);
                if (elemi.length != 0) {
                    for (n = 0; n < elemi.length; n++) {
                        $(elemi[n])
						.animate({
						    width: iwid[i * 10 + n] * myscale[i],
						    height: ihei[i * 10 + n] * myscale[i]
						}, spd, "linear");
                    }
                }
            }

        }

        function smalllight() {
            scrz = radi / options.litradi;
            setpos(speed / 2, "s");
        }

        function biglight() {
            scrz = radi;
            setpos(speed / 2, "e");
        }

        function seteng(n) {
            trp = 1;

            smalllight();

            for (i = 0; i < Math.abs(n); i++) {
                (function(m) {

                    setTimeout(function() { setpos(speed / Math.abs(n), n); }, m * speed / Math.abs(n));

                })(i);

            }

            setTimeout(biglight, speed);

        }

        setimgsize();
        biglight();
        setids();

        clicker.click(function() {

            if (trp != 1) {
                var myid = $.inArray($(this).attr("href"), ids);
                var nowid = $.inArray(0, myange);

                if (Math.abs(nowid - myid) > elem.length / 2) {
                    if (nowid > elem.length / 2) {
                        myid = nowid - (myid + elem.length);
                    } else if (nowid <= elem.length / 2) {
                        myid = nowid - (myid - elem.length);
                    }
                } else {
                    myid = nowid - myid;
                }

                seteng(myid);

                setTimeout(function() { trp = 0; }, speed * 2);

                return false;
            }

        });

    }

})(jQuery);
