function strpos( haystack, needle, offset){
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}



function sizeof (mixed_var) {return this.count(mixed_var);}

function shuffle(inputArr)
{
    var valArr = [];
    var k = '', i = 0;
    for (k in inputArr) { valArr.push(inputArr[k]); delete inputArr[k];}
    valArr.sort(function() {return 0.5 - Math.random();});
    for (i = 0; i < valArr.length; i++) {inputArr[i] = valArr[i];}
    return true;
}


function shuffle(inputArr)
{
    var valArr = [];
    var k = '', i = 0;
    for (k in inputArr) { valArr.push(inputArr[k]); delete inputArr[k];}
    valArr.sort(function() {return 0.5 - Math.random();});
    for (i = 0; i < valArr.length; i++) {inputArr[i] = valArr[i];}
    return true;
}

function str_replace(search, replace, subject)
{
    // discuss at: http://phpjs.org/functions/str_replace
    var s = subject;
    var ra = r instanceof Array, sa = s instanceof Array;
    var f = [].concat(search);
    var r = [].concat(replace);
    var i = (s = [].concat(s)).length;
    var j = 0;

    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    }

    return sa ? s : s[0];
}

function explode( delimiter, string, limit )
{
    var emptyArray = { 0: '' };

    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||
        typeof arguments[1] == 'undefined' )
    {
        return null;
    }

    if ( delimiter === '' ||
        delimiter === false ||
        delimiter === null )
    {
        return false;
    }

    if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||
        typeof string == 'object' )
    {
        return emptyArray;
    }

    if ( delimiter === true ) {
        delimiter = '1';
    }

    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}

function strtolower( str )
{
    return (str+'').toLowerCase();
}