﻿String.prototype.TemplateReplace = function(dataRow) { //模板替换实现,避免在js中组织html

    var origin = this;
    var re = null;

    for (var prop in dataRow) {
        re = new RegExp("\\{\\$(" + prop + ")\\$\\}", "ig")
        origin = origin.replace(re, dataRow[prop]);
    }

    return origin;
};

var Marquee = (function(){

    var delay = 2000;
    
    var isPause = 1; //(0 = no. 1 = yes)
    var containerOffset = 0;
    var actualOffset = 0;
    
    var mouseOutSpeed = 2; //(larger is faster 1-10)
    var speed = mouseOutSpeed;
    var mouseOverSpeed = (isPause == 0) ? speed : 0;
    
    var template = ''; //公告HTML模板
    var sID = 0; //站点编号
    var request = false;
    var url = '/Application/Announce/AnnounceFront.ashx?sID=';
    
    var initAjaxRequest = function() {
        try {
            request = new XMLHttpRequest();
        } 
        catch (trymicrosoft) {
            try {
                request = new ActiveXObject("Msxml2.XMLHTTP");
            } 
            catch (othermicrosoft) {
                try {
                    request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (failed) {
                    request = false;
                }  
            }
        }
        
        if (!request)
            return false;
        
        return true;
    };
    
    var sendRequest = function(obj) {
    
        request.open("get", url + sID.toString(), true);
        
        request.onreadystatechange = function(){
            
            if(request.readyState == 4 && request.status == 200) {
                
                if (!template || template == '' || typeof(template) == 'undefined') {
                    alert('请设置Marquee对象的template属性');
                    return;
                }

                var data = eval(request.responseText);
                var tempArray = new Array();
                
                for (var traverse in data) 
                    tempArray.push(template.TemplateReplace(data[traverse]))
               
                obj.innerHTML = tempArray.join("");
                actualOffset = obj.offsetHeight;
            }
        };
        
        request.send(null);
    };
    
    var that;

    return function(unique_Container, unique_Actual, _template, _sid) {
    
        this.marqueeContainer = document.getElementById(unique_Container);
        this.marqueeActual = document.getElementById(unique_Actual);
        template = _template;
        sID = _sid;
        that = this;
        
        this.Scroll = function() {

            if (this.marqueeContainer == null || this.marqueeActual == null)
                return;
            
            if (parseInt(this.marqueeActual.style.top) > (actualOffset * (-1) + 8)) {
                this.marqueeActual.style.top = parseInt(this.marqueeActual.style.top) - speed + "px";
            }
            else {
                this.marqueeActual.style.top = parseInt(containerOffset) + 8 + "px";
            }
        };
        
        this.MouseOut = function() {
            speed = mouseOutSpeed;
        };
        
        this.MouseOver = function() {
            speed = mouseOverSpeed;
        };
        
        this.Init = function() {
            
            if (!sID || sID == 0 || typeof(sID) == "undefined") {
                alert('请在marquee对象构造函数阐述站点编号属性');
                return;
            }
        
            if (!initAjaxRequest())
                return;
 
            sendRequest(this.marqueeActual);
        
            if (this.marqueeContainer == null || this.marqueeActual == null)
                return;
               
            this.marqueeActual.style.top = 0;
            containerOffset = this.marqueeContainer.offsetHeight;
            actualOffset = this.marqueeActual.offsetHeight;
            
            if (window.opera || navigator.userAgent.indexOf("Netscape/7") != -1) {
                this.marqueeActual.style.height = containerOffset + "px";
                this.marqueeActual.style.overflow = "scroll";
                return;
            }
            
            setTimeout(function(){ setInterval(function(){ that.Scroll(); }, 100); }, delay);
        }
   };
})();
