/*
 Page JS
 vk Heung 20100917
 */
//subString
function subString(str, len, hasDot){
    var newLength = 0;
    var newStr = "";
    var chineseRegex = /[^\x00-\xff]/g;
    var singleChar = "";
    var strLength = str.replace(chineseRegex, "**").length;
    for (var i = 0; i < strLength; i++) {
        singleChar = str.charAt(i).toString();
        if (singleChar.match(chineseRegex) != null) {
            newLength += 2;
        }
        else {
            newLength++;
        }
        if (newLength > len) {
            break;
        }
        newStr += singleChar;
    }
    
    if (hasDot && strLength > len) {
        newStr += "...";
    }
    return newStr;
}

//
var $$ = function(id){
    return "string" == typeof id ? document.getElementById(id) : id;
};

var Extend = function(destination, source){
    for (var property in source) {
        destination[property] = source[property];
    }
    return destination;
}

var CurrentStyle = function(element){
    return element.currentStyle || document.defaultView.getComputedStyle(element, null);
}

var Bind = function(object, fun){
    var args = Array.prototype.slice.call(arguments).slice(2);
    return function(){
        return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
    }
}

var forEach = function(array, callback, thisObject){
    if (array.forEach) {
        array.forEach(callback, thisObject);
    }
    else {
        for (var i = 0, len = array.length; i < len; i++) {
            callback.call(thisObject, array[i], i, array);
        }
    }
}

var Tween = {
    Quart: {
        easeOut: function(t, b, c, d){
            return -c * ((t = t / d - 1) * t * t * t - 1) + b;
        }
    },
    Back: {
        easeOut: function(t, b, c, d, s){
            if (s == undefined) 
                s = 1.70158;
            return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
        }
    },
    Bounce: {
        easeOut: function(t, b, c, d){
            if ((t /= d) < (1 / 2.75)) {
                return c * (7.5625 * t * t) + b;
            }
            else 
                if (t < (2 / 2.75)) {
                    return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
                }
                else 
                    if (t < (2.5 / 2.75)) {
                        return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
                    }
                    else {
                        return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
                    }
        }
    }
}
//容器对象,滑动对象,切换数量
var SlideTrans = function(container, slider, count, options){
    this._slider = $$(slider);
    this._container = $$(container);//容器对象
    this._timer = null;//定时器
    this._count = Math.abs(count);//切换数量
    this._target = 0;//目标值
    this._t = this._b = this._c = 0;//tween参数
    this.Index = 0;//当前索引
    this.SetOptions(options);
    
    this.Auto = !!this.options.Auto;
    this.Duration = Math.abs(this.options.Duration);
    this.Time = Math.abs(this.options.Time);
    this.Pause = Math.abs(this.options.Pause);
    this.Tween = this.options.Tween;
    this.onStart = this.options.onStart;
    this.onFinish = this.options.onFinish;
    
    var bVertical = !!this.options.Vertical;
    this._css = bVertical ? "top" : "left";//方向
    //样式设置
    var p = CurrentStyle(this._container).position;
    p == "relative" || p == "absolute" || (this._container.style.position = "relative");
    this._container.style.overflow = "hidden";
    this._slider.style.position = "absolute";
    
    this.Change = this.options.Change ? this.options.Change : this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;
};
SlideTrans.prototype = {
    //设置默认属性
    SetOptions: function(options){
        this.options = {//默认值
            Vertical: true,//是否垂直方向（方向不能改）
            Auto: true,//是否自动
            Change: 0,//改变量
            Duration: 30,//滑动持续时间
            Time: 10,//滑动延时
            Pause: 3000,//停顿时间(Auto为true时有效)
            onStart: function(){
            },//开始转换时执行
            onFinish: function(){
            },//完成转换时执行
            Tween: Tween.Quart.easeOut//tween算子
        };
        Extend(this.options, options || {});
    },
    //开始切换
    Run: function(index){
        //修正index
        index == undefined && (index = this.Index);
        index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);
        //设置参数
        this._target = -Math.abs(this.Change) * (this.Index = index);
        this._t = 0;
        this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);
        this._c = this._target - this._b;
        
        this.onStart();
        this.Move();
    },
    //移动
    Move: function(){
        clearTimeout(this._timer);
        //未到达目标继续移动否则进行下一次滑动
        if (this._c && this._t < this.Duration) {
            this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));
            this._timer = setTimeout(Bind(this, this.Move), this.Time);
        }
        else {
            this.MoveTo(this._target);
            this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));
        }
    },
    //移动到
    MoveTo: function(i){
        this._slider.style[this._css] = i + "px";
    },
    //下一个
    Next: function(){
        this.Run(++this.Index);
    },
    //上一个
    Previous: function(){
        this.Run(--this.Index);
    },
    //停止
    Stop: function(){
        clearTimeout(this._timer);
        this.MoveTo(this._target);
    }
};
//OO
var Class = {
    create: function(){
        return function(){
            this.initialize.apply(this, arguments);
        }
    }
}

Object.extend = function(destination, source){
    for (var property in source) {
        destination[property] = source[property];
    }
    return destination;
}

function addEventHandler(oTarget, sEventType, fnHandler){
    if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, false);
    }
    else 
        if (oTarget.attachEvent) {
            oTarget.attachEvent("on" + sEventType, fnHandler);
        }
        else {
            oTarget["on" + sEventType] = fnHandler;
        }
};

//fn.extend
$.fn.extend({
    //点击选项卡切换
    //导航元素ID，选项{num:初始显示项,current:高亮className}
    Tabs: function(tabnavId, options){
        var tabNavs = $("#" + tabnavId).children();
        var tabs = this.children();
        var settings = {
            num: 0,
            current: "active"
        };
        $.extend(settings, options);
        var n = settings.num;
        $(tabNavs[n]).addClass(settings.current);
        tabs.hide();
        $(tabs[n]).show();
        tabNavs.each(function(i){
            $(this).click(function(){
                $(tabNavs[n]).removeClass(settings.current);
                $(tabs[n]).hide();
                $(this).addClass(settings.current);
                $(tabs[i]).show();
                n = i;
            });
        });
    },
	//equalHeight
    equalHeight: function(){
        function array_max(){
            return this.concat().sort(function(a, b){
                return b - a
            })[0];
        }
        Array.prototype.max = array_max;
        this.each(function(p){
            var x = [];
            $(this).children().each(function(i){
                x.push($(this).height());
            });
            var y = x.max();
            $(this).children().each(function(i){
                $(this).css("height", y);
            });
        });
    },
    //选项卡切换
    //导航元素ID，选项
    TabBox: function(tabnavId, options){
        var tabNavs = $("#" + tabnavId).children();
        var tabs = this.children();
        var settings = {
            num: 0,//初始显示项
            current: "active",//高亮className
            trigger: "click",//触发方式 click hover
            animate: null,//动画fadeIn slideDown
            autoDisplay: false,//自动切换
            pause: 3000//切换时间
        };
        $.extend(settings, options);
        var n = settings.num;
        var l = tabNavs.length = this.children().length;
        $(tabNavs[n]).addClass(settings.current);
        tabs.hide();
        $(tabs[n]).show();
        var effectFn = function(el){
            //el.stop();
            switch (settings.animate) {
                case "fadeIn":
                    el.fadeIn();
                    break;
                case "slideDown":
                    el.slideDown();
                    break;
                default:
                    el.show();
            }
        }
        //show
        var showFn = function(i, el){
            $(tabNavs[n]).removeClass(settings.current);
            $(tabs[n]).hide();
            el.addClass(settings.current);
            effectFn($(tabs[i]));
            n = i;
        }
        //each
        tabNavs.each(function(i){
            switch (settings.trigger) {
                case "hover":
                    //hover
                    $(this).hover(function(){
                        $(this).stop();
                        showFn(i, $(this));
                    });
                    break;
                default:
                    //click
                    $(this).click(function(){
                        showFn(i, $(this));
                    });
            }
        });
        //changeFn
        var changeFn = function(){
            //console.log(n);
            var next = n + 1;
            if (next >= l) {
                next = 0;
            }
            showFn(next, $(tabNavs[next]));
        }
        if (settings.autoDsiplay) {
            var timer = setInterval(changeFn, settings.pause);
            this.mouseover(function(){
                clearInterval(timer);
            });
            this.mouseout(function(){
                timer = setInterval(changeFn, settings.pause);
            });
            tabNavs.mouseover(function(){
                clearInterval(timer);
            });
            tabNavs.mouseout(function(){
                timer = setInterval(changeFn, settings.pause);
            });
        }
    },
    vkSelect: function(optionsId, valueEle, textEle){
        //init
        var $optionList = $("#" + optionsId);
        var $options = $optionList.children();
        var active = false;
        //select click event
        $(textEle).click(function(){
            if ($optionList.get(0).style.display == "none") 
                $optionList.show();
            else 
                $optionList.hide();
        });
        //autoClose
        this.mouseout(function(event){
            autoClose();
        });
        var autoClose = function(){
            setTimeout(function(){
                if ($optionList.get(0).style.display != "none") 
                    $optionList.hide();
                clearTimeout(autoClose);
            }, 4000)
        }
        //option event
        $options.each(function(i){
            var e = $(this);
            //Style
            e.hover(function(){
                e.addClass("active");
                clearTimeout(autoClose);
            }, function(){
                e.removeClass("active");
            })
            //Logic
            e.click(function(){
                textEle.innerHTML = this.innerHTML;
                valueEle.value = $(this).attr("svalue");
                $optionList.hide();
            });
        });
    }
});
//RunCode
jQuery(function($){
    $(".jqEqualHeight").equalHeight();
    //bind SearchType select
	//widget_Select($$("option"), $$("soType"), $$("searchType"));
    //SlideTran
    var nums = [], timer, n = 3, st = new SlideTrans("scrollArea", "scrollArea_inner", n, {
        Vertical: false,
        Pause: 6000,
        onStart: function(){//设置按钮样式
            forEach(nums, function(o, i){
                o.className = st.Index == i ? "active" : "";
            })
        }
    });
    for (var i = 1; i <= n; AddNum(i++)) {
    };
    function AddNum(i){
        var num = $$("focusCtrl").appendChild(document.createElement("li"));
        num.innerHTML = i--;
        num.onmouseover = function(){
            timer = setTimeout(function(){
                num.className = "active";
                st.Auto = false;
                st.Run(i);
            }, 200);
        }
        num.onmouseout = function(){
            clearTimeout(timer);
            num.className = "";
            st.Auto = true;
            st.Run();
        }
        nums[i] = num;
    }
    st.Run();
    //
    $("#bigPic").TabBox("bigPic_ctrl", {
        trigger: "hover",
        autoDsiplay: true,
        pause: 6000,
        animate: "fadeIn"
    
    });
});
//widget_Select
function widget_Select(optionsEle, valueEle, textEle){
    //init
    var options = optionsEle.getElementsByTagName("LI");
    //select click event
    textEle.onclick = function(){
        if (optionsEle.style.display == "none") 
            optionsEle.style.display = "";
        else 
            optionsEle.style.display = "none";
    }
    //option event
    for (var i = options.length - 1; i >= 0; i--) {
		options[i].onmouseover = function(){
			this.className="active";
		}
		options[i].onmouseout = function(){
			this.className="";
		}
        options[i].onclick = function(){
			textEle.innerHTML = this.innerHTML;
			valueEle.value = this.getAttribute("svalue");
			optionsEle.style.display = "none";
		}
    }
}

//renderVoteMod
function renderVoteMod(id, q){
    $.getJSON("http://match.free.21cn.com/poll/questionaryShowAnalyse.do?action=showQuestionaryJsonResult&jsoncallback=?", {
        questionaryId: id
    }, function(json){
        //alert("JSON Data: " + json.content[0].question);
        var tmpHtml, ops, d;
        d = json.content[0];
        ops = '';
        for (var i = 0, l = d.options.length; i < l; i++) {
            ops += '<div>' +
            '<label>' +
            '<input type="radio" name="_' +
            d.id +
            '" value="' +
            d.options[i].id +
            '" />' +
            d.options[i].option +
            '<span class="c-b c-blue pd-r9">' +
            d.options[i].rate +
            '</span>' +
            '</label>' +
            '</div>';
        }
        tmpHtml = '<form name="joinGameForm" action="http://match.free.21cn.com/questionary/insertAnswer.action" target="_blank"><p class="question c-blue">' + q + '</p>' +
        '<div class="pannel" style="display:none;" id="pannel2">' +
        '<div class="choice ">' +
        ops +
        '</div>' +
        '<div class="btns"><span class="c-red"><span id="resultSum1">' +
        d.resultSum +
        '</span>人投票</span><button type="submit" class="bt" id="vote">投票</button>' +
        '<input type="hidden" name="questionIds" value="' +
        d.id +
        '"/>' +
        '<input type="hidden" name="questionTypes" value="1,9,"/>' +
        '<input type="hidden" value="'+id+'" name="questionaryId"/>' +
        '<input type="hidden" value="" name="resultPage"/>' +
        '</div>' +
        '</div>' +
        '<div class="pannel" id="pannel1">' +
        '<div class="popMsg-up" >' +
        '<p class="answer c-blue"><span class="c-b">' +
        d.options[0].rate +
        '</span>的人认为' +
        d.options[0].option +
        '</p>' +
        '</div>' +
        '<div class="btns"><span class="c-red"><span id="resultSum2">' +
        d.resultSum +
        '</span>人投票</span><a href="javascript:;" class="bt" id="openBt">我来投票</a></div>' +
        '</div></form> ';
        $("#surveyMod").html(tmpHtml);
        //bind
        $("#openBt").click(function(){
            $("#pannel2").slideDown("slow", function(){
                $("#pannel1").slideUp();
            });
        });
        $("#vote").click(function(){
            $("#pannel1").slideDown("slow", function(){
                //+1
                $.getJSON("http://match.free.21cn.com/poll/questionaryShowAnalyse.do?action=showQuestionaryJsonResult&jsoncallback=?", {
                    questionaryId: id
                }, function(ds){
                    //update
                    $("#resultSum1").html(ds.content[0].resultSum);
                    $("#resultSum2").html(ds.content[0].resultSum);
                });
                $("#pannel2").slideUp();
            });
        });
    });
}

