(function() {
    $(document).ready(function() {
        var labelCollection = $('ssLabel[xd]').filter(function(index) {
        	var parentXd = $(this).parent().attr('xd');
        	return (parentXd == null || parentXd == undefined);
        });

        labelCollection.each(function() {
        	var $this = $(this);
            var label = Label.Factory($this);
            if (label){
            	var xmlurl = label.xmlUrl;
            	if(!Label.XmlUrlElement[xmlurl]){
            		label.render();
        			Label.XmlUrlElement[xmlurl] = new Array();
        		}else{
        			Label.XmlUrlElement[xmlurl].push(label);
                }
            }
        });
    });

    var Label = function(attributes) {
        if (attributes != null) {
            this.attributes = attributes;
        }
    }
   
    Label.prototype.element = undefined;
    Label.prototype.attributes = undefined;
    Label.prototype.tagName = '<div></div>';
    Label.prototype.getTag = function() {
        if (this) {
            var tag = $(this.tagName);
            for (var attr in this.attributes) {
                tag.attr(attr, this.attributes[attr]);
            }
            return tag;
        }
    }
    Label.prototype.renderContent = function(element) {
        element.append('Error:必须的重载未能实现');
    }
    Label.prototype.render = function() {
        var $tag = this.getTag();
        this.element.replaceWith($tag);
        this.element = $tag;
        this.renderContent(this.element);
    };
    
	Label.XmlUrlElement = {};
	Label.XmlUrlData = {};
    Label.prototype.loadXml = function(xmlUrl, callback) {
    	var xmlData = Label.XmlUrlData[xmlUrl];
    	if(xmlData){
    		/*alert(xmlUrl + "的数据是走的缓存");*/
    		callback(xmlData);
    	}else{
	        var label = this;
	        $.ajax({
	        		type: "GET", 
	        		url: xmlUrl,
	        		dataType: "xml",
	        		cache:false,
	        		complete: function(XMLHttpRequest, textStatus) { },
					success: function(data){
						Label.XmlUrlData[xmlUrl]=data;
						callback(data);
						$.each(Label.XmlUrlElement[xmlUrl], function(index, obj){obj.render();});
					},
					error: function(xml) {/*alert('Error,loading XML document:' + this.url);*/}
	        });
        }
    }
    
    Label.Factory = function($label) {
        var attributes = $label[0].attributes;
        var attrList = {};
        for (var i = 0; i < attributes.length; i++) {
            var nodeName = attributes[i].nodeName.toLowerCase();
            /*when nodeName=='class',attributes[i].nodeValue is bug in IE*/
            var nodeValue = $label.attr(nodeName); 
            if (nodeValue == null || attributes[i].specified == false)
                continue;
            else
                nodeValue = nodeValue.toString().replace(/\r\n/g, '');

            if (nodeValue != '') {
                attrList[nodeName] = nodeValue;
            }
        }
        try {
            var label = eval('new ' + $label.attr('xd') + '(' + JSON.stringify(attrList) + ')');
            label.element = $label;
            return label;
        } catch (e) {
        }
    }

    window.LabelRequest = Label.Request = function(elementID, xmlurl) {
        var element = $('#' + elementID);
        var label = Label.Factory(element);
        if (label) {
            label.xmlUrl = xmlurl;
            label.render();
        }
    }

    var Convert = {};
    Convert.toInt = function(object, num) {
        var result = num;
        if (!isNaN(object))
            result = parseInt(object);
        delete object;
        return result;
    };
    Convert.toBool = function(object, bool) {
        var result = bool;
        if (!(object == null || object.length == 0))
            result = eval(object);
        delete object;
        return result;
    };
    Convert.toString = function(object, str) {
        var result = str;
        if (!(object == null || object.length == 0))
            result = object.toString();
        delete object;
        return result;
    }

    function NewsList(attrList) {
        if (attrList != null) {
            this.xmlUrl = Convert.toString(attrList['xmlurl'], '');
            this.start = Convert.toInt(attrList['start'], 1);
            this.maxCount = Convert.toInt(attrList['maxcount'], 5);
            this.leftStr = Convert.toString(attrList['leftstr'], '');
            this.rightStr = Convert.toString(attrList['rightstr'], '');
            this.isShowDate = Convert.toBool(attrList['isshowdate'], false);
			this.dateFormat = Convert.toString(attrList['dateformat'], '');
            Label.call(this, attrList);
        }
    }
    NewsList.prototype = new Label();
    NewsList.prototype.rendered;
    NewsList.prototype.renderContent = function(element) {
        var label = this;
        this.loadXml(label.xmlUrl, function(data) {
            var $data = $(data);
            element.append(label.getContent($data.find('Item').slice(label.start - 1, label.start + label.maxCount - 1)));
            if ($.isFunction(label.rendered)) {
                label.rendered.call(label, element);
            }
        });
    }
    
    NewsList.prototype.getContent = function(data) {
        var label = this;
        var html = '';
        var href = '';
        data.each(function(index) {
        	href = $.trim($(this).attr('href'));
			html += '<li id="listitem_'+index+'">' + label.leftStr + '<span class="NewsTitle">';
			if("" == href || "#" == href || "javascript:void(0)" == href.toLowerCase()){
				html += '<a>';
			}else{
				html += '<a target="_blank" href="../' + href +'">';
			}
        	html += $(this).find('Title').text() + '</a></span>' + label.rightStr;
            if (label.isShowDate) {
                var dd = $(this).find('Date').text();
                if(dd && label.dateFormat){
                	dd = parseDate(dd).format(label.dateFormat);
                }
                html += "<span class='NewsDate'>" + dd + "</span>";
            }
            html += "</li>";
            if (index >= label.maxCount) {
                return;
            }
		});
		html = '<ul>' + html + '</ul>';
		return html;
    }

	function NewsRowList(attrList) {
        if (attrList != null) {
            this.xmlUrl = Convert.toString(attrList['xmlurl'], '');
            this.start = Convert.toInt(attrList['start'], 1);
            this.maxCount = Convert.toInt(attrList['maxcount'], 5);
            this.leftStr = Convert.toString(attrList['leftstr'], '');
            this.rightStr = Convert.toString(attrList['rightstr'], '');
            this.isShowDate = Convert.toBool(attrList['isshowdate'], false);
			this.dateFormat = Convert.toString(attrList['dateformat'], '');
            Label.call(this, attrList);
        }
    }
    NewsRowList.prototype = new Label();
    NewsRowList.prototype.rendered;
    NewsRowList.prototype.renderContent = function(element) {
        var label = this;
        this.loadXml(label.xmlUrl, function(data) {
            var $data = $(data);
            element.append(label.getContent($data.find('Item').slice(label.start - 1, label.start + label.maxCount - 1)));
            if ($.isFunction(label.rendered)) {
                label.rendered.call(label, element);
            }
        });
    }
    
    NewsRowList.prototype.getContent = function(data) {
        var label = this;
        var html = '';
        var href = '';
        data.each(function(index) {
        	href = $.trim($(this).attr('href'));
			html += '<li id="listitem_'+index+'">' + label.leftStr;
			if("" == href || "#" == href || "javascript:void(0)" == href.toLowerCase()){
				html += '<a>';
			}else{
				html += '<a target="_blank" href="../' + href +'">';
			}
        	html += $(this).find('Title').text() + '</a>' + label.rightStr;
            html += "</li>";
            if (index >= label.maxCount) {
                return;
            }
		});
		html = '<ul>' + html + '</ul>';
		return html;
    }

     function NewsListForListPage(attrList) {
        if (attrList != null) {
            this.xmlUrl = Convert.toString(attrList['xmlurl'], '');
            this.start = Convert.toInt(attrList['start'], 1);
            this.maxCount = Convert.toInt(attrList['maxcount'], 5);
            this.leftStr = Convert.toString(attrList['leftstr'], '');
            this.rightStr = Convert.toString(attrList['rightstr'], '');
            this.isShowDate = Convert.toBool(attrList['isshowdate'], false);
			this.dateFormat = Convert.toString(attrList['dateformat'], '');
            Label.call(this, attrList);
        }
    }
    NewsListForListPage.prototype = new Label();
    NewsListForListPage.prototype.rendered;
    NewsListForListPage.prototype.renderContent = function(element) {
        var label = this;
        this.loadXml(label.xmlUrl, function(data) {
            var $data = $(data);
            element.append(label.getContent($data.find('Item').slice(label.start - 1, label.start + label.maxCount - 1)));
            if ($.isFunction(label.rendered)) {
                label.rendered.call(label, element);
            }
        });
    }
    NewsListForListPage.prototype.getContent = function(data) {
        var label = this;
        var html = '';
        data.each(function(index) {
			if((index % 5)==0&&index>0){
			   html += '<li id="spliteli"><div class="NewsTitle">' + label.leftStr + '<a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a></div>';	
			}else{
			   html += '<li><div class="NewsTitle">' + label.leftStr + '<a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a></div>';
			}
			if (label.isShowDate) {
	            var dd = $(this).find('Date').text();
	            if(dd && label.dateFormat){
	            	dd = parseDate(dd).format(label.dateFormat);
	            }
	            html += "<span class='NewsDate'>" + dd + "</span>";
	        }
            html += "</li>";
            if (index >= label.maxCount) {
                return;
            }
        });
        html = '<ul>' + html + '</ul>';
        return html;
    }


    function PicList(attrList) {
        if (attrList != null) {
            this.xmlUrl = Convert.toString(attrList['xmlurl'], '');
            this.start = Convert.toInt(attrList['start'], 1);
            this.maxCount = Convert.toInt(attrList['maxcount'], 5);
            this.leftStr = Convert.toString(attrList['leftstr'], '');
            this.rightStr = Convert.toString(attrList['rightstr'], '');
            this.isShowDate = Convert.toBool(attrList['isshowdate'], false);
			this.imgwidth = Convert.toString(attrList['imgwidth'], '90');
        	this.imgheight = Convert.toString(attrList['imgheight'], '60');
			this.dateFormat = Convert.toString(attrList['dateformat'], '');
            Label.call(this, attrList);
        }
    }
    PicList.prototype = new Label();
    PicList.prototype.rendered;
    PicList.prototype.renderContent = function(element) {
        var label = this;
        this.loadXml(label.xmlUrl, function(data) {
            var $data = $(data);
            element.append(label.getContent($data.find('Item').slice(label.start - 1, label.start + label.maxCount - 1)));
            if ($.isFunction(label.rendered)) {
                label.rendered.call(label, element);
            }
        });
    }
    PicList.prototype.getContent = function(data) {
        var label = this;
        var html = '';
        data.each(function(index) {
			html +='<li>';
			html +='<div class="tImg"><a target="_blank" href="' + $(this).attr('href') + '"><img src="' + $(this).find('Image').attr('src') + '" width="' + label.imgwidth + 'px" height="' + label.imgheight + 'px" /></a></div>';
	        html += '<div class="tTitle">' + label.leftStr + '<a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a>';
			if (label.isShowDate) {
	            var dd = $(this).find('Date').text();
	            if(dd && label.dateFormat){
	            	dd = parseDate(dd).format(label.dateFormat);
	            }
	            html += "<span class='NewsDate'>" + dd + "</span>";
	        }
            html += label.rightStr + "</div>";
			html += "</li>";
            if (index >= label.maxCount) {
                return;
            }
        });
        html = '<ul>' + html + '</ul>';
        return html;
    }

    function TopNewsList(attrList) {
        this.intervalRow = attrList['intervalrow'];
        NewsList.call(this, attrList);
    }
    TopNewsList.prototype = new NewsList();
    TopNewsList.prototype.getContent = function(data) {
        var html = '';
        label = this;
        data.each(function(index) {
            if ((index % 2) == 0) {
                html += '<div class="MainRow">' + label.leftStr + '<a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a>' + label.rightStr + '</div>';
            }
            else {
                html += '<div class="GeneralRow">' + $(this).find('Title').text() + '</div>';
            }
            if (index >= label.maxCount) {
                return;
            }
        });
        return html;
    }

    function NewsListFirstPic(attrList) {
        this.xmlUrl = Convert.toString(attrList['xmlurl'], '');
        this.start = Convert.toInt(attrList['start'], 1);
        this.maxCount = Convert.toInt(attrList['maxcount'], 5);
        this.isShowTitle = Convert.toBool(attrList['isshowtitle'], true);
        this.isShowImage = Convert.toBool(attrList['isshowimage'], false);
        this.imgnum = Convert.toInt(attrList['imgnum'], 1);
        this.imgwidth = Convert.toString(attrList['imgwidth'], '90');
        this.imgheight = Convert.toString(attrList['imgheight'], '60');
        this.isShowIntro = Convert.toBool(attrList['isshowintro'], false);
        this.introLength = Convert.toInt(attrList['introlength'], 120);
		this.isShowMore = Convert.toBool(attrList['isshowmore'], false);
		this.moretext = Convert.toString(attrList['moretext'], '');
		this.isShowSubTitle = Convert.toBool(attrList['isshowsubtitle'], false);
        NewsList.call(this, attrList);
    }
    NewsListFirstPic.prototype = new NewsList();
    NewsListFirstPic.prototype.getContent = function(data) {
        var html = '', bigHtml = '', label = this;
        data.each(function(index) {
            if (index < label.imgnum) {
                var link = ''
                if (label.isShowTitle) {
                    link += '<div class="tTitle"><a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a></div>';
                }
                if (label.isShowImage) {
                	var c = label.isShowIntro ? "tImg" : "ttImg";
                	var subTitleLink = "";
                	if(label.isShowSubTitle){
                		subTitleLink = '<div class="tSubTitle"><a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('SubTitle').text() + '</a><div>';
                	}
                  	link += '<div class="' + c + '"><a target="_blank" href="' + $(this).attr('href') + '"><img src="' + $(this).find('Image').attr('src') + '" width="' + label.imgwidth + 'px" height="' + label.imgheight + 'px" /></a>'+subTitleLink+'</div>';
                   
                }
                if (label.isShowIntro) {
                    link += '<div class="tIntro"><a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('Intro').text().substring(0, label.introLength) + '</a>';
					if(label.isShowMore)
					{
						link += label.moretext;
					}
					link +='</div>';
                }
                bigHtml += '<div class="tAll">' + link + '</div><div class="splitline"></div>';
            }
            else {
                html += '<li>' + label.leftStr + '<a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a>' + label.rightStr + '</li>';
            }
            if (index >= label.maxCount) {
                return;
            }
        });
        html = '<ul>' + html + '</ul>';
        html = bigHtml + html;
        return html;
    }
	
    function ADFrame(attrList) {
		this.maxCount = Convert.toInt(attrList['maxcount'], 5);
        this.imgwidth = Convert.toString(attrList['imgwidth'], '90');
        this.imgheight = Convert.toString(attrList['imgheight'], '60');
        NewsList.call(this, attrList);
    }
    ADFrame.prototype = new NewsList();
    ADFrame.prototype.getContent = function(data) {
        var html = '';
        label = this;
        data.each(function(index) {
		 if (index < label.maxCount) {
			html += '<iframe src="'+$(this).attr('href')+'" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" width="'+label.imgwidth+'px" height="'+label.imgheight+'px" class="AdFrame"></iframe>';
		  }
        });
        return html;
    }

    function FlashNews(attrList) {
    	this.maxCount = Convert.toInt(attrList['maxcount'], 5);
	    this.introLength = Convert.toInt(attrList['introlength'], 120);
	    this.isShowTitle = Convert.toBool(attrList['isshowtitle'], true);
	    this.isShowIntro = Convert.toBool(attrList['isshowintro'], false);
		this.isShowImage = Convert.toBool(attrList['isshowimage'], false);
	    this.imgwidth = Convert.toString(attrList['imgwidth'], '90');
	    this.imgheight = Convert.toString(attrList['imgheight'], '60');
	    NewsList.call(this, attrList);
    }
    FlashNews.prototype = new NewsList();
    FlashNews.prototype.getContent = function(data) {
        var html = '', bigHtml = '', label = this; var imageCount=0;
        data.each(function(index) {
             if (index < label.maxCount) {
                 var link = ''
                 link += '<div id="focusPic'+ (index+1) +'" class="flashdiv">';
                 if (label.isShowImage){
                    link += '<div class="flashimg"><a target="_blank" href="' + $(this).attr('href') + '"><img src="' + $(this).find('Image').attr('src') + '" width="' + label.imgwidth + 'px" height="' + label.imgheight + 'px" /></a></div>';
                 }
                 if (label.isShowTitle) {
                    link += '<div class="flashtitle"><a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('ListTitle').text() + '</a></div>';
                 }
                  if (label.isShowIntro) {
                    link += '<div class="flashintro"><a target="_blank" href="' + $(this).attr('href') + '">' + $(this).find('Intro').text() + '</a></div>';
                 }
                 link += '<div class="index_page">';
                 for(var i=0;i<label.maxCount;i++)
                 {
                    if(i==index){
                       link += '<strong>'+ (i+1) +'</strong> ';
                    }
                    else
                    {
                       link += '<a href="javascript:setFocus('+ (i+1) +');">'+ (i+1) +'</a>';
                    }
                 }
                 link += '</div>';
                 link += '</div>';
                 bigHtml += link;
                 html = bigHtml+'<script type="text/javascript">FlashIsReady('+ label.maxCount +')</script>';
             }
             else
             {
                return;
             }
        });
 
        return html;
    }
})();

Date.prototype.format = function (mask) {
	var d = this;
	var zeroize = function (value, length) {
		if (!length) {
			length = 2;
		}
		value = String(value);
		for (var i = 0, zeros = ""; i < (length - value.length); i++) {
			zeros += "0";
		}
		return zeros + value;
	};
	return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMstT])\1?|[lLZ])\b/g, function ($0) {
		switch ($0) {
		  case "d":
			return d.getDate();
		  case "dd":
			return zeroize(d.getDate());
		  case "ddd":
			return ["Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat"][d.getDay()];
		  case "dddd":
			return ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"][d.getDay()];
		  case "M":
			return d.getMonth() + 1;
		  case "MM":
			return zeroize(d.getMonth() + 1);
		  case "MMM":
			return ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][d.getMonth()];
		  case "MMMM":
			return ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"][d.getMonth()];
		  case "yy":
			return String(d.getFullYear()).substr(2);
		  case "yyyy":
			return d.getFullYear();
		  case "h":
			return d.getHours() % 12 || 12;
		  case "hh":
			return zeroize(d.getHours() % 12 || 12);
		  case "H":
			return d.getHours();
		  case "HH":
			return zeroize(d.getHours());
		  case "m":
			return d.getMinutes();
		  case "mm":
			return zeroize(d.getMinutes());
		  case "s":
			return d.getSeconds();
		  case "ss":
			return zeroize(d.getSeconds());
		  case "l":
			return zeroize(d.getMilliseconds(), 3);
		  case "L":
			var m = d.getMilliseconds();
			if (m > 99) {
				m = Math.round(m / 10);
			}
			return zeroize(m);
		  case "tt":
			return d.getHours() < 12 ? "am" : "pm";
		  case "TT":
			return d.getHours() < 12 ? "AM" : "PM";
		  case "Z":
			return d.toUTCString().match(/[A-Z]+$/);   
		  default:
			return $0.substr(1, $0.length - 2);
		}
	});
};

function parseDate(str) {
	if (typeof str == "string") {
		var results = str.match(/^ *(\d{2,4})-(\d{1,2})-(\d{1,2}) *$/);
		if (results && results.length > 3) {
			return new Date(results[1], results[2] - 1, results[3]);
		}
		results = str.match(/^ *(\d{2,4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}) *$/);
		if (results && results.length > 5) {
			return new Date(results[1], results[2] - 1, results[3], results[4], results[5]);
		}
		results = str.match(/^ *(\d{2,4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);
		if (results && results.length > 6) {
			return new Date(results[1], results[2] - 1, results[3], results[4], results[5], results[6]);
		}
		results = str.match(/^ *(\d{2,4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);
		if (results && results.length > 7) {
			return new Date(results[1], results[2] - 1, results[3], results[4], results[5], results[6], results[7]);
		}
	}
	return null;
}