var browser = function(){}
browser.prototype.ie = /MSIE ((5\.5)|6)/.test(navigator.userAgent);
browser.prototype.opera = /opera/i.test(navigator.userAgent);
browser.prototype.webkit = /webkit/i.test(navigator.userAgent);
browser.prototype.firefox = /firefox/i.test(navigator.userAgent);
var library = function(){}
var __lib__ = new library();
library.prototype.winok = true;
library.prototype.zindex = 1000;
Date.prototype.MONTHNAMES = [
	"Январь",
	"Февраль",
	"Март",
	"Апрель",
	"Май",
	"Июнь",
	"Июль",
	"Август",
	"Сентябрь",
	"Октябрь",
	"Ноябрь",
	"Декабрь"
 ];
Date.prototype.getFullMountRU = function(){
	return this.MONTHNAMES[this.getMonth()];
}
Date.prototype.DAYNAMES = [
	"пн",
	"вт",
	"ср",
	"чт",
	"пт",
	"сб",
	"вс"
];
Date.prototype.getDayRU = function(){
	return this.DAYNAMES[this.getDay()];
}
Date.prototype.lastday = function(month, year) {
	var d = new Date(year ? year : this.getFullYear(), month ? month  : this.getMonth() + 1, 0);
	return d.getDate();
};
(function($){
	var history = function(){}
	var h = new history;
	$.ajj = function(obj, func_1, func_2){
		if(__lib__.default_link){
				$.post(
					__lib__.default_link,
					obj,
					function(r){
						try{
							r = eval(r);
							if(r.action)
								func_1(r);
							else
							{
								!(typeof func_2 == "function") ? func_2 = function(){} : null;
								func_2(r);
							}
						}
						catch(err){}
					}
				);
		}
	}
	$.fn.on = function(){
		$(this).attr("selected", "selected");
	}
	$.fn.win = function(options, ok, cancel){
		library.prototype.zindex++;
		var b = new browser();
		var $$ = $(this);
		if(b.ie)
			$$.find("div.win_close").each(function(){
				$.fixPNG(this);
			});
		$$.removeAttr("style");
		if(options.width)
			$$.css({
				width : options.width
			});
		if(options["class"])
			$$.attr({
				"class" : options["class"]
			});
		(typeof options == "undefined") ? options = {} : null;
		if(options.shadow){
			$("#alert_shadow").remove();
			$("<div id='alert_shadow'>&nbsp;</div>").css({
				position : "absolute",
				top : "0px",
				left : "0px",
				width : $(document).width(),
 				height : $(document).height(),
				zIndex : "10",
				background : "#000",
				opacity : "0.5"
			})
			.appendTo("body");
		}
		if(options.margin)
			$$.css({
				margin : options.margin
			});
		if(options.position){
			$$.css({
				position : "absolute",
				left : options.position.left,
				right : options.position.right,
				top : options.position.top,
// 				"margin-top" : "-"+($$.height()/2)+"px",
// 				"margin-left" : "-"+($$.width()/2)+"px",
				zIndex : __lib__.zindex
			});
		}
		else
		{
			window.scroll(0,0);
			$$.css({
				position : "absolute",
				top : "50%",
				left : "50%",
				"margin-top" : "-"+($$.height()/2)+"px",
				"margin-left" : "-"+($$.width()/2)+"px",
				"z-index" : __lib__.zindex
			});
		}
		if(typeof options.title == "object")
			$(options.title.id).html(options.title.text);
		if(typeof options.content == "object")
			$(options.content.id).html(options.content.text);
		$$.show();
		if(typeof options.drag == "object"){
			var pos = ($(options.drag.id).parent().height()/2) -10;
			$(options.drag.id).drag(function(e){
				$(options.drag.id).parent().css({
					top: e.pageY -10,
					left: e.pageX - $$.width()/2,
					margin : "0px"
				});
			});
		}
		if(typeof options.after == "function")
			options.after();
		$$.find("input[type=button]").unbind("click");
		$$.find("input[type=button], div").click(function(){
			var array = [];
			var object = {};
			$$.find("input[type=text], input[type=checkbox]:checked, input[type=radio]:checked, textarea, select").each(function(){
				array.push($(this).val() );
				object[$(this).attr("id")] = $(this).val();
			});
			switch($(this).attr("class")  ){
				case "ok":
					if(typeof ok == "function")
						ok(array, object);
					if(__lib__.winok){
						$$.hide();
						if(options.shadow)
							$("#alert_shadow").remove();
					}
				break;
				
				case "cancel":
					if(typeof cancel == "function")
						cancel(array, object);
					$$.hide();
					if(options.shadow)
						$("#alert_shadow").remove();
				break;
				
				default:
					if(/ok/i.test($(this).attr("class")  )  ){
						if(typeof ok == "function")
							ok(array, object);
						if(__lib__.winok){
							$$.hide();
							if(options.shadow)
								$("#alert_shadow").remove();
						}
					}
					if(/cancel/i.test($(this).attr("class")  ) ){
						if(typeof cancel == "function")
							cancel(array, object);
						$$.hide();
						if(options.shadow)
							$("#alert_shadow").remove();
					}
			}
		});
	}	
	$.fn.tooltip = function(pos){
		var $$ = $(this);
		history.prototype.tooltip = {};
		var _$ = history.prototype.tooltip;
		var t = h.tooltip;
		
		if(typeof pos == "object"){
			if(pos.x)
				var x = pos.x;
			else
				var x = $("#tooltip").width()/2;
			
			if(pos.y)
				var y = pos.y;
		}
		else
		{
			var x = 0;
			var y = 0;
		}
		
		if($(this).attr("title")  )
			$$
			.hover(
				function(){
					_$.title = $(this).attr("title");
					$(this).removeAttr("title");
					$(this).get(0).title = "";
					
					$("#tooltip").remove();
					$(
						'<div id="tooltip">'+t.title+'</div>'
					)
					.css({
						position : "absolute",
						top : t.Y,
						left : t.X
					})
					.appendTo("body");
					
					_$.append = true;
				},
				function(){
					$(this).attr("title", t.title);
					$("#tooltip").remove();
					delete _$.title;
					delete _$.append;
				}
			)
			.mousemove(function(e){
				_$.X = e.pageX + x;
				_$.Y = e.pageY + y;
				
				if(_$.append)
					$("#tooltip").css({
						top : t.Y,
						left : t.X
					});
			});
	}
	$.fixPNG = function(element){
		if( $(element).attr("clone") )
			element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + $(element).attr("clone") + "',sizingMethod='scale')";
		else
		{
			var src;
			if (element.tagName == 'IMG'){
				if($(element).height() > 0){
					var src = element.src;
					if (!element.style.width)
						element.style.width = $(element).width();
					if (!element.style.height)
						element.style.height = $(element).height();
					$(element).attr({clone : src});
					element.src = "/styles/lchotel/img/_.gif";
				}
			}
			else
			{
				src = element.currentStyle.backgroundImage.match(/url\("(.+\.png)"\)/i);
				if (src){
					src = src[1];
					element.runtimeStyle.backgroundImage="none";
				}
			}
			if (src) element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
		}
	}
	$.calendar = function(id, d, m, y, position){
		var form = {
			d : d,
			m : m,
			y : y
		};
		var date = new Date();
		var memory = function(){}
		var hash = new memory();
		var b = new browser();
		function calendar(m, y){
			var line = 0;
			var html = "<div><div class=\"calendar_box\"></div></div>";
			var $$ = $(html).get(0);
			var html = $("div.calendar_box", $$);
			y = y ? y : date.getFullYear();
			m = m || m === 0 ? m : date.getMonth();
			d = d ? d : date.getDate();
			memory.prototype.y = y;
			memory.prototype.m = m;
			var breaked = false;
			var firstDay = new Date(y, m, 1).getDay();
			var lastday = date.lastday(m+1, y);
			var day = false;
			if(firstDay == 0)
				firstDay = 7;
			else
				firstDay;
			for(var i = 0; i < date.DAYNAMES.length; i++){
				var breaked = (i == date.DAYNAMES.length -1);
				switch(line){
					case 0:
						html.append("<div class=\"calendar_dayname line_0\">"+date.DAYNAMES[i]+"</div>");
						if(breaked){
							html.append(
								"<div class=\"calendar_line\"><div class=\"back icon\">&nbsp;</div><div class=\"forward icon\">&nbsp;</div>"+y+" "+new Date().MONTHNAMES[m]+"</div>"
							);
							line++;
							i = -1;
							$("div.calendar_dayname:odd", $$).css({
								"background-color" : "#eee"
							});
						}
					break;
					
					case 1:
						if(i < firstDay -1)
							html.append("<div class=\"calendar_dayname line_1\">&nbsp;</div>");
						else
						{
							day = day ? day : 1;
							html.append("<div class=\"calendar_dayname line_1\">"+day+"</div>");
							day++;
						}
						if(breaked){
							html.append("<br/>");
							$("div.line_1:odd", $$).each(function(){
								if($(this).html() !== "&nbsp;")
									$(this).css({
										"background-color" : "#eee"
									});
							});
							line++;
							i = -1;
						}
					break;
					
					default:
						html.append("<div class=\"calendar_dayname line_"+line+"\">"+day+"</div>");
						day++;
						day > lastday || !day ? day = "&nbsp" : null;
						if(breaked && day <= lastday){
							html.append("<br/>");
							line++;
							i = -1;
						}
						$("div.line_"+line+":odd", $$).each(function(){
							if($(this).html() !== "&nbsp;"){
								$(this).css({
									"background-color" : "#eee"
								});
							}
						});
						$("div.line_"+line+"", $$).each(function(){
							if($(this).html() == date.getDate() && hash.m == date.getMonth() && hash.y == date.getFullYear() )
								$(this).css({
									border : "1px solid red"
								});
						});
				}
			}
			return html;
		}
		$(id).click(function(e){
			$("#win div.back, #win div.forward").die("click");
			$("#win").win({
				shadow : false,
				title : {
						id : "#win div.win_title",
						text : cookie.get("lang") == "lang_ru" || !cookie.get("lang") ? "Календарь" : "datepicker"
					},
				drag : {
						id : "#win div.win_header"
					},
				content : {
						id : "#win div.win_content",
						text : calendar()
					},
				position : position,
				"class" : "win select-free",
				width : "210px"
			});
			function actions(){
				$("#win div.close, div.back, div.forward").each(function(){
					if(b.ie)
						$.fixPNG(this);
				});
				$("div.calendar_dayname").each(function(){
					if(/^[0-9]+$/.test($(this).html() ) ){
						$(this)
						.css({
							cursor : "pointer"
						})
						.click(function(){
							with(form){
								$(m).find("option[value="+(hash.m+1)+"]").on();
								$(m).change();
								$(y).find("option[value="+hash.y+"]").on();
								$(d).find("option[value="+$(this).html()+"]").on();
								$("#win div.cancel").click();
							}
						})
						.hover(
							function(){
								$(this).attr({
									color : $(this).css("background-color")
								}).css({
									"background-color" : "yellow"
								});
							},
							function(){
								$(this).css({
									"background-color" : $(this).attr("color")
								});
							}
						);
					}
				});
			}
			actions();
			$("#win div.back").live("click", function(){
				$("#win div.win_content").html(
					calendar(
						(function(){
							memory.prototype.m--;
							if(hash.m == -1){
								memory.prototype.m = 11;
								memory.prototype.y--;
							}
							return hash.m;
						})(), hash.y)
				);
				actions();
			});
			$("#win div.forward").live("click", function(){
				$("#win div.win_content").html(
					calendar(
						(function(){
							memory.prototype.m++;
							if(hash.m == 12){
								memory.prototype.m = 0;
								memory.prototype.y++;
							}
							return hash.m;
						})(),
						hash.y
					)
				);
				actions();
			});
		});
	}
	$.alert = function(title, mess, poss){
		$("#win").win({
		shadow : false,
		title : {
				id : "#win .win_title",
				text : title
			},
		drag : {
				id : "#win .win_header"
			},
		content : {
				id : "#win div.win_content",
				text : mess
			},
		position : poss,
		after : function(){
		},
		width : "300px",
		"class" : "win alert select-free"
		}, function(){
			$("#win").hide();
			library.prototype.winok = false;
		});
	}
	$.listenDays = function(d, m, y){
		$(m).change(function(){
			var $$ = $(this);
			var month = $$.val();
			var year = $(y).val();
			var max = new Date().lastday(month, year);
			$(d).find("option[value=28]").nextAll().remove();
			for(i = 28; i < max; i++)
				$(d).append("<option value="+(i+1)+">"+(i+1)+"</option>");
		});
		$(y).change(function(){
			var $$ = $(this);
			var month = $(m).val();
			var year = $$.val();
			var max = new Date().lastday(month, year);
			$(d).find("option[value=28]").nextAll().remove();
			for(i = 28; i < max; i++)
				$(d).append("<option value="+(i+1)+">"+(i+1)+"</option>");
		});
	}
	$.fn.toBIG = function(){
		$(this).click(function(e){
			library.prototype.click = e.pageY;
			var b = new browser;
			window.scroll(0, 0);
			$("body, html").css({
				overflow : "hidden"
			});
			$("<div id='shadow' style='background:#000;'>&nbsp;</div><div id='photo_box' style='overflow:scroll;'>&nbsp;</div>").css({
					position : "absolute",
					top : "0px",
					left : "0px",
					width : $(document).width(),
					height : $(window).height(),
					"z-index" : "100",
					"text-align" : "center"
				})
				.appendTo("body");
				$('<img src="'+$(this).attr("src").replace("_s", "")+'" alt="" id="view_pic"/>')
					.css({
						margin : "60px"
					})
					.appendTo("#photo_box");
				$('<img src="/styles/lchotel/img/dialog-close.png" alt="" id="photo_close"/>')
					.css({
						position : "absolute",
						top : "5px",
						right : "10px",
						cursor : "pointer"
					})
					.appendTo("#photo_box");
				
				if(b.ie)
					$.fixPNG($("#photo_close").get(0)  );
				$("#photo_close, #shadow, #view_pic, #photo_box").click(function(){
					$("#shadow, #photo_box").remove();
					$("body, html").removeAttr("style");
					window.scroll(0, __lib__.click-50);
				});
				$("#shadow").css({
					opacity : "0.6",
					width : $(document).width(),
					height : $(document).height()
				});
		});
	}
})($);