Giant = function(){
	this.domInit();
	this.attachEvents();
	this.updateFontSize();
}

Giant.prototype = {
	
	ANI_DURATION : 0.5, // секунды
	OFFSET_TOP : 100, // пиксели
	WIDTH_TO_FONT_SIZE : 35, // разы кратности (безразмерно)
	
	domInit : function(){
		this.jPtr = $("#giant_phone");
		this.jHolder = this.jPtr.find(".holder");
		this.jPhone = this.jPtr.find(".middle");
		this.jOpen = $("#contacts .phone span.link, #head .head_contacts .tel1");
		this.jClose = this.jPtr.find(".close");
	},

	attachEvents : function(){
		var that = this;
		this.jOpen.click(
			function(evt){
				if(!that.bOpened){
					that.open();
					evt.stopPropagation();
				}
			}
		);
		
		this.jHolder.click(
			function(evt){
				evt.stopPropagation();
			}
		);
		
		$(document).add(this.jClose).click(
			function(evt){
				if(that.bOpened){
					that.close();
					evt.stopPropagation();
				}
			}
		);
		
		$(window).resize(
			function(){
				if(that.bOpened){
					that.updateFontSize();
				}
			}
		);
	},
	
	open : function(){
		var that = this;
		
		that.jPtr.
			css("opacity", 0).
			addClass("ani").
			show();
		
		this.positionTop();
		this.updateFontSize();
			
		jTweener.removeTween(this.jPtr);	
		jTweener.addPercent(
			this.jPtr,
			{
				time : this.ANI_DURATION,
				transition : "linear",
				
				fade : function(position){
					that.jPtr.css("opacity", position);
				},
				
				
				onComplete : function(){
					that.jPtr.
						css("filter", "none").
						removeClass("ani");
				}
			}
		);

		this.bOpened = true;
	},
	
	close : function(){
		var that = this;
		
		this.jPtr.
			css("opacity", 1).
			addClass("ani");
		
		if($.browser.msie){ // jQuery выставляет "nonealpha(opacity='100')" - IE это не нравится
			this.jPtr[0].style.filter="alpha(opacity='100')"
		}
		
		jTweener.removeTween(this.jPtr);
		jTweener.addPercent(
			{
				time : this.ANI_DURATION,
				transition : "linear",
				fade : function(position){
					that.jPtr.css("opacity", 1 - position);
				},
				onComplete : function(){
					that.jPtr.
						hide().
						removeClass("ani");
				}
			}
		);
				
		this.bOpened = false;
	},
	
	positionTop : function(){
		this.jHolder.css("top", this.getOffsetTop());
	},
	
	getOffsetTop : function(){
		var
			iScrollTop = document.documentElement.scrollTop || document.body.scrollTop,
			iWindowHeight = document.documentElement.clientHeight || window.innerHeight,
			iPhoneHeight = this.jHolder.height();
		
		if(iWindowHeight >= iPhoneHeight + this.OFFSET_TOP * 2){ // если блок с телефоном по высоте влезает с некоторым запасом в окно, то центрируем
			return (iWindowHeight - iPhoneHeight) / 2 + iScrollTop;
		}
		else{ // если нет, то просто показываем с отступом сверху
			return this.OFFSET_TOP + iScrollTop;
		}
	},
	
	updateFontSize : function(){
		var iFontSize = Math.round(Kalinka.jPage.width() / this.WIDTH_TO_FONT_SIZE) + "px";
		this.jPhone.css("fontSize", iFontSize);
		
		if($.browser.mozilla){
			/*
				Firefox при изменении размера шрифта криво перерисовывает телефон
				(одни цифры ничанают наезжать на другие) - лечим передёргиванием.
			*/
			this.mozillaFix();
		}
	},
	
	mozillaFix : function(){
		var that = this;
		this.jPhone.hide();
		setTimeout(
			function(){
				that.jPhone.show();
			},
			1
		);
	}
	
}

$(document).ready(
	function(){
		new Giant();
	}
);