function str_replace(search, replace, subject, count) {
// http://kevin.vanzonneveld.net
// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// +   improved by: Gabriel Paderni
// +   improved by: Philip Peterson
// +   improved by: Simon Willison (http://simonwillison.net)
// +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// +   bugfixed by: Anton Ongson
// +      input by: Onno Marsman
// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// +    tweaked by: Onno Marsman
// +      input by: Brett Zamir (http://brett-zamir.me)
// +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// +   input by: Oleg Eremeev
// +   improved by: Brett Zamir (http://brett-zamir.me)
// +   bugfixed by: Oleg Eremeev
// %          note 1: The count parameter must be passed as a string in order
// %          note 1:  to find a global variable in which the result will be given
// *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
// *     returns 1: 'Kevin.van.Zonneveld'
// *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
// *     returns 2: 'hemmo, mars'

var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
		f = [].concat(search),
		r = [].concat(replace),
		s = subject,
		ra = r instanceof Array, sa = s instanceof Array;
s = [].concat(s);
if (count) {
	this.window[count] = 0;
}

for (i=0, sl=s.length; i < sl; i++) {
	if (s[i] === '') {
		continue;
	}
	for (j=0, fl=f.length; j < fl; j++) {
		temp = s[i]+'';
		repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
		s[i] = (temp).split(f[j]).join(repl);
		if (count && s[i] !== temp) {
			this.window[count] += (temp.length-s[i].length)/f[j].length;}
	}
}
return sa ? s : s[0];
};


function substr_replace (str, replace, start, length) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: substr_replace('ABCDEFGH:/MNRPQR/', 'bob', 0);
    // *     returns 1: 'bob'
    // *     example 2: $var = 'ABCDEFGH:/MNRPQR/';
    // *     example 2: substr_replace($var, 'bob', 0, $var.length);
    // *     returns 2: 'bob'
    // *     example 3: substr_replace('ABCDEFGH:/MNRPQR/', 'bob', 0, 0);
    // *     returns 3: 'bobABCDEFGH:/MNRPQR/'
    // *     example 4: substr_replace('ABCDEFGH:/MNRPQR/', 'bob', 10, -1);
    // *     returns 4: 'ABCDEFGH:/bob/'
    // *     example 5: substr_replace('ABCDEFGH:/MNRPQR/', 'bob', -7, -1);
    // *     returns 5: 'ABCDEFGH:/bob/'
    // *     example 6: 'substr_replace('ABCDEFGH:/MNRPQR/', '', 10, -1)'
    // *     returns 6: 'ABCDEFGH://'
 
    if (start < 0) { // start position in str
        start = start + str.length;
    }
    length = length !== undefined ? length : str.length;
    if (length < 0) {
        length = length + str.length - start;
    }
    return str.slice(0, start)+replace.substr(0, length)+replace.slice(length)+str.slice(start+length);
}

