/*
 * jQuery.cordingHelper
 *
 * @version		1.1.2-beta
 * @copyright	Copyright (c) 2011 Smart Desgin Association Co.,Ltd.
 * @link		http://www.s-design.jp/
 * @author		mayu
 */
(function($){
    var appVersion = window.navigator.appVersion.toLowerCase();
    $.ie6 = appVersion.indexOf("msie 6.0") > -1 ? true : false;
    
    var rolloverSuffix = '_on';
    
    $.fn.imgRollover = function(options){
        return this.each(function(){
            $.imgRollover($(this), options);
        });
    };
    $.imgRollover = function(container, options){
        var settings = {
            'inspeed': 0,
            'outspeed': 0,
            'ineasing': 'swing',
            'outeasing': 'swing'
        };
        if (options) 
            $.extend(settings, options);
        
        var src = container.children('img').attr('src');
        if (typeof src != 'undefined') {
            container.css({
                position: "relative"
            }).before("<img style='position:absolute;' src=" + src.substring(0, src.lastIndexOf('.')) + rolloverSuffix + src.substring(src.lastIndexOf('.'), src.length) + " alt='' />");
            
            if (settings.inspeed == 0 && settings.inspeed == 0) 
                container.children('img').hover(function(){
                    $(this).css({
                        'opacity': '0'
                    });
                }, function(){
                    $(this).css({
                        'opacity': '1'
                    });
                });
            else 
                container.children('img').hover(function(){
                    $(this).stop().animate({
                        'opacity': '0'
                    }, settings.inspeed, settings.outeasing);
                }, function(){
                    $(this).stop().animate({
                        'opacity': '1'
                    }, settings.outspeed, settings.outeasing);
                });
        }
    };
    
    $.fn.alphaRollover = function(options){
        return this.each(function(){
            jQuery.alphaRollover(jQuery(this), options);
        });
    };
    $.alphaRollover = function(container, options){
        var settings = {
            'inspeed': 0,
            'outspeed': 0,
            'ineasing': 'swing',
            'outeasing': 'swing',
            'opacity': 0.7
        };
        if (options) 
            jQuery.extend(settings, options);
        
        if (settings.inspeed == 0 && settings.inspeed == 0) 
            container.children('img').hover(function(){
                jQuery(this).css({
                    'opacity': settings.opacity
                });
            }, function(){
                jQuery(this).css({
                    'opacity': '1'
                });
            });
        else 
            container.children('img').hover(function(){
                jQuery(this).stop().animate({
                    'opacity': settings.opacity
                }, settings.inspeed, settings.outeasing);
            }, function(){
                jQuery(this).stop().animate({
                    'opacity': '1'
                }, settings.outspeed, settings.outeasing);
            });
    };
    
    
    $.fn.brightRollover = function(options){
        return this.each(function(){
            jQuery.brightRollover(jQuery(this), options);
        });
    };
    $.brightRollover = function(container, options){
        var settings = {
            'inspeed': 300,
            'outspeed': 600,
            'ineasing': 'swing',
            'outeasing': 'swing',
            'opacity': 0.7
        };
        if (options) 
            jQuery.extend(settings, options);
        
        container.children('img').hover(function(){
            jQuery(this).stop().css({
                'opacity': 0.2
            })
            jQuery(this).animate({
                'opacity': settings.opacity
            }, settings.inspeed, settings.outeasing);
        }, function(){
            jQuery(this).stop().animate({
                'opacity': '1'
            }, settings.outspeed, settings.outeasing);
        });
    };
    
    $.fn.alphaToObj = function(options){
        return this.each(function(){
            jQuery.alphaToObj(jQuery(this), options);
        });
    };
    $.alphaToObj = function(container, options){
        var settings = {
            'speed': 1000,
            'ineasing': 'swing',
            'delay': 0
        };
        if (options) 
            jQuery.extend(settings, options);
        
        container.show().css({
            'opacity': '0'
        }).delay(settings.delay).animate({
            'opacity': '1'
        }, settings.speed, settings.outeasing);
    };
    
    $.fn.smoothScroll = function(options){
        return this.each(function(){
            jQuery.smoothScroll(jQuery(this), options);
        });
    };
    $.smoothScroll = function(container, options){
        var settings = {
            'speed': 1000,
            'easing': 'swing',
            'value': 0
        };
        if (options) 
            jQuery.extend(settings, options);
        
        container.click(function(e){
            e.preventDefault();
            var scrollArr = jQuery(this).attr('href').split("_");
            var pos = jQuery(scrollArr[0]).offset();
            var ty = Math.min(pos.top, (jQuery(document).height() - jQuery(window).height())) - 80;
            jQuery('html,body').animate({
                scrollTop: ty
            }, settings.speed, settings.outeasing);
        });
        
        
    };
    
    // start timer
    $.fn.startTimer = function(d, c, b){
        return this.each(function(){
            //タイマー停止
            jQuery(this).stopTimer(b);
            var a = jQuery(this).data("timers") ||
            {};
            //新しいタイマーを保持
            a[b] = setTimeout(d, c);
            jQuery(this).data("timers", a);
            
        });
    };
    
    // stop timer
    $.fn.stopTimer = function(d){
        return this.each(function(){
            //タイマー削除
            var c = jQuery(this).data("timers") ||
            {};
            c[d] && clearTimeout(c[d])
        });
    };
    
    // Stop
    $.fn.animationStop = function(){
        return this.queue([]).stop();
    };
    
    // slide up
    $.fn.animationSlideUp = function(i_speed, i_callback){
        this.animationStop();
        return this.each(function(){
            var jQuerytarget = jQuery(this);
            //高さを保持しておく
            jQuerytarget.data("animationSlideHeight") || jQuerytarget.data("animationSlideHeight", jQuerytarget.height());
            if (jQuerytarget.is(":visible")) {
                return jQuerytarget.animate({
                    height: 0
                }, i_speed, function(){
                    jQuerytarget.hide();
                });
            }
        });
    }
    
    
    // setViewCollback
    $.belowthefold = function(element, settings){
        if (settings.container === undefined || settings.container === window) {
            var fold = jQuery(window).height() + jQuery(window).scrollTop();
        }
        else {
            var fold = jQuery(settings.container).offset().top + jQuery(settings.container).height();
        }
        return fold <= jQuery(element).offset().top - settings.threshold;
    };
    
    $.rightoffold = function(element, settings){
        if (settings.container === undefined || settings.container === window) {
            var fold = jQuery(window).width() + jQuery(window).scrollLeft();
        }
        else {
            var fold = jQuery(settings.container).offset().left + jQuery(settings.container).width();
        }
        return fold <= jQuery(element).offset().left - settings.threshold;
    };
    
    $.abovethetop = function(element, settings){
        if (settings.container === undefined || settings.container === window) {
            var fold = jQuery(window).scrollTop();
        }
        else {
            var fold = jQuery(settings.container).offset().top;
        }
        return fold >= jQuery(element).offset().top + settings.threshold + jQuery(element).height();
    };
    
    $.leftofbegin = function(element, settings){
        if (settings.container === undefined || settings.container === window) {
            var fold = jQuery(window).scrollLeft();
        }
        else {
            var fold = jQuery(settings.container).offset().left;
        }
        return fold >= jQuery(element).offset().left + settings.threshold + jQuery(element).width();
    };
    
    // ViewCollback
    $.fn.setViewCollback = function(options){
        return this.each(function(){
            jQuery.setViewCollback(jQuery(this), options);
        });
    };
    $.setViewCollback = function(container, options){
        var settings = {
            on: 'undefined',
            off: 'undefined',
            threshold: -300,
            container: window
        };
        if (options) 
            jQuery.extend(settings, options);
        var container = container;
        if (!jQuery.belowthefold(container, settings)) {
            container.view = true;
            settings.on();
        }
        jQuery(window).scroll(function(){
            if (jQuery.abovethetop(container, settings)) {
                if (container.view) {
                    container.view = false;
                    settings.off();
                }
            }
            else 
                if (!jQuery.belowthefold(container, settings)) {
                    if (!container.view) {
                        container.view = true;
                        settings.on();
                    }
                }
                else {
                    if (container.view) {
                        container.view = false;
                        settings.off();
                    }
                }
        });
    };
    
    // hashMove
    $.hashMove = function(value){
        var hash = location.hash;
        if (!hash || hash == "#") 
            return false;
        value += jQuery(hash).offset().top;
        jQuery(jQuery.browser.safari ? 'body' : 'html').animate({
            'scrollTop': value
        }, 0);
        return false;
    }
    
    // ImgAnimatonClass
    $.fn.imgSwitcher = function(options){
    
        var settings = {
            images: null,
            interval: 5000,
            autoStart: true,
            duration: 1000,
            easing: "linear",
            loop: true,
            random: false,
            path: null
        };
        if (options) 
            jQuery.extend(settings, options);
        var base = this;
        base.init = function(){
            alert('init');
        }
        base.start = function(){
            alert('start');
        }
        return this.each(function(){
            base.init();
        });
    };
    
    // background-position
    if (!document.defaultView || !document.defaultView.getComputedStyle) { // IE6-IE8
        var oldCurCSS = jQuery.curCSS;
        jQuery.curCSS = function(elem, name, force){
            if (name === 'background-position') {
                name = 'backgroundPosition';
            }
            if (name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[name]) {
                return oldCurCSS.apply(this, arguments);
            }
            var style = elem.style;
            if (!force && style && style[name]) {
                return style[name];
            }
            return oldCurCSS(elem, 'backgroundPositionX', force) + ' ' + oldCurCSS(elem, 'backgroundPositionY', force);
        };
    }
    
    var oldAnim = $.fn.animate;
    $.fn.animate = function(prop){
        if ('background-position' in prop) {
            prop.backgroundPosition = prop['background-position'];
            delete prop['background-position'];
        }
        if ('backgroundPosition' in prop) {
            prop.backgroundPosition = '(' + prop.backgroundPosition;
        }
        return oldAnim.apply(this, arguments);
    };
    
    function toArray(strg){
        strg = strg.replace(/left|top/g, '0px');
        strg = strg.replace(/right|bottom/g, '100%');
        strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g, "$1px$2");
        var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
        return [parseFloat(res[1], 10), res[2], parseFloat(res[3], 10), res[4]];
    }
    
    $.fx.step.backgroundPosition = function(fx){
        if (!fx.bgPosReady) {
            var start = jQuery.curCSS(fx.elem, 'backgroundPosition');
            if (!start) {//FF2 no inline-style fallback
                start = '0px 0px';
            }
            
            start = toArray(start);
            fx.start = [start[0], start[2]];
            var end = toArray(fx.end);
            fx.end = [end[0], end[2]];
            
            fx.unit = [end[1], end[3]];
            fx.bgPosReady = true;
        }
        //return;
        var nowPosX = [];
        nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
        nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
        fx.elem.style.backgroundPosition = nowPosX[0] + ' ' + nowPosX[1];
        
    };
    
    // shuffle
    $.fn.shuffle = function(){
        return this.each(function(){
            var items = jQuery(this).children();
            return (items.length) ? jQuery(this).html(jQuery.shuffle(items)) : this;
        });
    }
    
    $.shuffle = function(arr){
        for (var j, x, i = arr.length; i; j = parseInt(Math.random() * i), x = arr[--i], arr[i] = arr[j], arr[j] = x) 
            ;
        return arr;
    }
})(jQuery);

