function StringBuilder(value) {
    this.strings = new Array("");
    this.append(value);
}

StringBuilder.prototype.append = function(value) {
    if (value)
        this.strings.push(value); //String(value);
    return this;
}

StringBuilder.prototype.clear = function() {
    this.strings.length = 1;
}

StringBuilder.prototype.toString = function(delimiter) {
    delimiter = delimiter || '';
    return this.strings.join(delimiter);
}

StringBuilder.prototype.CompositeFormattingRegExp = new RegExp(/{\d{1,}}/);

StringBuilder.prototype.appendFormat = function() {
    var Result = arguments[0];
    var RegExpResult = null;
    while ((RegExpResult = StringBuilder.prototype.CompositeFormattingRegExp.exec(Result)) != null) {
        RegExpResult = RegExpResult.toString();
        var paramIndex = new Number(RegExpResult.substr(1, RegExpResult.length - 2))
        Result = Result.replace(RegExpResult, arguments[paramIndex + 1]);
    }
    this.append(Result);
    return this;
}

var StringBuffer = function() {
    this.cache = [];
    if (arguments.length)
        this.append.apply(this, arguments);
}
StringBuffer.prototype = {
    prepend: function() {
        this.cache.splice.apply(this.cache, [].concat.apply([0, 0], arguments));
        return this;
    },
    append: function() {
        this.cache = this.cache.concat.apply(this.cache, arguments);
        return this;
    },
    toString: function() {
        return this.getString();
    },
    getString: function() {
        return this.cache.join('');
    }
}


//字符串截取
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;
}

//取得参数
function QueryString(item) {
    var sValue = location.search.match(new RegExp("[\?\&]" + item + "=([^\&]*)(\&?)", "i"))
    return sValue ? sValue[1] : sValue
}


function getNavWidthandHeightInfo()
{
    var s = "";
    s += " 网页可见区域宽："+ document.body.clientWidth;
    s += " 网页可见区域高："+ document.body.clientHeight;
    s += " 网页可见区域宽："+ document.body.offsetWidth + " (包括边线和滚动条的宽)";
    s += " 网页可见区域高："+ document.body.offsetHeight + " (包括边线的宽)";
    s += " 网页正文全文宽："+ document.body.scrollWidth;
    s += " 网页正文全文高："+ document.body.scrollHeight;
    s += " 网页被卷去的高(ff)："+ document.body.scrollTop;
    s += " 网页被卷去的高(ie)："+ document.documentElement.scrollTop;
    s += " 网页被卷去的左："+ document.body.scrollLeft;
    s += " 网页正文部分上："+ window.screenTop;
    s += " 网页正文部分左："+ window.screenLeft;
    s += " 屏幕分辨率的高："+ window.screen.height;
    s += " 屏幕分辨率的宽："+ window.screen.width;
    s += " 屏幕可用工作区高度："+ window.screen.availHeight;
    s += " 屏幕可用工作区宽度："+ window.screen.availWidth;
    s += " 你的屏幕设置是 "+ window.screen.colorDepth +" 位彩色";
    s += " 你的屏幕设置 "+ window.screen.deviceXDPI +" 像素/英寸";
    //alert (s);
}


function resize_img(img) {
	try{
		if(img.width>0) {
			if(img.width>img.height) {
				img.width=img.height;
				img.removeAttribute('height');
			}
		}else {
			setTimeout(function () {
				resize_img(img);
			},50);
		}
	}catch(ex) {
		;
	}
}

/** 
* 字符串为javascript转码。
*/
String.prototype.encode4Js = function() {
	var o = [/\\/g, /"/g, /'/g, /\//g, /\r/g, /\n/g];
	var n = ["\\u005C", "\\u0022", "\\u0027", "\\u002F", "\\u000A", "\\u000D"];
	var s = this;
	for (var i = 0; i < o.length; i++) {
		s = s.replace(o[i], n[i]);
	}
	return s;
};

/**
* 序列化一个对象(只序列化String,Number,Date,Array,Json对象和有serialize2Str方法的对象,其它的对象都会被序列化成null)
* @memberof Object
* @param obj { Object } 需要序列化的Json、Array对象或其它对象
* @return 序列化后的字符串
* @type String
*/
Object.serialize2Str = function(obj) {
	if (obj == null) return null;
	if (obj.serialize2Str) return obj.serialize2Str();
	var cst = obj.constructor;
	switch (cst) {
		case String: return '"' + obj.encode4Js() + '"';
		case Number: return obj + "";
		case Date: return 'new Date(' + obj.getTime() + ')';
		case Array:
			var ar = [];
			for (var i = 0; i < obj.length; i++) ar[i] = Object.serialize2Str(obj[i]);
			return '[' + ar.join(',') + ']';
		case Object:
			var ar = [];
			for (var i in obj) {
				ar.push('"' + (i + '').encode4Js() + '":' + Object.serialize2Str(obj[i]));
			}
			return '{' + ar.join(',') + '}';
	}
	return null;
};

//去掉左空格
function trimLeft(str) {
    if (str.charAt(0) == " ") {
        str = str.slice(1);
        str = trimLeft(str);
    }
    return str;
}

//去掉右空格
function trimRight(str) {
    if (str.charAt(str.length - 1) == " ") {
        str = str.slice(0, str.length - 1);
        str = trimRight(str);
    }
    return str;
}

//去掉左右空格
function trim(str) {
    return trimLeft(trimRight(str));
}


function $111() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}




function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^\s)"+searchClass+"(\s$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getElementsByClassName(searchClass, domNode, tagName) {
    alert(searchClass);
    if (domNode == null) domNode = document;
    if (tagName == null) tagName = '*';
    var el = new Array();
    var tags = domNode.getElementsByTagName(tagName);
    var tcl = " " + searchClass + " ";
    for (i = 0, j = 0; i < tags.length; i++) {
        var test = " " + tags[i].className + " ";
        if (test.indexOf(tcl) != -1)
            el[j++] = tags[i];
    }
    alert(el);
    return el;
}


var EventUtil=new Object;
//oTarget:目标;sEventType：事件名称;funName:事件触发的函数名；
EventUtil.addEvent = function(oTarget, sEventType, funName) {
    if (oTarget.addEventListener) {//for DOM;
        oTarget.addEventListener(sEventType, funName, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("on" + sEventType, funName);
    } else {
        oTarget["on" + sEventType] = funName;
    }
};

EventUtil.removeEvent = function(oTarget, sEventType, funName) {
    if (oTarget.removeEventListener) {//for DOM;
        oTarget.removeEventListener(sEventType, funName, false);
    } else if (oTarget.detachEvent) {
        oTarget.detachEvent("on" + sEventType, funName);
    } else {
        oTarget["on" + sEventType] = null;
    }
};

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1)
                c_end = document.cookie.length;
            return decodeURIComponent(document.cookie.substring(c_start, c_end));
        }
    }
    return null;
}

function setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate);
}


//var a = [1, 2, 3];
//var sumNumber = Sum(a);
function Sum(a) {
if ((a instanceof Array) || (a && typeof a == "object" && "length" in a)) {
	var total = 0;
	for (var i = 0; i < a.length; i++) {
		var element = a[i];
		if (!element) continue;
		if (typeof element == "number") total += element;
		else throw new Error("All element must be numbers!");
	} return total;
} else throw new Error("Argument must be an array!!");
}