/** 
 * Метод функций для Callback вызова метода класса
 *
 * @param object object				Объект к которому делается bind
 * @return function
*/
Function.prototype.bind1 = function( object ) {

	var method = this;

	return function ( ) {
		return method.apply( object, arguments );
	}

}

/** 
 * Кроссбраузерный attachEvent
 *
 * @param object objectTarget		Объект к которому делается attachEvent
 * @param string eventType			Вид события
 * @param object funcionHandler		Функция обработчик события
*/
AttachEvent = function( objectTarget, eventType, funcionHandler ) {

	if ( objectTarget.addEventListener ) { //for DOM-compliant browsers
		objectTarget.addEventListener( eventType, funcionHandler, false );
	}
	else if ( objectTarget.attachEvent ) { //for IE
		objectTarget.attachEvent('on' + eventType, funcionHandler );
	}
	else { //for all others
		objectTarget['on' + eventType] = funcionHandler;
	}

}

/** 
 * Кроссбраузерный detachEvent
 *
 * @param object objectTarget		Объект к которому делается attachEvent
 * @param string eventType			Вид события
 * @param object funcionHandler		Функция обработчик события
*/
DetachEvent = function( objectTarget, eventType, funcionHandler ) {

	if ( objectTarget.addEventListener ) { //for DOM-compliant browsers
		objectTarget.removeEventListener( eventType, funcionHandler, false );
	}
	else if ( objectTarget.attachEvent ) { //for IE
		objectTarget.detachEvent('on' + eventType, funcionHandler );
	}
	else { //for all others
		objectTarget['on' + eventType] = '';
	}

}

/** 
 * Проверка на Gecko-браузер
 *
 * @return boolean
*/
IsGecko = function ( ) {

	return !document.attachEvent && document.addEventListener;

}

/** 
 * Остановка всплытия события к родительским объектам
 *
 * @param event event		Событие
*/
CancelEventBubble = function ( event ) {

	if ( !IsGecko( ) ) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	else {
		event.preventDefault( );
	}

}