(function() {
    return topUtility = {
        twitter: function() {
            var user = 'dove_jp';
            var apiUrl = 'http://twitter.com/status/user_timeline/' + user + '.json?count=5&callback=?';
            var self = this;
            $('#twitter_container').append($('<ul id="twitter_lists"></ul>'));
            $.getJSON(apiUrl, function(obj) {
                for(var i = 0, l = obj.length; i < l; ++i) {
                    var dateStr = obj[i].created_at;
                    var reg = /([a-zA-z]+)\s([a-zA-z]+)\s([0-9]{2})\s([0-9]{2}:[0-9]{2}:[0-9]{2})\s\+0000\s([0-9]{4})/.exec(dateStr);
                    var d = new Date(reg[1] + ' ' + reg[2] + ' ' + reg[3] + ' ' + reg[4] + ' ' + reg[5]);
                    d.setTime(d.getTime() + 540 * 60 * 1000);
                    var body = obj[i].text;
                    //link = 'http://twitter.com/' + user + '/statuses/' + obj[i].id_str,
                    var date = (d.getMonth() + 1) + '月' + d.getDate() + '日 ';
                    var time = (d.getHours()) + ':' + d.getMinutes();
                    var img = obj[i].user.profile_image_url;
                    var body = self.twitterDetectUrl(body);
                    body = self.twitterHashUrl(body);
                    var list = $('<li class="tw_tweets"><div class="tw_img"><img src="' + img + '" alt="" /></div><div class="tw_info"><p class="tw_tweet">' + body + '<br /><span class="tw_date">'+ date + time +'</span></p></div></li>');
                    $('#twitter_lists').append(list).hide();
                };
                setTimeout(topUtility.twitterTicker, 500);
            });
        },
        twitterDetectUrl: function(str) {
            var reg = /.*?(http\:\/\/.*)/.exec(str);
            if (reg) {
                return str.replace(reg[1], '<a href="' + reg[1] + '" target="_blank">' + reg[1] + '</a>');
            } else {
                return str;
            }
        },
        twitterHashUrl: function(str) {
            var user = 'Dove_JP';
			var per = '%25';
            var reg = /.*?(#.*)/.exec(str);
            if (reg) { reg[2] = reg[1].replace('#','\%23');
                return str.replace(reg[1], '<a href="http://twitter.com/#search?q=' + user + reg[2] + ' "target="_blank">' + reg[1] +'</a>');
            } else {
                return str;
            }
        },
		twitterTicker: function() {
            $('#twitter_lists').show();
            var tweetLists = $('#twitter_lists > li');
            if (tweetLists.length > 1) {
                $('#twitter_container').jCarouselLite({
                    visible: 1,
                    auto: 10000,
                    speed: 1000,
                    vertical: true,
                    easing: ''
                });
            }
        },
        productsLineup: {
            init: function() {
                this.ids = ['#pl_new', '#pl_haircare', '#pl_facecare', '#pl_bodycare', '#pl_others'];
                this.start = 0;
                var self = this;
                this.allHide();
                this.showObj('#pl_new');
                //var newProductsStart = ($.cookie('mv') === '0') ? 1 : 0;
                this.carousel('#pl_new', 'pl_new', 0);
                this.nav();
                this.productsListHover();
            },
            allHide: function() {
                $(this.ids).each(function(i, e) {
                    $(e).hide();
                });
            },
            showObj: function(id) {
                $(id).css('opacity', 0).show().animate({'opacity': 1}, 300);
            },
            pointerInit: function(id, start) {
                this.listLen = $(id).find('li').length;
                var box = $(id + ' .pl_pointer');
                $(box).empty();
                if (this.listLen !== 1 ) {
                    this.pointers = [];
                    for (var i = 0; i < this.listLen; ++i) {
                        this.pointers.push('.pointer' + i);
                        var imgPath = (i === this.start) ? 'on' : 'off';
                        $(box).append('<span class="pointers pointer' + i + '"><img src="/top/images/pointer02-' + imgPath + '.png" alt="" /></span>');
                    };
                };
                this.arrowNavChange(id, this.start);
            },
            pointerChange: function(obj, id) {
                //li.slice(0).slice(0,1)
                var n = /li\.slice\(([0-9]+)\)\./.exec(obj.selector);
                $(id + ' .pointers').each(function(i, e) {
                    var img = $(this).find('img')[0];
                    var src = $(img).attr('src'), changeSrc = '';
                    if (i === parseInt(n[1])) {
                        changeSrc = src.replace('-off', '-on');
                    } else {
                        changeSrc = src.replace('-on', '-off');
                    };
                    $(img).attr('src', changeSrc);
                });
                this.arrowNavChange(id, n[1]);
            },
            carousel: function(id, idStr, start) {
                var self = this;
                this.start = (start) ? start : 0;
                self.pointerInit(id, start);
                $(id).jCarouselLite({
                    visible: 1,
                    speed: 500,
                    easing: 'easeOutQuad',
                    circular: false,
                    btnNext: ".pl_next_" + idStr,
                    btnPrev: ".pl_prev_" + idStr,
                    start: start,
                    btnGo: this.pointers,
                    afterEnd: function(a) {
                        self.pointerChange(a, id);
                    }
                });
            },
            nav: function() {
                var self = this;
                var obj = $('#products_lineup_nav a');
                $(obj).each(function(i, e) {
                    if (/.*?(\-on)\.(png|jpg|gif)/.test($(this).find('img').attr('src'))) {
                        $(this).addClass('selected');
                    }
                });
                $(obj).bind('click', function(event) {
                    event.preventDefault();
                    var id = $(this).attr('href');
                    self.navClearSelected(obj);
                    self.navAddSelected(this);
                    self.allHide();
                    self.showObj(id);
                    self.carousel(id, id.substring(1, id.length));
                });
                this.navHover(obj);
            },
            navHover: function(obj) {
                var self = this;
                $(obj).hover(
                    function(e) {
                        self.img = $(this).find('img');
                        self.src = $(self.img).attr('src');
                        var isOff = /.*?(\-off)\.(png|jpg|gif)/.test(self.src);
                        if (isOff) {
                            $(self.img).attr('src', self.src.replace('-off', '-on'));
                        };
                    },
                    function(e) {
                        if (!$(this).hasClass('selected')) {
                            $(self.img).attr('src', self.src.replace('-on', '-off'));
                        }
                    }
                );
            },
            navClearSelected: function(obj) {
                $(obj).each(function(i, e) {
                    if ($(this).hasClass('selected')) {
                        $(this).removeClass('selected');
                        var img = $(this).find('img');
                        var src = $(img).attr('src');
                        $(img).attr('src', src.replace('-sel', '-off'));
                    }
                });
            },
            navAddSelected: function(obj) {
                $(obj).addClass('selected');
                var img = $(obj).find('img');
                var src = $(img).attr('src');
                $(img).attr('src', src.replace('-on', '-sel'));
            },
            arrowNavChange: function(id, n) {
                n = parseInt(n);
                if (this.listLen === 1) {
                    this.arrowNavOffPrev(id);
                    this.arrowNavOffNext(id);
                };
                if (this.listLen !== 1 && n === 0) {
                    this.arrowNavOffPrev(id);
                    this.arrowNavOnNext(id);
                };
                if (this.listLen !== 1 && n + 1 === this.listLen) {
                    this.arrowNavOnPrev(id);
                    this.arrowNavOffNext(id);
                }
            },
            arrowNavOffPrev: function(id) {
                $(id + ' .pl_prev > img').attr('src', '/top/images/carousel/btn-prev02-off.png').css('cursor', 'default');
            },
            arrowNavOffNext: function(id) {
                $(id + ' .pl_next > img').attr('src', '/top/images/carousel/btn-next02-off.png').css('cursor', 'default');
            },
            arrowNavOnPrev: function(id) {
                $(id + ' .pl_prev > img').attr('src', '/top/images/carousel/btn-prev02-on.png').css('cursor', 'pointer');
            },
            arrowNavOnNext: function(id) {
                $(id + ' .pl_next > img').attr('src', '/top/images/carousel/btn-next02-on.png').css('cursor', 'pointer');
            },
            productsListHover: function() {
                $('.pl_list dd').hover(
                    function() {
                        var img = $(this).find('img');
                        var src = $(img).attr('src');
                        $(img).attr('src', src.replace('-off', '-on'));
                    },
                    function() {
                        var img = $(this).find('img');
                        var src = $(img).attr('src');
                        $(img).attr('src', src.replace('-on', '-off'));
                    }
                );
            }
        },
        mainVisualList: {
            'list': [
                {
                    'smallImg': '/top/images/bnr-soc.jpg',
                    'largeImg': '/top/images/visual_soc.jpg',
                    'link': '/camp/soc/campaign.html',
                    'alt': '最近気になるうねり・クセへ 金のダヴプレゼントキャンペーン！'
                }/*,
                {
                    'smallImg': '/top/images/bnr-proage.png',
                    'largeImg': '/top/images/visual_proage.jpg',
                    'link': '/camp/proage/index.html',
                    'alt': 'ダブ プロエイジシリーズ - マッサージ洗顔で輝く素肌へ。'
                }*/
            ]
        },
        mainVisual: function() {
            /*$('#camp_banners').hide();
            if (!$.cookie('mv')) {
                $.cookie('mv', '0');
            };*/
            if ($.cookie('mv') === '0') {
                $.cookie('mv', '1');
                $('#camp_banners').show();
                return;
            };
            if ($.cookie('mv') === '1') {
                $.cookie('mv', '0');
                $('#camp_banners').find('a').attr({'href': this.mainVisualList.list[1].link, 'target': '_blank'});
                $('#camp_banners').find('img').attr({'src': this.mainVisualList.list[1].smallImg, 'alt': this.mainVisualList.list[1].alt});
                $('#fix_bnr').find('a').attr({'href': this.mainVisualList.list[0].link, 'target': '_blank'});
                $('#fix_bnr').find('img').attr({'src': this.mainVisualList.list[0].smallImg, 'alt': this.mainVisualList.list[0].alt});
                $('#visual').css('background-image', 'url(' + this.mainVisualList.list[1].largeImg + ')');
                $('#mvlink').attr({'href': this.mainVisualList.list[1].link});
                $('#camp_banners').show();
                return;
            };
        }
    };
})();

