//Проверяет, определена ли переменная
function isset(mixed_var) {
  //original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  var i = 0, argc = arguments.length, argv = arguments, set=true;
  for (i = 0; i< argc; i++){
    if( argv[i] === undefined ){
      set = false;
      break;
    }
  }
  return set;
}

// Удаление лишних прбельных символов, аналогичная функция из PHP
function trim(str, charlist) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: mdsjack (http://www.mdsjack.bo.it)
    // +   improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
    // +      input by: Erkekjetter
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: trim('    Kevin van Zonneveld    ');
    // *     returns 1: 'Kevin van Zonneveld'
    // *     example 2: trim('Hello World', 'Hdle');
    // *     returns 2: 'o Wor'
    charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
    var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
    return str.replace(re, '');
};

//Проверяет, является ли переменная массивом
function is_array( mixed_var ) {
    // 
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Legaev Andrey
    // +   bugfixed by: Cord
    return ( mixed_var instanceof Array );
}

//Проверяет, является ли переменная пустой (работает для всех типов данных)
function empty( mixed_var ) {    
    // 
    // +   original by: Philippe Baumann
 
    return ( mixed_var === "" || mixed_var === 0   || 
             mixed_var === "0" || mixed_var === null  || 
             mixed_var === false  ||  ( is_array(mixed_var) && mixed_var.length === 0 ) );
}

function print_r(arr, level) {
    var print_red_text = "";
    if(!level) level = 0;
    var level_padding = "";
    for(var j=0; j<level+1; j++) level_padding += "    ";
    if(typeof(arr) == 'object') {
        for(var item in arr) {
            var value = arr[item];
            if(typeof(value) == 'object') {
                print_red_text += level_padding + "'" + item + "' :\n";
                print_red_text += print_r(value,level+1);
		} 
            else 
                print_red_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
        }
    } 

    else  print_red_text = "===>"+arr+"<===("+typeof(arr)+")";
    return print_red_text;
}

//Функция организует замыкание при вызове функции
function MakeCaller ( func, arg ) {
  return function () { func( arg ); };
};
//Функция организует замыкание при вызове функции
function MakeCaller2 ( func, arg1, arg2) {
  return function () { func(  arg1, arg2 ); };
};

function intval( mixed_var, base ) {    // Get the integer value of a variable
    var tmp;
    if( typeof( mixed_var ) == 'string' ){
        tmp = parseInt(mixed_var);
        if(isNaN(tmp)){
            return 0;
        } else{
            return tmp.toString(base || 10);
        }
    } else if( typeof( mixed_var ) == 'number' ){
        return Math.floor(mixed_var);
    } else{
        return 0;
    }
};

function in_array(needle, haystack, strict) {
    // http://kevin.vanzonneveld.net
    //     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: true
    var found = false, key, strict = !!strict;
    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }
 
    return found;
}