(function(){
    // fix to improve IE6
    if (document.uniqueID && !window.XMLHttpRequest) {
        try {
            document.execCommand('BackgroundImageCache', false, true);
        }
        catch(e){
        }
    }
    var FLICKR_SERVICE_URL = 'http://api.flickr.com/services/rest/';
    var FLICKR_API_KEY = 'de3b2afdff38ac91978ff99e29510807';
    var FLICKR_USER_ID = '45410714@N06';
    var YModules = [];
    YUI().use('node', 'io', 'anim', 'node-menunav', 'json-parse', function (Y) {
    /* setTextPrompt(inputNode, promptText, buttonNode) : 設定文字提示 {{{ */
    var setTextPrompt = function (inputNode, promptText, buttonNode) {
        if (!inputNode || !promptText) {
            return;
        };
        inputNode.setStyle('color', '#999');
        inputNode.set('value', promptText);
        inputNode.on('mouseup', function() {
            if (this.get('value') === promptText) {
                this.set('value', '');
                inputNode.setStyle('color','#000');
            };
        });
        inputNode.on('blur', function() {
            if (this.get('value') === '') {
                this.set('value', promptText);
                inputNode.setStyle('color','#999');
            }
        });
        if (buttonNode) {
            buttonNode.on('click', function() {
                if(inputNode.get('value') === promptText) {
                    inputNode.set('value', '');
                }
            });
            buttonNode.on('change', function() {
                if(inputNode.get('value') === promptText) {
                    inputNode.set('value', '');
                }
            });
        }
    }
    /* }}} */
        // domReady (start) {{{
        YModules['domReady'] = function() {
            var headNode = Y.one('#hd');
            var bodyNode = Y.one('#bd');
            var footNode = Y.one('#ft');
            var setLayout = function () {
                bodyNode.setStyles({
                    'bottom' : footNode.get('offsetHeight') + 'px',
                    'height' : bodyNode.get('winHeight') - headNode.get('offsetHeight') - footNode.get('offsetHeight') + 'px',
                    'top' : headNode.get('offsetHeight') + 'px'
                });
            }
            setLayout();
            Y.on('resize', setLayout);
            bodyNode.append('<iframe src="about:blank" style="height:1em;position:absolute;top:-10000em;left:-10000em;"></iframe>');
            iframeNode = bodyNode.query('iframe');
            iframeDocEl = iframeNode.get('contentWindow');
            iframeDocEl.on('resize', setLayout);
        }
        // }}}
        // #admin-news-form (start) {{{
        YModules['admin-news-form'] = function () {
            var module = this;
            var picker = module.one(".date-picker"); // YUI 3 Object
            var attrs = { 
                mindate:"1/1/2006", 
                maxdate:"12/31/2010" 
            };
            var pickerEl = picker._node; // Hack : DOM 節點
            var cal = new YAHOO.widget.Calendar(pickerEl, attrs); // YUI 2 只能吃 DOM 節點
            cal.render();
            cal.hide();
            cal.selectEvent.subscribe(function (type, args, obj) {
                var dates = args[0][0];
                var year = dates[0]
                var month = dates[1]
                var day = dates[2]
                currentInput._node.value = year + '-' + month + '-' + day;
                cal.hide();
            })
            var inputNodes = module.all('.date-input');
            var currentInput = null;
            inputNodes.on('click', function (e) {
                e.stopPropagation(); // stop event bubbling
                cal.show();
                var input = e.target;
                currentInput = input;
                var xy = input.getXY();
                picker.setXY([xy[0] + input.get('offsetWidth'), xy[1]]);
            });
            Y.one(document.body).on('click', function(e) {
                if (e.target.get('className').indexOf('calnav') !== -1) {
                    return;
                }
                cal.hide();
            });
        }
        // #admin-news-form (end) }}} 
        /* #cafe-announce (start) {{{ */
        YModules['cafe-announce'] = function () {
            var module = this;
            var dRotator = this._node.getElementsByTagName('ul')[0];
            if (dRotator.getElementsByTagName("li").length > 5) {
                var oNewsRotator = new YAHOO.util.NewsRotator(dRotator);    
            }
            var dItems = dRotator.getElementsByTagName("a");
            var oPanel = new YAHOO.widget.Panel("myPanel", { 
                width : "800px",
                visible : false, 
                fixedcenter : true,
                constraintoviewport : true,
                modal : true 
            });
            oPanel.render();

            var complete = function (id, o) {
                var data = Y.JSON.parse(o.responseText);    
                oPanel.setHeader(data.title);
                oPanel.setBody("<p style=\"line-height:1.5;padding:10px;font-size:93%;\">" + data.description + "</p>");
                if (data.photo) {
                    oPanel.setFooter('<img src="' + data.photo + '">');
                }
                oPanel.show();
            }        
            Y.on("io:complete", complete);

            var currentId = 0;
            Y.delegate("click", function(e) {
                e.preventDefault();
                var uri = e.target.getAttribute("href", 2) + "&format=json";
                Y.io(uri);
            }, "#cafe-announce .bd", "a");
        }
        /* #cafe-announce (end) }}} */
        /* #cafe-promote (start) {{{ */
        YModules['cafe-promote'] = function () {
            // 用 contentReady 預設 this 就是等於該 id element
            var module = this;
            // 用 module.all 配合 CSS 屬性可以取得物件集合，這邊是取得 img 集合
            var imgs = module.all('.bd img');
            // total : 先算出有幾個 img
            var total = imgs.size();
            // offset : 目前在第幾個 img
            var offset = 0;
            // 定義切換照片的 Function {{{
            var switchPhoto = function() {
                // 依照目前所在的 offset 取出圖片（目前顯示、但即將隱藏、沒有 .hidden 的）
                var imgCurrent = imgs.item(offset);
                // 下一張圖片（尚未顯示、但即將顯示的、有 .hidden 的）
                offset++;
                // 如果 offset 等於 total 就表示超出範圍了，下一張圖片就會是第一張（offset = 0）
                if (offset === total) {
                    offset = 0;
                }
                // 終於可以取得下一張圖片的物件參考
                var imgNext = imgs.item(offset);
                // 設定動畫：隱藏目前這張圖片
                var animCurrent = new Y.Anim({
                    node : imgCurrent,
                    to : {
                        opacity : 0
                    }
                });
                var onAnimEndEvent = function (e) {
                    var imgCurrent = this[0];
                    var imgNext = this[1];
                    // 讓圖片真正隱藏不佔空間
                    imgCurrent.addClass('hidden');
                    // 先將透明度設為 0（不然會閃一下）
                    imgNext.setStyle('opacity', '0');
                    // 顯示圖片 = 將 hidden 移除
                    imgNext.removeClass('hidden');
                    var anim = new Y.Anim({
                        node : imgNext,
                        to : {
                            opacity : 1
                        }
                    });
                    anim.run();
                }
                animCurrent.on('end', onAnimEndEvent, [imgCurrent, imgNext]);
                animCurrent.run();
            }
            // }}}
            var fnName = '_getData_' + parseInt(new Date().getTime());
            window[fnName] = function (o) {
                var items = o.photos.photo;
                var bodyNode = module.one('.bd'); 
                var html = [];
                for (var i = 0, j = items.length; i < j; i++) {
                    var img = 'http://farm' + items[i]['farm'] + '.static.flickr.com/' + items[i]['server'] + '/' + items[i]['id'] + '_' + items[i]['secret']+'.jpg'; 
                    bodyNode.append('<img src="' + img + '" class="hidden">');    
                }
                // 每三秒鐘跑一次
                imgs = module.all('.bd img');
                // total : 先算出有幾個 img
                total = imgs.size();
                var timer = Y.later(5000, null, switchPhoto, null, true);
            }
            Y.Get.script(FLICKR_SERVICE_URL + '?method=flickr.people.getPublicPhotos&api_key=' + FLICKR_API_KEY + '&user_id=' + encodeURIComponent(FLICKR_USER_ID) + '&format=json&jsoncallback=' + fnName);
        }
        /* }}} */
        /* #cafe-nav (start) {{{ */
        YModules['cafe-nav'] = function () {
            if (Y.UA.ie > 6 || !Y.UA.ie) {
                return;
            }
            var module = this;
            var body = Y.one('#bd');
            var ancestor = module.ancestor();
            ancestor.setStyle('position', 'relative');
            module.setStyle('position', 'absolute');
            var timer;
            var bodyScrollEvent = function () {
                if (timer) {
                    timer.cancel();
                } 
                timer = Y.later(200, null, function() {
                    module.setStyle('top', body.get('scrollTop') + 'px');
                    timer = null;
                });
            }
            body.on('scroll', bodyScrollEvent)
        }
        /* }}} */
        /* #masthead (start) {{{ */
        YModules['masthead'] = function () {
            var module = this;
            module.one('.yui-menu').plug(Y.Plugin.NodeMenuNav, {
                autoSubmenuDisplay : true,
                useARIA : false
            }); 
        }
        /* }}} */
        // #search-box (start) {{{
        YModules['search-box'] = function () {
            var module = this;
            var input = module.one('form input.keyword');
            var button = module.one('form input[type=submit]');
            setTextPrompt(input, 'Search...', button);
        }
        // #search-box (end) }}} 
        Y.on('contentready', YModules['cafe-announce'], '#cafe-announce');
        Y.on('contentready', YModules['cafe-promote'], '#cafe-promote');  
        Y.on('contentready', YModules['cafe-nav'], '#cafe-nav');  
        Y.on('contentready', YModules['search-box'], '#search-box');  
        Y.on('contentready', YModules['masthead'], '#masthead');  
        Y.on('contentready', YModules['domReady'], '#ft');
        Y.on('contentready', YModules['admin-news-form'], '#admin-news-form');
    });
})();

