//Проверяет, определена ли переменная
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 fnShowProps(obj, objName){
  var result = "The properties for the " + objName + " object:" + "\n";
  for (var i in obj) {result += i + " = " + obj[i] + "\n";}
  alert(result);
};


$.fn.heightEdit = function(min_height){
	if(!min_height)
		var min_height = $(this).height();
	$(this).css("overflow-y", "hidden");
	$(this).bind("blur focus click dblclick keypress", function(event){
//		alert(this.scrollHeight + " _ " + min_height);
		if(this.scrollHeight > min_height)
			$(this).height(this.scrollHeight);
		else
			$(this).height(min_height);
		if(($.browser.mozilla || $.browser.safari) && this.scrollHeight == $(this).height()){
			
				var val = this.value;
				var arr = new Array();
				arr = val.match(/\n/g);
				var enter_count = 0;
				enter_count = arr ? arr.length : 0;
				if(enter_count*15+15>min_height)
					$(this).height(enter_count*15+15);
				else
					$(this).height(min_height);				
//				alert(enter_count+" _ ");
//				val = val.replace(/\n/g, "");
//				alert(fnShowProps(val, "text"));
			
//				var last_char_index = $(val).size()-1;
//				if(val.last_char_index)
//				alert("del"); 
//				$(this).height(this.scrollHeight-15);
//			}
//			var val = this.value;
			// через количество \n одна строка - 15px if(\n*15 < this.clientHeight) $(this).height(this.clientHeight-15); !!!!
/*			$(this).height(this.scrollHeight-15);
			$(this).click();*/
		}
			
	});
}

// сообщает, какая кнопка мыши нажата ( вешать на событие mousedown )
// event - событие - нажатие кнопки
function buttonalert(event){
 var button;
 if (event.which == null)
 	button = (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
 else
 	button = (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
 alert(button);
 dont(event);
 return false;
}

function dont(event){
 if (event.preventDefault)
 	event.preventDefault();
 else
 	event.returnValue= false;
}

// возвращает true, если нажата левая или средняя кнопка мыши ( вешать на событие mousedown )
// event - событие - нажатие кнопки
function leftOrMiddleMouseClick(event){
 var button = '';
 if (event.which == null)
 	button = (event.button < 2) ? "LEFT" : ((event.button == 4) ? "MIDDLE" : "RIGHT");
 else
 	button = (event.which < 2) ? "LEFT" : ((event.which == 2) ? "MIDDLE" : "RIGHT");
 dont(event);
 if (button == "LEFT" || button == "MIDDLE") 
 	return true;
 else 
 	return false;
}
