(function(window,_MyfunctionName,undefined){
    window.Class = {
        create: function() {
            return function() {
                this.initialize.apply(this, arguments);
            }
        }
    }
    window.extend = function(destination, source) {
        for (var property in source) {
            destination[property] = source[property];
        }
        return destination;
    }
    /**/
    /*aray处理*/
    window.inArray = function(value,array){
        if(arguments.length < 2){
            return false
        }
        for(var i=0,l=array.length;i<l;i++){
            if(array[i] == value){
                return true;
            }
        }
        return false;
    }
    window.each = function(arr,callback){
        var i = 0;
        for(var k in arr){
            if(!arr.hasOwnProperty || arr.hasOwnProperty(k)){
                callback.call(arr,i,arr[k]);
                i++;
            }
        }
    }
    /*兼容处理*/




    var _T = {};
    _T.$ = function(id){
        return typeof(id) == "string" ? document.getElementById(id) : id
    };
    _T.ajax = {};
    _T.ajax._xmlHttp = function(){
        return new (window.ActiveXObject||window.XMLHttpRequest)("Microsoft.XMLHTTP");
    }
    _T.ajax._AddEventToXHP = function(xhp,fun,isxml){
        xhp.onreadystatechange=function(){
            if(xhp.readyState==4&&xhp.status==200)
                fun(isxml?xhp.responseXML:xhp.responseText);
        }
    }
    _T.ajax.get=function(url,fun,isxml,bool){
        var _xhp = this._xmlHttp();
        this._AddEventToXHP(_xhp, fun || function(){} ,isxml);
        _xhp.open("GET",url,bool);
        _xhp.send(null);
    }
    _T.ajax.post=function(url,data,fun,isxml,bool){
        var _xhp = this._xmlHttp();
        this._AddEventToXHP(_xhp, fun || function(){},isxml);
        _xhp.open("POST",url,bool);
        _xhp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        _xhp.send(data);
    }

    _T.animate = Class.create();
    _T.animate.prototype = {
        initialize : function(Options){
            if(!Options['ele'] || !Options['style']){
                this.Exception('缺少对象');
                return true;
            }
            this.setOptions(Options);//设置参数
            this._j = 0;//给样式计数，for 回调
            this.unit = [];//保存单位
            for(var k in Options['style']){
                this._j++;
                //如果为传入单位，单位为默认单位，如果是scroll、透明度等属性则不要单位
                this.unit[k] = Options['style'][k].toString().replace(/-/gi,'').replace(/./gi,'').replace(/\d/gi, '') || (inArray(k,this.default_unit) ? 'px' : '');
                this._run(Options['ele'],k,Options['style'][k],this._j);     //执行动画
            }
        },
        setOptions : function(Options){
            this.speed = Options['speed'] || 300;
            this.tween = Options['tween'] || ['Linear','Linear'];
            this.callback = Options['callback'] || function(){};
            return this;
        },
        //设置默认单位为px的样式
        default_unit : ['width','height','left','top','font-size','line-height','fontSize','lineHeight','marginTop','margin-top'],
        _run : function(ele,style,endVal,k){
            this.tween = typeof this.tween == 'string' ? this.tween.split(',') : this.tween;
            if('undefined' == typeof(Tween)){
                Tween = {
                    Linear: function(t,b,c,d){
                        return c*(t/=d)*t + b;
                    }
                };
            }
            var tween_fn = this.tween[0] == 'Linear' ? Tween['Linear'] : (Tween[this.tween[0]] ? Tween[this.tween[0]][this.tween[1] || 'easeIn'] : Tween['Linear']);
            var beginVal = _T.css(ele,style);//开始值
            if(style == 'opacity'){
                beginVal = beginVal * 100;
                endVal   = endVal * 100;
            }else{
                beginVal = parseInt(beginVal) || 0;
            }
            var changeVal = parseInt(endVal,10) - beginVal;//变化量
            var current  = new Date().getTime();//当前时间
            var duration = this.speed ;//持续时间
            var _self = this;
            setTimeout(function(){
                if((new Date().getTime()) > duration + current){
                    _T.css(ele,style,style == 'opacity' ? (endVal / 100) : endVal);
                    _self._j == k && _self.callback.call(ele);//动画全部完成call回调
                }else{
                    var ret = Math.floor(tween_fn(new Date().getTime() - current,beginVal,changeVal,duration));
                    ret = style == 'opacity' ? (ret / 100) : ret;
                    _self.unit[style] && (ret += _self.unit[style]);
                    _T.css(ele,style,ret);
                    setTimeout(arguments.callee,15);
                }
            },100);
        },
        Exception : function(str){
            alert(str);
        }
    }

    /*兼容event*/
    window.fixEvent = function(event){
        if(event.target || event.preventDefault) return event;
        event.keyCode = event.which;//按键值
        event.target = event.srcElement;//触发event的源
        event.relatedTarget = event.fromElement;
        event.currentTarget = event.toElement;
        event.pageX = event.x;
        event.pageY = event.y;
        event.layerX= event.offsetX;
        event.layerY= event.offsetY;
        //阻止默认行为
        event.preventDefault = function(){
            window.returnValue = false;
        };
        //阻止冒泡
        event.stopPropagation = function(){
            window.cancelBubble = true;
        };
        return event;
    };
    _T.eventGuideId = 0;
    _T.bind = function(ele,type,listener,useCapture){
        useCapture = useCapture || false;
        if(window.addEventListener){
            ele.addEventListener(type, listener, useCapture);
        }else{
            ele.attachEvent('on' + type, listener);
        }
    }
    _T.unbind = function(ele,type,listener){
        if(window.removeEventListener){
            ele.removeEventListener(type, listener, false);
        }else{
            ele.detachEvent("on"+type, listener);
        }
    }
    _T.attr = function(elem,attr,value){
        if(!elem || !attr){
            return null;
        }
        if(!value){
            return elem.getAttribute(attr);
        }
        elem.setAttribute(attr,value,0);
        return _T;
    }
    //浏览器检测
    _T.browser = (function(ua){
        var b = {
            msie: /msie/.test(ua) && !/opera/.test(ua),
            opera: /opera/.test(ua),
            safari: /webkit/.test(ua) && !/chrome/.test(ua),
            firefox: /firefox/.test(ua),
            chrome: /chrome/.test(ua)
        };
        var vMark = "";
        for (var i in b) {
            if (b[i]) {
                vMark = "safari" == i ? "version" : i;
                break;
            }
        }
        b.version = vMark && RegExp("(?:" + vMark + ")[\\/: ]([\\d.]+)").test(ua) ? RegExp.$1 : "0";
        return b;
    })(window.navigator.userAgent.toLowerCase());

    //获取或设置样式
    _T.css = function(el,style,value){
        if(arguments.length < 2){
            return true;
        }
        if(arguments.length == 2){
            if(document.defaultView){
                return document.defaultView.getComputedStyle(el, null).getPropertyValue(style);
            }else{
                if(_T.browser.msie && style == 'opacity'){

                    var op = 1;
                    //这是最快的获取IE透明值的方式，不用正则来处理字符串了！
                    if(el.filters.alpha){
                        op = el.filters.alpha.opacity;
                    }else if(el.filters["DXImageTransform.Microsoft.Alpha"]){
                        op = el.filters["DXImageTransform.Microsoft.Alpha"].opacity
                    }
                    return (op)
                    return op  ? op /100 :op//如果是零就不用除100了
                }
                style = style.replace(/\-(\w)/g, function($, $1){
                    return $1.toUpperCase();
                });
                return el.currentStyle[style];
            }
        }else{
            if(_T.browser.msie && style == 'opacity'){
                if(!el.currentStyle.hasLayout){
                    el.style.zoom = 1;//让元素获得hasLayout
                }
                if(el.filters.alpha){
                    //必须已经定义过透明滤镜才能使用以下便捷方式
                    el.filters.alpha.opacity = value * 100;
                }else{
                    el.style.filter = "alpha(opacity="+value *100+")";
                }
                return el;
            }
            style = style.replace(/\-(\w)/g, function($, $1){
                return $1.toUpperCase();
            });
            el.style[style] = value;
        }
    };
    window[_MyfunctionName] = _T;
    return window;
})(window,typeof(_MyfunctionName) == 'undefined' ? 'T' : _MyfunctionName);

/** topbar 事件  */
(function(){
    if(!addBookmark){
        var addBookmark = function(title,url){
            if(window.sidebar) {
                window.sidebar.addPanel(title, url,"");
            }else if(window.external && ('AddFavorite' in window.external)) {
                window.external.AddFavorite(url, title);
            }else {
                alert('请使用 Ctrl+D 添加到收藏夹');
            }
            return false;
        }
    }
    var j_addFav = document.getElementById('j_addFav');

    if(j_addFav){
        j_addFav.onclick = function(event){
            event = event || window.event;
            event.preventDefault ? event.preventDefault() : event.returnValue = false;
            event.stopPropagation ? event.stopPropagation() : event.cancelBubble=true;
            this.blur();
            addBookmark(document.title,window.location.href);
            return false
        }
    }

    var J_topbarOpen = T.$('J_topbarOpen');
    var J_gameList = T.$('J_gameList');
    var speed      = 600;
    var animating = false;
    J_topbarOpen.onclick = function(event){
        event = event || window.event
        event.preventDefault ? event.preventDefault() : event.returnValue = false;
        if(animating){return false;};
        if(this.className == 'topbar_all'){
            this.className = 'topbar_all topbar_open';
            this.innerHTML = '<span>收起</span>';

            J_gameList.style.display = "block";
            animating = true;
            new T.animate({
                ele   : J_gameList,
                style : {
                    "margin-top" : 0
                },
                callback : function(){animating = false;},
                //tween    : ['Bounce','easeInOut'],
                speed    : speed
            });
            new T.animate({
                ele   : this,
                style : {
                    opacity:0
                },
                callback : function(){
                    T.css(this,"opacity",1);
                },
                //tween    : ['Bounce','easeInOut'],
                speed    : speed
            });
        }else{
            animating = true;
            new T.animate({
                ele   : J_gameList,
                style : {
                    "margin-top":'-300px'
                },
                callback : function(){animating = false;},
                //tween    : ['Bounce','easeInOut'],
                speed    : speed
            });
            new T.animate({
                ele   : this,
                style : {
                    opacity:0
                },
                callback : function(){
                    T.css(this,'opacity',1);
                    this.className = 'topbar_all';
                    this.innerHTML = '<span>全部</span>';
                },
                //tween    : ['Bounce','easeInOut'],
                speed    : speed
            });
        }
        return false;
    };

    J_gameList.onmouseup = function(event){
        event = event || window.event
        event.stopPropagation ? event.stopPropagation() : event.cancelBubble=true;
    };
    J_topbarOpen.onmouseup = function(event){
        event = event || window.event
        event.stopPropagation ? event.stopPropagation() : event.cancelBubble=true;
    };
    document.onmouseup = function(event){
        event = event || window.event
        var $e = event.srcElement || event.target;
        if(J_topbarOpen.className.indexOf('topbar_open') > -1 && !($e.tagName.toLowerCase() == "a" && T.attr($e,'href').indexOf('javascript:')<0)){
            try{
                J_topbarOpen.click();
            }catch(e){
                var evt = document.createEvent("MouseEvents"); //还有onchange则是HtmlEvents
                evt.initEvent("click",true,true);
                J_topbarOpen.dispatchEvent(evt);
            }            
        }
    };
    /*页面链接点击统计代码*/
    var host = self.location.host;
    //根据url获取游戏名称
    var game_type = (function(url){
        var game = '';
        if(url.indexOf('mole') > -1) game = 'mole';
        else if (url.indexOf('gf') > -1) game = 'gf';
        else if (url.indexOf('seer2') > -1) game = 'seer2';
        else if(url.indexOf('seer') > -1 && !url.indexOf('seer2') > -1) game='seer';
        else if(url.indexOf('hua') > -1) game='hua';
        else if(url.indexOf('hero') > -1) game='hero';
        else if(url.indexOf('boke') > -1) game='boke';
        return game;
    })(host);

    if(game_type != ''){
        var iframe = document.createElement('iframe');
        document.body.insertBefore(iframe, document.body.lastChild);
        iframe.style.display = 'none';

        var $topbar_nav      = T.$('J_topbarNav').getElementsByTagName('a');
        var $J_gameList      = T.$('J_gameList').getElementsByTagName('a');

        var misc_url = 'http://misc.taomee.com/platform.php?type=' + game_type;

        each($topbar_nav,function(i,item){
            var type = null;
            try{
                type = item.getAttribute('data-type');
            }catch(e){};
            if(type){
                item.onclick = function(){
                    T.attr(iframe,'src', misc_url + type);
                }
            }
        });
        each($J_gameList,function(i,item){
            var type = null;
            try{
                type = item.getAttribute('data-type');
            }catch(e){};
            if(type){
                item.onclick = function(){
                    T.attr(iframe,'src', misc_url + type);
                }
            }
        });
    }
})();
