String.prototype.gsub = function(str1,str2){
    if (str1 == "") {
        return this;
    }
    function getSubString(index,length,arr){
        var str = "";
        for(var i=index;i<length+index;i++){
            str += arr[i];
        }
        return str;
    }
    function replaceStr(index,length,str,arr){
        var arrTemp = [];
        for(var i=0;i<index;i++){
            arrTemp.push(arr[i]);
        }
        arrTemp = arrTemp.concat(str.split(""));
        for(var i=index+length;i<arr.length;i++){
            arrTemp.push(arr[i]);
        }
        return arrTemp;
    }
    var referredLength = str1.length;
    var targetLength = str2.length;
    var temp = this;
    var arr = this.split("");
    for(var i=0;i<arr.length;i++){
        if(!(i + referredLength > arr.length)){
            var subStr = getSubString(i,referredLength,arr);
            if(subStr == str1){
                arr = replaceStr(i,str1.length,str2,arr);
                i += targetLength-1;
            }
        }
    }
    return arr.join("");
}
Function.prototype.bind = function(){
    function generateArray(ori){
        var args = new Array(ori.length);
        for(var i=0;i<ori.length;++i){args[i] = ori[i]};  
        return args;
    }
    if (arguments.length < 2 && typeof(arguments[0]) == "undefined") return this;
    var args = generateArray(arguments);
    var __method = this, object = args.shift();
    return function(){
        var _args = generateArray(arguments);
        for(var i=0;i<arguments.length;++i){_args[i] = arguments[i]};
        return __method.apply(object, args.concat(_args));
    }
}
function getXmlContentText(node){
    return Xml.getNodeXml(node);
}
function ApplyVariables(template, obj_name , obj){
    var tag_rep = [new RegExp(/(<%[ *|\=])/),new RegExp(/(%\>)/)];
    var command = ["var " + obj_name + " = obj;var _COMM='';"];
    var index = 0 , i = 0 , switch_pos = 0;
    var backup_str = new String(template);
    var is_output_mark = false;
    while(index != -1){
        var rep = tag_rep[i%2];
        var match_result = backup_str.match(rep);
        if (match_result == null) {
            if (i%2 != 0) {
                throw "template error";
            }else{
                command.push("_COMM+='"+backup_str.gsub("'","\\'")+"'");
                break;
            };
        };
        index = match_result.index;
        var content = backup_str.substr(0,index);
        if (i%2 == 0) {
            is_output_mark = (match_result[0].indexOf("<%=") != -1);
            command.push("_COMM+='" + content.gsub("'","\\'")+"'");
        }else{
            if (is_output_mark) {
                command.push("_COMM+=" + content.gsub("'","\\'"));
            }else{
                command.push(content.gsub("'","\\'"));
            }
        }
        backup_str = backup_str.substr(index + match_result[0].length);
        i++;
    }
    command.push("_COMM");
    return eval(command.join("\n"));
}
