/******************************************************************************************* COMMON FEATURES */
/********************************************************************************* META STORAGE */
var MetaStorage = (function() {
	var storage = {};
	return {
		set: function(name,value) {
			storage[name] = value;
		},
		get: function(name) {
			return storage[name];
		}
	}
})();
/*********************************************************************************\\ META STORAGE \\*/
/********************************************************************************* POPUP */
function Popup() {}
Popup.prototype = {
	init: function(opts) {
		opts = opts || {};
		this.popupPlace = opts.container || as.$$("body");
		this.closeType = opts.closeType || "ByButton";
		this.instantShow = opts.instantShow || true;
		this.popupType = opts.popupType || "age-popup";
		this.defaultContent = opts.defaultContent || null;
		this.relativeTo = opts.relativeTo || this.popupPlace;
		
		this.createPopup();
		return this;
	},
	createPopup: function() {
		this.popupWrapper = as.append(
			"<div class='as-hidden popup-container "+this.popupType+"'>" +
				"<div class='t'><b class='r'><i></i></b><b class='l'><i></i></b></div>" +
				"<div class='popup'><div class='overlay-wrapper'><div class='overlay'><iframe scrolling='no' frameborder='0'></iframe></div></div>" +
					"<div class='lc'>" +
						"<div class='content'></div>" +
					"</div>" +
					"<div class='rc'><b></b></div>" + 					
				"</div>" +
				"<div class='b'><b class='r'><i></i></b><b class='l'><i></i></b></div>" +
			"</div>",
			this.popupPlace
		);
		this.popupContent = as.$$("div.content",this.popupWrapper);
		this.defaultContent && this.update(this.defaultContent);
		this.instantShow && this.show();
	},
	update: function(content,append) {
		append || (this.popupContent.innerHTML = "");
		as.append(content,this.popupContent);
		//typeof content == "string" ? (this.popupContent.innerHTML += content) : (as.append(content,this.popupContent));
		return this;
	},
	show: function() {
		this.popupWrapper.className = this.popupWrapper.className.replace(/\bas-hidden\b/gi,"");
		var relativeToCoords = as.getElementPosition(this.relativeTo);
		as.style(this.popupWrapper,{
			left: relativeToCoords.left + relativeToCoords.width/2 - this.popupWrapper.offsetWidth/2 + "px",
			top: relativeToCoords.top + relativeToCoords.height/2 - this.popupWrapper.offsetHeight/2 + "px"
		});
		setTimeout(as.bind(this.initClosing,this),0);
	},
	hide: function() {
		this.popupWrapper.className += " as-hidden";
		this.onHide && this.onHide();
	},
	remove: function() {
		as.remove(this.popupWrapper);
	},
	initClosing: function() {
		if (this.closingInited && this.closeType != "ByAwayClick") return;
		try { this["initClosing"+this.closeType](); this.closingInited = true; }
		catch(e) { this.initClosingByButton(); }		
	},
	initClosingByButton: function() {
		var closeLink = as.prepend("<a href='#' class='close'></a>",this.popupWrapper);
		as.w(closeLink).click(as.bind(function(e) {
			e.preventDefault();
			this.hide();
		},this));
		return closeLink;
	},
	initClosingByLink: function() {
		this.initClosingByButton().innerHTML = "Закрыть";
	},
	initClosingByAwayClick: function() {
		var checkClickTarget = as.bind(function(e) {
			if (!as.parent(e.target,this.popupWrapper)) {
				as.e.declick(document.body,checkClickTarget);
				this.hide();
			}
		},this);
		as.e.click(document.body,checkClickTarget);
	}
}
/*************** Login Popup ***/
function LoginPopup() {};
LoginPopup.prototype = new Popup();
LoginPopup.prototype.show = function() {
	this.popupWrapper.className = this.popupWrapper.className.replace(/\bas-hidden\b/gi,"");
	this.popupWrapper.className += " login-popup-ie6";
	setTimeout(as.bind(this.initClosing,this),0);
}
LoginPopup.prototype.loginInit = function(callback) {
	this.form = as.$$("form",this.popupWrapper);
	this.submitButton = as.$$("span.button",this.form);
	this.callback = callback;
	var username = as.$$("input.username",this.form);
	var pass = as.$$("input.pass",this.form);
	var remember = as.$$("input.remember",this.form);
	var loginAjaxUrl = "/user/login/ajax/";
	as.e.submit(this.form,function(e) {							
		e.preventDefault();
		as.ajax(loginAjaxUrl,as.bind(this.onResponse,this),"POST",
			"login=" + username.value + "&password=" + pass.value + "&uri=" + location.pathname + "&remember=" + remember.value,
			null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]
		);
		this.showLoader();
	},this);
	return this;
}
LoginPopup.prototype.showLoader = function() {
	this.submitButton.style.display = "none";
	this.loader = as.after("<img class='loader' src='/i/icon.loader.gif' />",this.submitButton);
	this.redrawButton();
}
LoginPopup.prototype.hideLoader = function() {
	this.submitButton.style.display = "block";
	as.remove(this.loader);
	this.redrawButton();
}
LoginPopup.prototype.redrawButton = function() {
	as.$$("a.close",this.popupWrapper).style.display = "none";
	as.$$("a.close",this.popupWrapper).style.display = "block";	
}
LoginPopup.prototype.onResponse = function(response) {
	this.hideLoader();
	response = eval("(" + response + ")");
	if (response.error === "") {
		this.hide();
		MetaStorage.set("auth",true);
		for (var i in response) {
			MetaStorage.set(i,response[i]);
		}
		this.callback && this.callback(response);
	}
	else {
		this.warning || (this.warning = as.before("<p class='warning'>Логин или пароль неверны.</p>",this.form));
	}
}
var showLoginPopup = (function() {
	var popup = null;
	return function(callback) {
		if (popup) {
			popup.show();
		}
		else {
			popup = new LoginPopup().init({
				closeType: "ByLink",
				popupType: "login-popup",
				defaultContent:
					'<div class="login-popup-content">'+
						'<p>Голосовать могут только зарегистрированные пользователи</p>'+
						'<ul class="actions">'+
							'<li class="enter">Вход на сайт</li>'+
							'<li class="register"><a href="/user/register/">Регистрация</a></li>'+
						'</ul>'+
						'<form>'+
							'<label>'+
								'Имя пользователя'+
								'<input type="text" class="type-text username" name="login" />'+
							'</label>'+
							'<label>'+
								'Пароль'+
								'<input type="password" class="type-text pass" name="password" />'+
							'</label>'+
							'<label>'+
								'<input type="checkbox" class="type-checkbox remember" name="remember" />'+
								'Запомнить меня'+
							'</label>'+
							'<span class="button"><input type="submit" name="submit" value="Войти" /></span>'+
						'</form>'+
					'</div>'
			}).loginInit(callback);
		}
	}
})();
/*************** Calendar Popup ***/
/*********************************************************************************\\ POPUP \\*/
/******************************************************************************************* COMMON FEATURES */
/******************************************************************************************* VOTES */
function Vote() {};
Vote.prototype = {
	init: function(a,opts) {
		this.a = a;
		this.data = opts;
		this.dataString = "";
		for (var i in this.data) {
			this.dataString += (i + "=" + this.data[i] + "&");
		}
		this.addEvents();
	},
	addEvents: function() {
		as.w(this.a).click(function(e){
			e.preventDefault();
			MetaStorage.get("auth") ? this.voteStart(e) : showLoginPopup(as.bind(this.onLogin,this));
		},this);
	},
	voteStart: function(e) {
		e.preventDefault();
		this.a.blur();
		as.ajax(this.url,as.bind(this.voteFinish,this));
	},
	voteFinish: function() {}
}
/********* Article Vote */
function articleVote() {};
articleVote.prototype = new Vote();
articleVote.prototype.init = function(a,opts) {
	this.ajaxUrl = "/user/rate";
	Vote.prototype.init.apply(this,arguments);
}
articleVote.prototype.onLogin = function(response) {
	response.has_voted ? this.onSuccess(response) : this.voteStart();
}
articleVote.prototype.voteStart = function() {
	this.a.blur();
	as.remove(this.a.parentNode.lastChild)
	this.a.className += " button-inactive";
	as.e.declick(this.a);
	this.loader = as.append("<img class='loader' src='/i/icon.loader.gif' />",this.a.parentNode);
	as.ajax(this.ajaxUrl,as.bind(this.voteFinish,this),"POST",this.dataString,null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]);
}
articleVote.prototype.voteFinish = function(data) {
	as.remove(this.loader);
	data = eval("("+data+")");	
	data.rating >= 0 ? this.onSuccess(data) : this.onError("Произошла ошибка. Попробуйте повторить попытку позже.");
}
articleVote.prototype.onSuccess = function(data) {
	this.a.parentNode.innerHTML = "Спасибо, ваш голос принят";
	if (as.$$("p.rating ins", as.parent(this.a,"div.article-features"))) {
		as.$$("p.rating ins", as.parent(this.a,"div.article-features")).innerHTML = data.rating;
	}
	as.remove(this.a);
}
articleVote.prototype.onError = function(error) {
	this.a.className = this.a.className.replace(/\bbutton-inactive\b/,"");
	this.a.parentNode.innerHTML += error;
}
/*********\\ Article Vote \\*/
/*******************************************************************************************\\ VOTES \\*/
/******************************************************************************************* FAVORITES */
function Fav(){}
Fav.prototype = {
	init: function(a,opts) {
		this.a = a;
		this.apn = a.parentNode;
		this.data = opts;
		this.dataString = "";
		for (var i in this.data) {
			this.dataString += (i + "=" + this.data[i] + "&");
		}
		this.ajaxUrlAdd = "/user/favorites/add";
		this.ajaxUrlRemove = "/user/favorites/remove";
		
		this.addEvents();
	},
	reInit: function(status) {
		status == "added"
			? ((this.a.innerHTML = "Удалить из избранного") && (this.a.href = '/user/favorites/remove') && (this.apn.className += " remove-from-favorite"))
			: ((this.a.innerHTML = "Добавить в избранное") && (this.a.href = '/user/favorites/add') && (this.apn.className = this.apn.className.replace(/\bremove-from-favorite\b/,"")));
	},
	addEvents: function() {
		as.w(this.a).click(function(e) {
			e.preventDefault();
			MetaStorage.get("auth") ? this.startAdding() : showLoginPopup(as.bind(this.onLogin,this));
		},this);
	},
	onLogin: function(response) {
		if (response.has_favorite) this.reInit("added");
		else this.startAdding();
	},
	startAdding: function() {
		this.a.blur();
		this.a.className += " as-hidden";
		this.loader = as.append("<img class='loader' src='/i/icon.loader.gif' />",this.a.parentNode);
		as.ajax((this.a.href.indexOf("favorites/remove") != -1 || this.apn.className.indexOf("remove-from-favorite") != -1) ? this.ajaxUrlRemove : this.ajaxUrlAdd,as.bind(this.finishAdding,this),"POST",this.dataString,
			null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]
		);
	},
	finishAdding: function(data) {
		as.remove(this.loader);
		this.a.className = this.a.className.replace(/\bas-hidden\b/,"");
		data = eval("("+data+")");
		if (!data.result == 0) return;
		this.reInit(data.has_favorite ? "added" : "removed");
	}
}
/*** MY PLACES ***/
function NewPlace(){}
NewPlace.prototype = new Fav();
NewPlace.prototype.init = function(a,opts) {
	Fav.prototype.init.apply(this,arguments);
	this.dataString += "type=2";
}
NewPlace.prototype.onLogin = function(response) {
	if (response.inmyplaces) this.reInit("added");
	else this.startAdding();
}
NewPlace.prototype.reInit = function(status) {
	status == "added" 
		? (this.a.innerHTML = "Удалить из «моих мест»")
		: (this.a.innerHTML = "Добавить в «мои места»");
}

function FavProfile() {}
FavProfile.prototype = new Fav();
FavProfile.prototype.reInit = function(status) {
	if (status == "removed") {
		as.remove(as.parent(this.a,"li"));
	}
}

function ContestVote() {}
ContestVote.prototype = new articleVote();
ContestVote.prototype.beforeInit = function(listItem) {
	if (!listItem.onclick) return;
	var data = listItem.onclick();
	as.after("<p class='vote'><a class='button' href='#'><span>Голосуй</span></a></p>",as.$$("div.meta",listItem));
	this.init(as.$$("a.button",listItem),data);
}

function votes() {
	as.w("div.article-features p.vote a.button").each(function() {
		if (!as.parent(this,"div.article-wrapper").onclick) return;
		new articleVote().init(this,as.parent(this,"div.article-wrapper").onclick());
	});
	as.w("div.article-features p.favorite a").each(function(){
		if (!as.parent(this,"div.article-wrapper").onclick) return;
		new Fav().init(this,as.parent(this,"div.article-wrapper").onclick());													
	});
	as.w("div.article-features p.add a").each(function(){
		if (!as.parent(this,"div.article-wrapper").onclick) return;
		new NewPlace().init(this,as.parent(this,"div.article-wrapper").onclick());
	});
	as.w("div.chapter-filter li.favorite a").each(function(){
		if (!as.parent(this,"div.track-wrapper").onclick) return;
		new Fav().init(this,as.parent(this,"div.track-wrapper").onclick());													
	});	
	as.w("ul.blog-track div.delete a").each(function(){
		if (!as.parent(this,"li").onclick) return;
		new FavProfile().init(this,as.parent(this,"li").onclick());
	});
	as.w("div.chapter-filter li.favorite a").each(function(){
		if (!as.parent(this,"div.chapter-filter").onclick) return;
		new Fav().init(this,as.parent(this,"div.chapter-filter").onclick());
	});
	as.w("ul.qa-track li a.favorite").each(function(){
		if (!as.parent(this,"li").onclick) return;
		new Fav().init(this,as.parent(this,"li").onclick());
	});
	as.w("ul.contest-works li").each(function() {
		new ContestVote().beforeInit(this);
	});
}
/*******************************************************************************************\\ FAVORITES \\*/
/******************************************************************************************* COMMENTS */
function commentVote() {};
commentVote.prototype = {
	init: function(container) {
		this.container = container;
		this.addLinks();
		this.addEvents();
	},
	ajaxUrl: "",
	addLinks: function() {
		this.up = as.append("<a href='#' class='plus'><ins>+1</ins></a>");
		this.down = as.append("<a href='#' class='minus'><ins>-1</ins></a>");
	}
}
function Comment() {}
Comment.prototype = {
	init: function(comment,editor,chapterName) {
		this.comment = comment;
		this.chapterName = chapterName;
		this.editor = editor;
		this.commentText = as.$$("div.comment-text",this.comment).innerHTML;
		this.answerLink = as.$$("a.answer",this.comment);
		this.quoteLink = as.$$("a.quote",this.comment);
		this.author = as.$$("div.status-bar a.name",this.comment).innerHTML;
		this.commentDate = as.$$("span.date",this.comment).innerHTML;
		this.commentRef = "/comment_redirect/" + this.chapterName + "/" + this.comment.onclick().commentId;

		this.addEvents();
	},
	CLS: function() {
		this.editor = this.quoteLink = this.answerLink = null;
	},
	addEvents: function() {
		as.e.click(this.quoteLink,this.quoteThis,this);
		as.e.click(this.answerLink,this.answerThis,this);
		as.e.unload(window,this.CLS,this);
	},
	quoteThis: function(e) {
		e.preventDefault();
		this.editor.setEnd();
		this.editor.appendContent(
			"<div class='quotes'><div class='quote-container'><blockquote>" + 
				this.commentText + 
			"</blockquote></div><a class='message-author' href='" + this.commentRef + "'>"+this.author+", "+this.commentDate+"</a></div>");
		this.editor.appendContent("<br />");
		this.editor.focus();
		location.hash = "no-hash";
		location.hash = "answer";
	},
	answerThis: function(e) {
		e.preventDefault();
		this.editor.setStart();
		this.editor.appendContent("<a class='message-author' href='" + this.commentRef + "'>"+"Ответ на комментарий от: " + this.author + ", "+this.commentDate+"</a>");
		this.editor.appendContent("<br />");
		this.editor.focus();
		location.hash = "no-hash";
		location.hash = "answer";
	}
}
function comments() {
	if (!as.$$("div.article-comments textarea")) return;
	var editor = as.$$("div.article-comments textarea").aseditor;
	var chapterName = as.$$("div.article-comments ul.line-comments").onclick().chapter_name;
	as.w("div.article-comments h2 a").click(function(e) {
		e.preventDefault();		
		editor.focus();
		location.hash = "no-hash";
		location.hash = "answer";
	});
	
	as.w("div.article-comments ul.line-comments li").filter(function() { return this.parentNode.className.match(/\bline-comments\b/)}).each(function() {
		new Comment().init(this,editor,chapterName);
	});
}
/*******************************************************************************************\\ COMMENTS \\*/
/******************************************************************************************* AGE SELECTOR */
function ageSelector() {
	function createAgeList(list,link) {
		try {
			list = eval("("+list+")");
			var ageList = as.create("<ul class='age-list'></ul>");
			as.foreach(list,function(item){
				if (item.post_count != 0){
					as.append(
						"<li class='age-" + item.name + "'><a href='" + item.uri + "' class='" + (item.active ? " active" : "") + "'>" + item.title + "</a></li>",
						ageList		  
					);
				}
				else{
					as.append(
						"<li class='age-" + item.name + "'><span>" + item.title + "</span></li>",
						ageList		  
					);
				}
			});
			link.popup = new Popup().init({
				closeType: "ByAwayClick",
				popupType: "age-popup",
				defaultContent: ageList,
				relativeTo: link
			});
		}
		catch(e) {}
	}
	function onSelectorClick(e) {
		e.preventDefault();
		var data, postString = "uri="+location.pathname;
		if (this.onblur) {
			data = this.onblur();
			for (var i in data) {
				postString += ("&" + i + "=" + data[i]);
			}
		}
		this.blur();
		this.popup 
			? this.popup.show() 
			: as.ajax(this.href,as.bind(function(list){createAgeList(list,this)},this),"POST",postString,null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]);					 	}
	as.w("div.age-selector h2 a").click(onSelectorClick);
	as.w("a.age-selector-popup").click(onSelectorClick);
}
/*******************************************************************************************\\ AGE SELECTOR \\*/
/******************************************************************************************* PERSONAL MAIL */
function PersonalMail(){}
PersonalMail.prototype = {
	init: function(form) {
		this.form = form;
		this.actions = as.$$("div.mail-actions",this.form);
		this.messagesList = as.$$("ul.messages",this.form);
		this.messagesCBX = as.w("input",this.messagesList).filter(function(){return this.type == "checkbox"});
		
		
		this.decorate();
		this.addEvents();
	},
	decorate: function() {
		this.actions && as.w("ul.marked-out-actions label",this.actions).each(function(){
			this.style.display = "none";
			as.append("<a href='#'>" + this.innerHTML.replace(/<[^>]+>/,""),this.parentNode);
		});
		this.actions && as.w(".mark-out",this.actions).each(function(){
			this.style.display = "inline";
		});
		this.actions && as.w("input.type-submit",this.actions).each(function() {this.style.display = "none";});
	},
	addEvents: function() {
		var cbx = this.messagesCBX, form = this.form;
		this.actions && as.w("li a",this.actions).click(function(e){
			e.preventDefault();
			switch(this.parentNode.className) {
				case "all":
				cbx.each(function(){
					this.checked = true;							   
				});
				break;
				
				case "new":
				cbx.each(function(){
					this.checked = as.parent(this,"li.new");
				});
				break;
				
				case "none":
				cbx.each(function(){
					this.checked = false;
				});
				break;
				
				case "remove":
				as.$$("input",this.parentNode).checked = true;
				form.submit();
				break;
				
				case "mark-as-read":
				as.$$("input",this.parentNode).checked = true;
				form.submit();
				break;
			}
		});
	}
};
function mail() {
	as.w("div.mail form.personal-mail").each(function(){
		new PersonalMail().init(this);
	});
}
/*******************************************************************************************\\ PERSONAL MAIL \\*/
/******************************************************************************************* ESTIMATE REVIEW */
function EstimateReview() {};
EstimateReview.prototype = {
	init: function(container) {
		this.container = container;
		
		this.addEvents();
	},
	addEvents: function() {
		as.e.click(this.container,function(e){
			if (e.target.tagName.toLowerCase() != "a") return;
			e.preventDefault();
			this.selected = e.target;
			MetaStorage.get("auth") ? this.vote(e.target) : showLoginPopup(as.bind(this.onLogin,this));
		},this);
	},
	onLogin: function() {
		this.vote(this.selected);
	},
	vote: function(a) {
		as.ajax(a.href,as.bind(this.onVote,this));
	},
	onVote: function(result) {
		result = eval("(" + result + ")");
		for (var i in result) {
			as.$$("span." + i + "-number",this.container).innerHTML = result[i];
		}
	}
};
function estimateReviews() {
	as.w("p.estimate-review").each(function(){
		new EstimateReview().init(this);
	});
}
/*******************************************************************************************\\ ESTIMATE REVIEW \\*/
/******************************************************************************************* CALENDARS */
function DatePicker(){}
DatePicker.prototype = {
	init: function(wrapper,sDate,fDate) {
		this.wrapper = wrapper;
		this.button = as.$$("button",this.wrapper);
		this.dateInput = as.$$("input[type='text']",this.wrapper);
		this.hiddenDateInput = as.$$("input[type='hidden']",this.wrapper);
		window.console && console.log(this.hiddenDateInput);
		if (!this.hiddenDateInput) this.hiddenDateInput = as.$$("input[type='hidden'][name='date']",this.dateInput.form);
		if (!this.hiddenDateInput) this.hiddenDateInput = as.$$("input[type='hidden'][name='datepicker']",this.dateInput.form);
		if (!this.hiddenDateInput) this.hiddenInput = as.append("<input type='hidden' name='" + this.dateInput.name + "-hidden' />");
		this.addEvents();
	},
	addEvents: function() {
		as.e.click(this.button,this.tryInitPopup,this);	
	},	
	monthList: ["январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь"],
	monthListToPrint: ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],
	tryInitPopup: function(e) {
		e.preventDefault();
		this.popup ? this.show() : this.initPopup();
	},
	show: function() {
		this.popup.show();
	},
	hide: function() {
		this.popup.hide();
	},
	initPopup: function() {
		this.calendarContent = as.create("<div class='calendar-popup-content'></div>");
		this.yearFS = as.append("<fieldset class='year'><a class='prev switch' href='#'></a><input type='text' /><a class='item' href='#'></a><a class='next switch' href='#'></a></fieldset>",this.calendarContent);
		this.monthFS = as.append("<fieldset class='month'><a class='prev switch' href='#'></a><a class='item' href='#'></a><a class='next switch' href='#'></a></fieldset>",this.calendarContent);
		this.tableFS = as.append("<fieldset class='table'></fieldset>",this.calendarContent);
		var monthSelect = as.after("select",as.$$("a",this.monthFS));
		as.foreach(this.monthList,function(month){as.append("option",monthSelect).innerHTML = month});
		
		this.todayDate = new Date();
		this.initDate = (this.hiddenDateInput && this.hiddenDateInput.value != "") ? new Date(this.hiddenDateInput.value) : this.todayDate;
		this.currentMonth = this.initDate.getMonth() + 1;
		this.currentYear = this.initDate.getFullYear();
		
		this.newEvents();
		this.renderMonth(this.initDate);
		this.popup = new Popup().init({popupType: 'calendar-popup', closeType: 'ByLink', defaultContent: this.calendarContent, relativeTo: this.button});
	},
	newEvents: function() {
		as.w("a.switch",this.calendarContent).click(this.switchPeriod,this);
		as.w(this.tableFS).click(this.pickDate,this);
		as.w("a.item",this.monthFS).click(this.advancedMonthSelectOn,this);
		as.w("select",this.monthFS).change(this.advancedMonthSelectOff,this);
		as.w("a.item",this.yearFS).click(this.advancedYearSelectOn,this);
		as.w("input",this.yearFS).keyup(this.checkAdvancedYear,this);
	},
	advancedMonthSelectOn: function(e) {
		e.preventDefault();
		as.$$("select",this.monthFS).selectedIndex = this.currentMonth-1;
		this.monthFS.className += " month-advanced";
	},
	advancedMonthSelectOff: function() {
		this.monthFS.className = this.monthFS.className.replace(/\bmonth-advanced\b/gi,"");
		this.currentMonth = as.$$("select",this.monthFS).selectedIndex+1;
		this.changePeriod();
	},
	advancedYearSelectOn: function(e) {
		e.preventDefault();
		as.$$("input",this.yearFS).value = this.currentYear;
		this.yearFS.className += " year-advanced";
		as.$$("input",this.yearFS).focus();
	},
	checkAwayClick: function(e) {
		if (!this.yearFS.className.match(/\byear-advanced\b/)) return;
		if (e.target != as.$$("input",this.yearFS)) {
			this.currentYear = Number(e.target.value);
			this.yearFS.className = this.yearFS.className.replace(/\byear-advanced\b/gi,"");
			this.changePeriod();
		}
	},
	checkAdvancedYear: function(e) {
		if (e.keyCode == 13) {
			e.preventDefault();
			this.currentYear = Number(e.target.value);
			this.yearFS.className = this.yearFS.className.replace(/\byear-advanced\b/gi,"");
			this.changePeriod();
		}
		else {
			e.target.value = e.target.value.replace(/[^0-9]/gi,"");
		}
	},
	switchPeriod: function(e) {
		e.preventDefault();
		e.target.blur();
		this["current" + (as.is(e.target.parentNode,".year") ? "Year" : "Month")] += (as.is(e.target,".next") ? 1 : -1);
		this.changePeriod();
	},
	changePeriod: function() {
		as.remove(this.table);
		if (this.currentMonth == 0) {
			this.currentMonth = 12;
			this.currentYear--;
		}
		if (this.currentMonth == 13) {
			this.currentMonth = 1;
			this.currentYear++;
		}
		this.renderMonth(new Date(this.currentYear + "/" + this.currentMonth + "/1"));
	},
	pickDate: function(e) {
		var _self_ = this;
		if (e.target.tagName.toLowerCase() != "td" || e.target.innerHTML == "") return;
		this.dateInput.value = e.target.innerHTML + " " + _self_.monthListToPrint[_self_.currentMonth-1] + " " + _self_.currentYear;
		this.dateInput.onUpdate && this.dateInput.onUpdate(new Date(_self_.currentYear + "/" + _self_.currentMonth + "/" + e.target.innerHTML));
		this.hiddenDateInput.value = _self_.currentYear + "/" + _self_.currentMonth + "/" + e.target.innerHTML;
		this.hide();
	},
	getMonthData: function(monthDate) {
		var startDate = new Date(monthDate.getFullYear()+"/"+(monthDate.getMonth()+1)+"/1");
		var currentDate = startDate;
		var daysAtMonth = 1;
		while(currentDate.getMonth() == startDate.getMonth()) {
			currentDate = new Date(startDate.getFullYear()+"/"+(startDate.getMonth()+1)+"/"+(++daysAtMonth))
		}
		return {days: --daysAtMonth, firstDay: startDate.getDay() ? startDate.getDay() : 7};
	},
	renderMonth: function(date) {
		var monthData = this.getMonthData(date);
		as.$$("a.item",this.yearFS).innerHTML = date.getFullYear();
		as.$$("a.item",this.monthFS).innerHTML = this.monthList[date.getMonth()];
		
		this.table = as.append("<table class='calendar-table'><tbody></tbody></table>",this.tableFS);
		var currentWeek, currentTableDay, currentWeekDay = 1, currentMonthDay = 1, fillStarted = false;
		for (var i=0,l=monthData.days;i<l;i++) {
			if (!currentWeek || currentWeekDay == 8) {
				currentWeek = as.append("tr",as.$$("tbody",this.table));
				currentWeekDay = 1;
			}
			currentTableDay = as.append("td",currentWeek);
			(!fillStarted && (currentWeekDay == monthData.firstDay) && (fillStarted = true));
			if (fillStarted) {
				currentTableDay.innerHTML = currentMonthDay;
				currentTableDay.className += " date";
				(currentMonthDay == this.todayDate.getDate()) && (this.currentMonth == this.todayDate.getMonth()+1) && (this.currentYear == this.todayDate.getFullYear()) && (currentTableDay.className += " current")
				currentMonthDay++
			}
			else i--;
			currentWeekDay++;
		}
		for (var i=0,l=7-currentWeek.childNodes.length;i<l;i++) {
			as.append("td",currentWeek);
		}
	}
};
function calendars(){
	as.w(".calendar-input").each(function(){new DatePicker().init(this)});
}

function DatePickerByLink() {}
DatePickerByLink.prototype = new DatePicker();
DatePickerByLink.prototype.init = function(wrapper) {
	var _self_ = this;
	this.wrapper = wrapper;
	this.dateInput = as.w("input",this.wrapper).filter(function(){return this.type == "text"}).each(function(){_self_.button = as.after("<a href='#'>"+this.value+"</a>",this); this.style.display = "none"});
	//this.hiddenDateInput = as.w("input",this.wrapper.form).filter(function(){return this.type == "hidden" && (this.name == "date" || this.name == "datepicker")});
	this.hiddenDateInput = as.$$("input[type='hidden']",this.wrapper);
	
	this.addEvents();
}
DatePickerByLink.prototype.pickDate = function(e) {
	DatePicker.prototype.pickDate.apply(this,arguments);
	this.button.innerHTML = this.dateInput.set[0].value;
}
/*******************************************************************************************\\ CALENDARS \\*/
/*******************************************************************************************\\ REGION CITY SELECT \\*/
function RegionCitySelect() {}
RegionCitySelect.prototype = {
	init: function(regionSelect) {
		this.regionSelect = regionSelect;
		this.citySelect = as.w("select",this.form).filter(function() {return this.name == "city_id"}).set[0] || null;
		this.ajaxUrl = "/communication/board/get_cities/";
		this.callback = this.regionSelect.onfocus ? this.regionSelect.onfocus().callback : null;
		
		this.addEvents();
	},
	addEvents: function() {
		as.e.change(this.regionSelect,this.onChangeRegion,this);
	},
	onChangeRegion: function() {
		as.ajax(this.ajaxUrl+this.regionSelect.options[this.regionSelect.selectedIndex].value,as.bind(this.onAjaxResponse,this));
		this.loader = as.after("<img style='margin-left: 10px;' src='/i/icon.loader.gif' class='loader' />",this.regionSelect);
		as.remove(this.citySelect);
		this.citySelect = null;
	},
	onAjaxResponse: function(response) {
		as.remove(this.loader);
		try {
			response = eval("(" + response + ")");
			if (!response.region_id || !response.cities || response.region_id != this.regionSelect.options[this.regionSelect.selectedIndex].value) return;
			if (!this.citySelect) this.citySelect = as.create("<select class='half' name='city_id'></select>");
			var currentOption;
			for (var i in response.cities) {
				currentOption = as.append("option",this.citySelect);
				currentOption.value = i;
				currentOption.innerHTML = response.cities[i];
			}
			as.after(this.citySelect,this.regionSelect);
			window.mini && window.mini.set_center();
			as.e.change(this.citySelect,function(){
				window.mini && window.mini.set_center();
			},this);
		}
		catch(e) {}
	}
};
function regionCitySelect() {
	as.w("select.region-dynamic-select").each(function(){new RegionCitySelect().init(this)});	
}
/*******************************************************************************************\\ REGION CITY SELECT \\*/
/******************************************************************************************* GLOBAL REGION SELECT */
function GlobalRegionSelector() {};
GlobalRegionSelector.prototype = {
	init: function(link) {
		if (!link.onblur) return;
		this.link = link;		
		this.popupHeader = link.onblur().title;
		this.formSubmitUrl = link.onblur().uri;
		this.hash = link.onblur().hash || "";
		this.fCitiesUrl = link.onblur().fCitiesUrl || "/ajax/fcities_regions/reference";
		this.addEvents();
	},
	addEvents: function() {
		as.e.click(this.link,this.tryInitPopup,this);
	},
	newEvents: function() {
		this.regionSelect = as.$$("select",this.regionSelectLabel);
		as.e.change(this.regionSelect,this.getRegionCities,this);
	},
	addCitySelectEvent: function() {
		var hash = this.hash;
		as.e.change(this.citySelect,function(){
			if (this.citySelect.selectedIndex == 0) return;
			location.href = this.setRegionUrl + this.regionSelect.options[this.regionSelect.selectedIndex].value + "/" + this.citySelect.options[this.citySelect.selectedIndex].value + "/" + hash;
		},this);
	},
	getRegionCities: function() {
		as.ajax(this.regionCitiesUrl+this.regionSelect.options[this.regionSelect.selectedIndex].value,as.bind(this.setRegionCities,this));
		this.loader = as.after("<img style='margin-left: 10px;' src='/i/icon.loader.gif' class='loader' />",this.regionSelect);
		as.remove(this.citySelectLabel);
	},
	setRegionCities: function(response) {
		as.remove(this.loader);
		try {
			response = eval("(" + response + ")");
			if (!response.region_id || !response.cities || response.region_id != this.regionSelect.options[this.regionSelect.selectedIndex].value) return;
			this.citySelectLabel = as.create("<label>и город:<br /></label>");
			this.citySelect = as.append("select",this.citySelectLabel);
			var currentOption;
			for (var i in response.cities) {
				currentOption = as.append("option",this.citySelect);
				currentOption.value = i;
				currentOption.innerHTML = response.cities[i];
			}
			as.after(this.citySelectLabel,this.regionSelectLabel);
			this.addCitySelectEvent();
		}
		catch(e) {}
	},
	tryInitPopup: function(e) {
		e.preventDefault();
		this.popup ? this.show() : as.ajax(this.fCitiesUrl,as.bind(this.initPopup,this));
	},
	show: function() {
		this.popup.show();
	},
	initPopup: function(data) {
		data = eval("(" + data + ")");
		this.content = as.create("<div class='city-selector-popup-content'></div>");
		as.append("<h3>" + this.popupHeader + "</h3>",this.content);
		var fCitiesList = as.append("<ul class='city-list'></ul>",this.content);
		var hash = this.hash;
		as.foreach(data.fcities,function(city){
			as.append("<li><a href='/geo/set" + city.url + "/" + hash +"'>" + city.city + "</a>",fCitiesList);
		});
		this.cityAutoCompleteForm = as.append(
			"<form method='post' action='" + this.formSubmitUrl + "'  class='city-autocomplete'>"+
				"<label>Найти город: </label><input type='text' name='city' autocomplete='off' class='city-autocomplete' /> <span class='button'><input type='submit' value='Показать' /></span>"+
			"</form>",
			this.content
		);
		new CityAutoComplete().init(as.$$("input.city-autocomplete",this.cityAutoCompleteForm));
		
		this.popup = new Popup().init({popupType: 'city-selector-popup', closeType: 'ByLink', defaultContent: this.content, relativeTo: this.link})
		
		setTimeout(as.bind(function() {as.$$("input.city-autocomplete",this.cityAutoCompleteForm).focus()}));
	}
};
function globalRegionSelect() {
	as.w("div.map-directory p.region a").each(function(){new GlobalRegionSelector().init(this)});
	as.w("div.chapter-filter p.region a").each(function(){new GlobalRegionSelector().init(this)});
	as.w("div.chapter-filter li.region a").each(function(){new GlobalRegionSelector().init(this)});
	as.w("div.city-user p.other a").each(function(){new GlobalRegionSelector().init(this)});
	as.w("div.city-selector-attention a").each(function(){new GlobalRegionSelector().init(this)});
	as.w("ul.other-users a").each(function(){new GlobalRegionSelector().init(this)});
}
/*******************************************************************************************\\ GLOBAL REGION SELECT \\*/
/******************************************************************************************* PROFILE ADDRESS SELECT */
function ProfileAddress() {};
ProfileAddress.prototype = {
	init: function(fs) {
		this.fs = fs;
		this.selects = as.w("select",this.fs);
		this.ajaxCommonUrl = "/geo/getfor/";
		this.lastChangedSelect = null;
		
		this.addEvents();
	},
	addEvents: function() {
		this.selects.change(this.onSelectChange,this);
	},
	onSelectChange: function(e) {
		this.lastChangedSelect = e.target;
		var postString = "";
		this.selects.each(function(){
			if (!this.options.length) return;
			postString += (this.name + "=" + this.options[this.selectedIndex].value + "&");
		});
		as.ajax(this.ajaxCommonUrl+e.target.name,as.bind(this.onAjaxResponse,this),"POST",postString,null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]);
		this.loader = as.after("<img class='loader' src='/i/icon.loader.gif' />",e.target);
	},
	onAjaxResponse: function(response) {
		as.remove(this.loader);
		response = eval("(" + response + ")");
		var data = response.out;
		var cOption;
		for (var i=this.selects.length()-1;i>=0;i--) {
			if (this.selects.set[i] == this.lastChangedSelect) break;
			this.selects.set[i].innerHTML = "";
			if (!data[this.selects.set[i].name]) {				
				this.selects.set[i].disabled = true;
			}
			else {
				this.selects.set[i].disabled = false;
				cOption = as.append("option",this.selects.set[i]);
				cOption.value = "0";
				cOption.innerHTML = "Не выбран";
				for (var d in data[this.selects.set[i].name]) {
					cOption = as.append("option",this.selects.set[i]);
					cOption.value = d;
					cOption.innerHTML = data[this.selects.set[i].name][d];
				}
			}
		}
	}
}
function profileAddressSelect() {
	as.w("fieldset.address-select").each(function(){new ProfileAddress().init(this)});
}
/*******************************************************************************************\\ PROFILE ADDRESS SELECT \\*/
/******************************************************************************************* CITY AUTOCOMPLETE */
function CityAutoComplete() {}
CityAutoComplete.prototype = {
	ajaxUrl: "/advices/reference/ajax/find_city/",
	init: function(input) {
		this.input = input;
		this.form = this.input.form;
		this.savedData = {};
		
		this.addEvents();
		this.createOverlay();
	},
	addEvents: function() {
		as.e.keyup(this.input,this.checkDataEntered,this);
		as.e.focus(this.input,this.checkDataEntered,this);
		as.e.submit(this.form,function(e) {
			if (this.lastSuggestHideDate && (new Date() - this.lastSuggestHideDate < 50)) {
				e.preventDefault();
				this.clearSuggest();
				e.notToDisable = true;
			}
		},this);
		as.e.click(document.body,function(e){
			var targetItem;
			if (as.parent(e.target,this.suggestList)) {
				e.preventDefault();
				if (e.target.tagName.toLowerCase() == "li") targetItem = e.target;
				else if (as.parent(e.target,"li")) targetItem = as.parent(e.target,"li");
				
				if (!targetItem) {
					targetItem = e.target.tagName.toLowerCase() == "b" ? e.target.parentNode.parentNode : (e.target.tagName.toLowerCase() == "li" ? e.target : null);
				}
				if (targetItem && targetItem.className.match(/\bindex\d+\b/)) {
					this.setActiveSuggestItem(targetItem.className.match(/\bindex\d+\b/)[0].replace("index",""),true);
				}
			}
			if (!this.suggestShown) return;
			if (e.target != this.input) this.clearSuggest();
		},this);
	},
	checkDataEntered: function(e) {
		if (e.keyCode && (e.keyCode == 37 || e.keyCode == 39)) { return }
		else if (e.keyCode && (e.keyCode == 38 || e.keyCode == 40 || e.keyCode == 13)) {
			if (!this.suggestShown) return;
			if (e.keyCode == 38) {
				if (!this.activeSuggestItem && this.activeSuggestItem !== 0) this.setActiveSuggestItem(this.suggestList.childNodes.length-1,true);
				else this.setActiveSuggestItem(this.activeSuggestItem-1);
			}
			if (e.keyCode == 40) {
				if (!this.activeSuggestItem && this.activeSuggestItem !== 0) this.setActiveSuggestItem(0,true);
				else this.setActiveSuggestItem(this.activeSuggestItem+1);
			}
		}
		else {
			this.setLastKeyUp();
		}
	},
	setLastKeyUp: function() {		
		this.input.value = this.input.value.replace(/(^\s+)|(\s+$)/gi,"");
		clearTimeout(this.typeDelay);
		if (this.input.value == "") {
			this.clearSuggest();
			return;
		}
		this.typeDelay = setTimeout(as.bind(this.checkTypeDelay,this),300);
	},
	setActiveSuggestItem: function(index,noReset) {
		index = Number(index);
		if (isNaN(index)) return;
		if (!noReset) {
			as.$("li",this.suggestList)[this.activeSuggestItem].className = as.$("li",this.suggestList)[this.activeSuggestItem].className.replace(/\bactive\b/gi,'');
		}
		if (index < 0) index = this.suggestList.childNodes.length-1;
		if (index >= this.suggestList.childNodes.length) index = 0;
		this.activeSuggestItem = index;
		as.$("li",this.suggestList)[index].className += " active";
		this.input.value = as.$("li a",this.suggestList)[index].innerHTML.replace(/<[^>]*>/gi,"");
	},
	checkTypeDelay: function() {
		this.getRemoteList();
	},
	getRemoteList: function() {
		if (this.savedData[this.input.value]) {
			this.createSuggest(this.savedData[this.input.value].name,this.savedData[this.input.value].list);
		}
		else {
			as.ajax(this.ajaxUrl,as.bind(this.handleRemoteList,this),"POST","name="+encodeURIComponent(this.input.value),null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]);
			this.showLoader();
		}
		//this.handleRemoteList({name: "м",list: [{title: "Москва",uri: '/'},{title: 'Мурманск',uri: '/'},{title: 'Мордор', uri: '/'},{title: 'Махачкала', uri: '/'}]});
	},
	handleRemoteList: function(list) {
		var mark;
		try {
			list = eval("(" + list + ")");
			this.savedData[list.name] = list;
			this.createSuggest(list.name,list.list);
		}
		catch (e) {}
	},
	capitalize: function(str) {
		return str.substring(0,1).toUpperCase() + str.substring(1);
	},
	clearSuggest: function() {
		as.remove(this.suggestList);
		this.hideOverlay();
		this.suggestShown = false;
		this.activeSuggestItem = null;
		this.lastSuggestHideDate = new Date();
	},
	createSuggest: function(mark,list) {
		this.clearSuggest();
		if (this.input.value == mark) { this.hideLoader(); }
		else { return; }
		if (!list.length) return;
		this.suggestList = as.create("<ul class='suggest-list autocomplete-list'></ul>");
		var suggestItem;
		for (var i=0,l=Math.min(list.length,10);i<l;i++) {
			as.append(this.createSuggestItem(list[i],mark,i),this.suggestList);
		}
		var inputCS = as.getElementPosition(this.input);
		as.append(this.suggestList,document.body);
		as.style(this.suggestList,{
			left: inputCS.left + "px",
			width: inputCS.width - 2 + "px",
			top: inputCS.top + inputCS.height + 1 + "px"
		});
		setTimeout(as.bind(this.showOverlay,this),30);
		this.suggestShown = true;
	},
	createOverlay: function() {
		this.iframeOverlay = as.append('<iframe scrolling="no" class="suggest-overlay" frameborder="0"></iframe>',document.body);
	},
	showOverlay: function() {		
		var cs = as.getElementPosition(this.suggestList);
		as.style(this.iframeOverlay,{
			left: cs.left + 'px',
			top: cs.top + 'px',
			width: cs.width + 'px',
			height: cs.height + 'px'
		});
	},
	hideOverlay: function() {
		as.style(this.iframeOverlay,{left: '-9999px'});
	},
	createSuggestItem: function(preItem,mark,index) {
		return "<li class='index"+index+"'><a href='#'>" + preItem.title.replace(new RegExp("("+this.capitalize(mark)+")"),"<b>$1</b>") + "</a></li>";
	},
	showLoader: function() {
		this.input.className += " loading";
	},
	hideLoader: function() {
		this.input.className = this.input.className.replace(/\bloading\b/gi,"");
	}
}
function ProfileCityAutoComplete() {}
ProfileCityAutoComplete.prototype = new CityAutoComplete();
ProfileCityAutoComplete.prototype.ajaxUrl = "/users/find_city/";
ProfileCityAutoComplete.prototype.createSuggestItem = function(preItem,mark,index) {
	return "<li class='index"+index+"'><a href='#' id='" + preItem.id + "'>" + preItem.title.replace(new RegExp("("+this.capitalize(mark)+")"),"<b>$1</b>") + (preItem.region ? ("<i> &mdash; " + preItem.region + "</i>") : "") + "</a></li>";
}
ProfileCityAutoComplete.prototype.setActiveSuggestItem = function(index) {
	CityAutoComplete.prototype.setActiveSuggestItem.apply(this,arguments);
	this.input.value = as.$("li a",this.suggestList)[index].innerHTML.replace(/<i.*/gi,"").replace(/<[^>]*>/gi,"");
	var _self_ = this;
	as.w("input",this.form).filter(function(){return this.type == "hidden" && this.name == "city_id"}).each(function(){
		this.value = as.$("li a",_self_.suggestList)[index].id;
	});
}

function cityAutoComplete() {
	as.w("input.city-autocomplete").each(function(){new CityAutoComplete().init(this)});
	as.w("div.profile-form fieldset.address-select input.text").each(function(){new ProfileCityAutoComplete().init(this)});
}
/*******************************************************************************************\\ CITY AUTOCOMPLETE \\*/
/*******************************************************************************************\\ SMILES RESIZING \\*/
function smilesResizing() {
	as.w("img").filter(function(){return this.src.match(/\bsmiles\b/)}).each(function(){
		if (this.offsetWidth == 0 || this.offsetHeight == 0) {
			setTimeout(as.bind(arguments.callee,this),10);
			return;
		}
		if (this.offsetWidth < 30 || this.offsetHeight < 30) return;
		this.defaultSize = {width: this.offsetWidth, height: this.offsetHeight};
		var container = as.after("<span class='smile-container'>&nbsp;</span>",this);
		as.append(this,container);
		/*as.style(this,{
			"width": "20px",
			"margin-right": "auto",
			"margin-bottom": "auto"
		});*/
	})/*.mouseover(function(){
		as.style(this,{
			"width": this.defaultSize.width + "px",
			"margin-right": "-30px",
			"margin-bottom": "-30px"
		});
	}).mouseout(function(){
		as.style(this,{
			"width": "20px",
			"margin-right": "auto",
			"margin-bottom": "auto"
		});
	});*/
}
/*******************************************************************************************\\ SMILES RESIZING \\*/
/******************************************************************************************* POLICY & CONDITIONS */


function policyConditions() {
	as.$$("span.rules-agreement a") && as.e.click(as.$$("span.rules-agreement a"),function(e) {
		e.preventDefault();
		var content = '<div class="policy-content"><h3>Правила для пользовательских новостей</h3><p>Участвуй в жизни портала! Делись с другими участниками самой интересной, полезной и актуальной информацией! </p><p>Получай за свою активность баллы и... Классные ПРИЗЫ!</p><br /><h4>Правила добавления новости:</h4><p>Новость должна:</p><p>- быть интересной для участников и редакции портала "ГородМам";<br />- соответствовать тематике портала;<br />- быть позитивной и познавательной для аудитории; <br />- содержать ссылку на источник информации.</p><br /><p>Новость не может содержать: </p><p>- негативную информацию, т.е информацию о трагических происшествиях и событиях;<br />- прямую и косвенную рекламу (упоминание) товаров, брендов или услуг;<br />- ссылки на другие ресурсы, (кроме источника информации);<br />- недостоверную и заведомоложную информацию;<br />- информацию, содержащие ненормативную лексику и порнографию.</p><br /><p>1. Правила оформления новости:</p><p>- Отправляйте текст на русском языке, Количеством символов не менее 1500 и не более 2500 знаков.<br />- Указывайте прямую ссылку непосредственно на новость.<br />- Ссылка должна вести на первоисточник.<br />- Не тратьте время на добавление неинтересных новостей.<br />- Уделите максимальное внимание составлению заголовка и описания к новости. Нет смысла копировать в описание всю новость, постарайтесь передать суть в 3-4 предложениях.</p><br /><p>Нельзя добавлять новости, которые:</p><p>- Направлены против участников сайта.<br />- Дублированные новости, даже если названия разные, а суть одна (пользуйтесь поиском перед добавлением!).</p><br /><p>Администрация имеет право изменять и дополнять правила.</p></div>';
		new Popup().init({popupType: 'news-policy-popup',defaultContent: content,relativeTo: this});
	});
	as.w("a.conditions-popup").click(function(e) {
		e.preventDefault();
		var content = '<div class="policy-content"><h3>Юридическое соглашение</h3><p>Важная информация! Пожалуйста, внимательно прочтите эту информацию перед тем, как воспользоваться данным сайтом. Использование вами данного сайта, а также информации доступной на этом сайте является предметом следующего договора и условий:</p><p>Право собственности: Данный сайт принадлежит, используется и поддерживается KIMBERLY-CLARK WORLDWIDE ("Kimberly-Clark") Он был создан в целях вашего образования и информирования, а также для развлечения и общения. Данный сайт и все его компоненты, без каких-либо ограничений, включая текст, изображения и аудио материалы защищены авторскими правами Kimberly-Clark.</p><p>Ограничения на использование: Данный сайт доступен для вашего личного, некоммерческого использования. Вы не можете копировать, воспроизводить, переиздавать, отправить по почте, распространять, передавать или изменять каким-либо способом все или какую-либо часть этого сайта.</p><p>Уведомление торговой марки: Все названия, эмблемы и торговые марки являются собственностью Kimberly-Clark Worldwide и вы не в праве использовать какие-либо из этих материалов в каких-либо целях без согласия Kimberly-Clark Worldwide, выраженного в письменной форме.</p><p>Добровольные идеи: Kimberly-Clark Worldwide стремиться получить ваши комментарии и ответить на ваши вопросы относительно нашей продукции и нашей компании. Однако, это не означает, что, таким образом, мы ищем новые идеи, и поэтому мы не можем принять добровольно присланные идеи, предложения или материалы относительно разработки, дизайна, производства или продажи наших товаров. Придерживаясь этой политики, мы надеемся избежать последующих недоразумений среди тех, кто предоставил свои комментарии или идеи, касающиеся изделий или концепции, разработанных служащими Kimberly-Clark Worldwide.</p><p>В случае, если вы приняты на работу компанией Kimberly-Clark Worldwide, то ни какая информация, размещенная на данном сайте не составляет и не должна рассматриваться договором найма или его частью. Кроме того, сделанные заявления не являются гарантиями или обязательствами со стороны Kimberly-Clark Worldwide, которая поддерживает отношения со своими подчиненными по своему усмотрению.</p><p>Раскрытие и использование ваших сообщений: Письма и электронная почта, доставляемая в Kimberly-Clark Worldwide не является конфиденциальной и Kimberly-Clark Worldwide не несет ответственности за любое использование или раскрытие этой информации. Все сообщения и другие материалы (включая, без каких-либо ограничений, добровольные идеи, предложения или материалы), присланные на этот сайт или в Kimberly-Clark Worldwide по электронной почте являются, и останутся, собственностью исключительно Kimberly-Clark Worldwide и могут быть использованы Kimberly-Clark Worldwide в любых целях, не зависимо от того, являются они коммерческими или нет, без какой-либо компенсации.</p><p>Если вы используете этот сайт как средство общения с Kimberly-Clark Worldwide в развитии отношений продавец-покупатель, то вы гарантируете, что предоставленная спецификация на сырье и любая другая информация, которую вы присылаете, является точной и полной и, вы должны незамедлительно извещать нас всякий раз, когда произведены поправки или любое другое изменение какой-либо информации такого рода.</p><p>Используя данный сайт, вы признаете тем самым свое согласие с вышеуказанными условиями. ЕСЛИ ВЫ НЕ СОГЛАСНЫ С ДАННЫМ ДОГОВОРОМ И ЕГО УСЛОВИЯМИ, НЕ ПОЛЬЗУЙТЕСЬ ДАННЫМ САЙТОМ.</p></div>';
		var popup = new Popup().init({popupType: 'policy-popup',defaultContent: content,relativeTo: this});
		if (parseInt(popup.popupWrapper.style.top) < 300) {
			popup.popupWrapper.style.top = "300px";
		}
	});
	if (!as.$$("div.footer p a.conditions") || !as.$$("div.footer p a.policy")) return;
	as.e.click(as.$$("div.footer p a.conditions"),function(e) {
		e.preventDefault();
		var content = '<div class="policy-content"><h3>Юридическое соглашение</h3><p>Важная информация! Пожалуйста, внимательно прочтите эту информацию перед тем, как воспользоваться данным сайтом. Использование вами данного сайта, а также информации доступной на этом сайте является предметом следующего договора и условий:</p><p>Право собственности: Данный сайт принадлежит, используется и поддерживается KIMBERLY-CLARK WORLDWIDE ("Kimberly-Clark") Он был создан в целях вашего образования и информирования, а также для развлечения и общения. Данный сайт и все его компоненты, без каких-либо ограничений, включая текст, изображения и аудио материалы защищены авторскими правами Kimberly-Clark.</p><p>Ограничения на использование: Данный сайт доступен для вашего личного, некоммерческого использования. Вы не можете копировать, воспроизводить, переиздавать, отправить по почте, распространять, передавать или изменять каким-либо способом все или какую-либо часть этого сайта.</p><p>Уведомление торговой марки: Все названия, эмблемы и торговые марки являются собственностью Kimberly-Clark Worldwide и вы не в праве использовать какие-либо из этих материалов в каких-либо целях без согласия Kimberly-Clark Worldwide, выраженного в письменной форме.</p><p>Добровольные идеи: Kimberly-Clark Worldwide стремиться получить ваши комментарии и ответить на ваши вопросы относительно нашей продукции и нашей компании. Однако, это не означает, что, таким образом, мы ищем новые идеи, и поэтому мы не можем принять добровольно присланные идеи, предложения или материалы относительно разработки, дизайна, производства или продажи наших товаров. Придерживаясь этой политики, мы надеемся избежать последующих недоразумений среди тех, кто предоставил свои комментарии или идеи, касающиеся изделий или концепции, разработанных служащими Kimberly-Clark Worldwide.</p><p>В случае, если вы приняты на работу компанией Kimberly-Clark Worldwide, то ни какая информация, размещенная на данном сайте не составляет и не должна рассматриваться договором найма или его частью. Кроме того, сделанные заявления не являются гарантиями или обязательствами со стороны Kimberly-Clark Worldwide, которая поддерживает отношения со своими подчиненными по своему усмотрению.</p><p>Раскрытие и использование ваших сообщений: Письма и электронная почта, доставляемая в Kimberly-Clark Worldwide не является конфиденциальной и Kimberly-Clark Worldwide не несет ответственности за любое использование или раскрытие этой информации. Все сообщения и другие материалы (включая, без каких-либо ограничений, добровольные идеи, предложения или материалы), присланные на этот сайт или в Kimberly-Clark Worldwide по электронной почте являются, и останутся, собственностью исключительно Kimberly-Clark Worldwide и могут быть использованы Kimberly-Clark Worldwide в любых целях, не зависимо от того, являются они коммерческими или нет, без какой-либо компенсации.</p><p>Если вы используете этот сайт как средство общения с Kimberly-Clark Worldwide в развитии отношений продавец-покупатель, то вы гарантируете, что предоставленная спецификация на сырье и любая другая информация, которую вы присылаете, является точной и полной и, вы должны незамедлительно извещать нас всякий раз, когда произведены поправки или любое другое изменение какой-либо информации такого рода.</p><p>Используя данный сайт, вы признаете тем самым свое согласие с вышеуказанными условиями. ЕСЛИ ВЫ НЕ СОГЛАСНЫ С ДАННЫМ ДОГОВОРОМ И ЕГО УСЛОВИЯМИ, НЕ ПОЛЬЗУЙТЕСЬ ДАННЫМ САЙТОМ.</p></div>';
		new Popup().init({popupType: 'policy-popup',defaultContent: content,relativeTo: this});
	});
	if (!as.$$("p.comment a.conditions")) return;
	as.e.click(as.$$("p.comment a.conditions"),function(e) {
		e.preventDefault();
		var content = '<div class="policy-content"><h3>Юридическое соглашение</h3><p>Важная информация! Пожалуйста, внимательно прочтите эту информацию перед тем, как воспользоваться данным сайтом. Использование вами данного сайта, а также информации доступной на этом сайте является предметом следующего договора и условий:</p><p>Право собственности: Данный сайт принадлежит, используется и поддерживается KIMBERLY-CLARK WORLDWIDE ("Kimberly-Clark") Он был создан в целях вашего образования и информирования, а также для развлечения и общения. Данный сайт и все его компоненты, без каких-либо ограничений, включая текст, изображения и аудио материалы защищены авторскими правами Kimberly-Clark.</p><p>Ограничения на использование: Данный сайт доступен для вашего личного, некоммерческого использования. Вы не можете копировать, воспроизводить, переиздавать, отправить по почте, распространять, передавать или изменять каким-либо способом все или какую-либо часть этого сайта.</p><p>Уведомление торговой марки: Все названия, эмблемы и торговые марки являются собственностью Kimberly-Clark Worldwide и вы не в праве использовать какие-либо из этих материалов в каких-либо целях без согласия Kimberly-Clark Worldwide, выраженного в письменной форме.</p><p>Добровольные идеи: Kimberly-Clark Worldwide стремиться получить ваши комментарии и ответить на ваши вопросы относительно нашей продукции и нашей компании. Однако, это не означает, что, таким образом, мы ищем новые идеи, и поэтому мы не можем принять добровольно присланные идеи, предложения или материалы относительно разработки, дизайна, производства или продажи наших товаров. Придерживаясь этой политики, мы надеемся избежать последующих недоразумений среди тех, кто предоставил свои комментарии или идеи, касающиеся изделий или концепции, разработанных служащими Kimberly-Clark Worldwide.</p><p>В случае, если вы приняты на работу компанией Kimberly-Clark Worldwide, то ни какая информация, размещенная на данном сайте не составляет и не должна рассматриваться договором найма или его частью. Кроме того, сделанные заявления не являются гарантиями или обязательствами со стороны Kimberly-Clark Worldwide, которая поддерживает отношения со своими подчиненными по своему усмотрению.</p><p>Раскрытие и использование ваших сообщений: Письма и электронная почта, доставляемая в Kimberly-Clark Worldwide не является конфиденциальной и Kimberly-Clark Worldwide не несет ответственности за любое использование или раскрытие этой информации. Все сообщения и другие материалы (включая, без каких-либо ограничений, добровольные идеи, предложения или материалы), присланные на этот сайт или в Kimberly-Clark Worldwide по электронной почте являются, и останутся, собственностью исключительно Kimberly-Clark Worldwide и могут быть использованы Kimberly-Clark Worldwide в любых целях, не зависимо от того, являются они коммерческими или нет, без какой-либо компенсации.</p><p>Если вы используете этот сайт как средство общения с Kimberly-Clark Worldwide в развитии отношений продавец-покупатель, то вы гарантируете, что предоставленная спецификация на сырье и любая другая информация, которую вы присылаете, является точной и полной и, вы должны незамедлительно извещать нас всякий раз, когда произведены поправки или любое другое изменение какой-либо информации такого рода.</p><p>Используя данный сайт, вы признаете тем самым свое согласие с вышеуказанными условиями. ЕСЛИ ВЫ НЕ СОГЛАСНЫ С ДАННЫМ ДОГОВОРОМ И ЕГО УСЛОВИЯМИ, НЕ ПОЛЬЗУЙТЕСЬ ДАННЫМ САЙТОМ.</p></div>';
		new Popup().init({popupType: 'policy-popup',defaultContent: content,relativeTo: this});
	});
	as.e.click(as.$$("div.footer p a.policy"),function(e) {
		e.preventDefault();
		var content = '<div class="policy-content"><h3>Политика конфиденциальности</h3><p>Иногда, наш сайт содержит информацию о тотализаторах или других акциях продвижения товара, которые мы проводим, и в некоторых случаях, для участия в них вам необходимо прислать нам информацию о себе в электронном виде. В подобных случаях мы будим использовать информацию, присланную вами в целях проведения акции (а именно, для связи с вами, если вы победите).</p><p>ОТКАЗ ОТ ГАРАНТИЙ: KIMBERLY-CLARK НЕ ДЕЛАЕТ НИКАКИХ ЗАЯВЛЕНИЙ И НЕ ДАЕТ НИКАКИХ ГАРАНТИЙ ОТНОСИТЕЛЬНО ТОЧНОСТИ, НАДЕЖНОСТИ ИЛИ ПОЛНОТЫ СОДЕРЖАНИЯ (ТЕКСТА:\ изображения) ДАННОГО САЙТА. В СТЕПЕНИ, НЕ ЗАПРЕЩЕННОЙ ЗАКОНОМ, KIMBERLY-CLARK ОТКАЗЫВАЕТСЯ ОТ ВСЕХ ГАРАНТИЙ, ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧЕВАЯ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ СООТВЕТСТВИЯ ТОВАРА ИНДИВИДУАЛЬНОЙ ЦЕЛИ. КРОМЕ ТОГО, KIMBERLY-CLARK НЕ ГАРАНТИРУЕТ, ЧТО ДАННЫЙ САЙТ ИЛИ СЕРВЕР, НА КОТОРОМ РАЗМЕЩЕН ДАННЫЙ САЙТ, НЕ СОДЕРЖИТ КОМПЬЮТЕРНЫХ "ВИРУСОВ."</p><p>Ограничение ответственности: Kimberly-Clark Worldwide не будет нести ответственность за какие-либо убытки, включая без каких-либо ограничений прямые или косвенные, возникшие в результате вашего доступа, или невозможности доступа, на этот сайт или ваше использование сайта, или уверенности, в этом сайте или его содержании. Кроме этого, Kimberly-Clark Worldwide не обязана обновлять данный сайт или его содержание, и Kimberly-Clark Worldwide не будет нести ответственность за невозможность какого-либо рода в обновлении подобной информации. Кроме этого, Kimberly-Clark Worldwide не берет на себя ни обязательств, ни ответственности за пользование вами другими Web сайтами, доступ на которые вы можете получить через определенные ссылки внутри этого сайта. Эти ссылки и другие <источники>, упомянутые на данном сайте, обеспечивают только доступ пользователям World Wide Web и размещение их на нашем сайте не означает поддержку или присоединение к Kimberly-Clark Worldwide.</p><p>Иное: Kimberly-Clark Worldwide по своему собственному усмотрению, оставляет за собой право (1) изменить данное Юридическое обращение, (2) отслеживать и удалять сообщения, и (3) приостановить доступность сайта в любое время без уведомления. Если какое-нибудь требование или условие данного Юридического обращения, по каким-либо причинам окажутся не законными, необоснованными, недействительными или по каким-либо причинам невыполнимыми, то законность и выполнимость оставшихся требований и условий договора, в связи с этим, не в коем случае не будет затронута или ухудшена. Данное Юридическое обращение является полным соглашением между вами и Kimberly-Clark Worldwide относительно данного предмета.</p><p>Данный Web сайт принадлежит и управляется Kimberly-Clark Worldwide. Мы, в Kimberly-Clark Worldwide, осознаем, что многие посетители нашего сайта обеспокоены по поводу предоставляемой информации и того как мы используем эту информацию. Наша Политика Конфиденциальности адресована беспокойствам подобного рода. Мы можем обновлять Политику время от времени, поэтому иногда проверяйте ее содержание.</p><p>На своем сайте, мы не собираем от вас информацию личного характера, если только вы не присылаете ее нам добровольно и осознано. Вы можете посетить наш сайт не сообщая нам кто вы и не раскрывая информацию лично о себе. Однако, если вы определенно соглашаетесь прислать информацию личного характера, на пример, по запросу быть помещенным в список адресов для почтовой рассылки, мы можем связываться с вами время от времени.</p><p>На нашем сайте есть несколько разделов для использования, которых вам необходимо подписаться на них. И если вы подпишитесь, мы используем эту информацию для того, чтобы прислать вам продукцию, информацию о продукции или оказать услуги которые вы запросили. Однако из-за объема получаемых запросов, нам возможно придется сообщить ваше имя, электронную почту и почтовый адрес организации исполнителю или дистрибьютору наших товаров являющимся нашим партнером. От нашего имени, наши партнеры обеспечат вас информацией или продукцией, в отношении которых вы выразили интерес.</p><h4>Дети</h4><p>Если вам двенадцать лет или вы младше этого возраста, то перед тем как отправить нам свое имя, почтовый или электронный адрес, спросите одобрение у своих родителей.</p><h4>Cookies</h4><p>Как и многие компании, мы используем технологию "Cookie" на нашем Web сайте. "Cookies" сохраняются на вашем компьютере вашим браузером. Когда вы загружаетесь, "Cookie" сообщает нам о ваших посещениях нашего сайта ранее или являетесь ли вы новым посетителем. "Cookie" не получает ни какой личной информации о вас и не обеспечивает нас каким-либо способом связи с вами и "Cookie" не извлекает никакой информации с вашего компьютера. Мы используем "Cookie", чтобы с их помощью определить те разделы сайта, к которым вы проявляете повышенный, с тем чтобы мы могли предложить больше той информации, которая вам возможно понадобиться.</p><h4>Наши контакты</h4><p>Если у вас есть какие-либо вопросы относительно Политики Конфиденциальности, вы можете связаться с нами следующим образом:</p><p>Для почтовых сообщений, пишите нам на следующий адрес:</p><p>Kimberly-Clark Corporation Ltd. CRS<br />Freepost SEA 7216<br />West Malling, ME19 4BR</p></div>';
		new Popup().init({popupType: 'policy-popup',defaultContent: content,relativeTo: this});
	});
}
/*******************************************************************************************\\ POLICY & CONDITIONS \\*/
function initWindowPopups() {
	as.w("a").filter(function(){
		return this.className.match(/\bpopup-\d+-\d+\b/);											 
	}).click(function(e){
		e.preventDefault();
		window.open(this.href,"wp","width=" + this.className.match(/-\d+-/)[0].replace(/-/gi,"") + ",height=" + this.className.match(/-\d+$/)[0].replace(/-/gi,""));
	});
}

function Myth() {}
Myth.prototype = {
	init: function(container) {
		this.container = container;
		this.myth = as.$$("div.myth",this.container);
		this.form = as.$$("form",this.container);
		this.mythAW = as.$$("div.answer-wrapper",this.container);
		this.mythA = as.$$("div.answer",this.container);
		this.actions = as.$$("div.actions",this.container);
		this.newAjaxUrl = "/myths/new/";
		this.addAjaxUrl = "/myths/add/";
		this.statAjaxUrl = "/myths/";
		this.id = this.myth.id;
		this.reply = as.$$("p.reply",this.container);
		this.maxHeight = 250;
		
		this.initAddVars();
		this.decorate();
		this.addEvents();
	},
	initAddVars: function() {
		
	},
	decorate: function() {
		this.mythAW.style.height = 0;
		this.form.style.display = "none";
		this.actions.style.display = "none";
	},
	addEvents: function() {
		as.w("a",this.reply).click(this.showAnswer,this);
		as.w("a.new",this.container).click(this.showForm,this);
		as.w("a.more",this.container).click(this.getOtherMyth,this);
		as.w("a.back",this.form).click(this.hideForm,this);
		as.e.submit(this.form,this.sendMyth,this);
	},
	showAnswer: function(e) {
		e.preventDefault();
		var target = (e.target.tagName.toLowerCase() == "a") ? e.target : as.parent(e.target,"a");
		var result = target.className.match(/\byes\b/) ? "yes" : "no";
		as.ajax(this.statAjaxUrl+this.id + "/" + result);
		this.reply.style.display = "none";
		height = Math.min(this.mythA.offsetHeight,this.maxHeight);
		var step = height/20;
		for (var i=1;i<=20;i++) {
			as.bind(function(i) {
				setTimeout(as.bind(function() {
					this.mythAW.style.height = step * i + "px";
					if (i == 20) {
						this.actions.style.display = "block";
					}
				},this),i*10);
			},this)(i);
		}
	},
	hide: function(element,callback) {
		var height = element.offsetHeight;
		var step = height/20;
		for (var i=1;i<=20;i++) {
			as.bind(function(i) {
				setTimeout(as.bind(function() {
					element.style.height = step * (20-i) + "px";
					if (i==20) {
						callback && callback();
						element.style.display = "none";
						element.style.height = "auto";
					}
				},this),i*10);
			},this)(i);
		}
	},
	show: function(element,callback) {
		as.style(element,{position: "absolute", "left": "-9999px", "top": "-9999px"});
		as.style(element,{"display": "block"});
		var height = element.offsetHeight;		
		as.style(element,{"height": "0px"});
		as.style(element,{position: "relative", "left": "auto", "top": "auto"});
		var step = height/20;
		for (var i=1;i<=20;i++) {
			as.bind(function(i) {
				setTimeout(as.bind(function() {
					element.style.height = step * i + "px";
					if (i==20) {
						callback && callback();
						element.style.display = "block";
						element.style.height = "auto";
					}
				},this),i*10);
			},this)(i);
		}
	},
	showForm: function(e) {
		e.preventDefault();
		this.hide(this.myth,as.bind(function(){this.show(this.form)},this));
	},
	hideForm: function(e) {
		e.preventDefault();
		this.hide(this.form,as.bind(function(){this.show(this.myth)},this));
	},
	getOtherMyth: function(e) {
		e.preventDefault();
		as.ajax(this.newAjaxUrl,as.bind(this.setOtherMyth,this));
	},
	setOtherMyth: function(response) {
		try {
			response = eval("(" + response + ")");			
			this.hide(this.myth,as.bind(function(){
				this.reply.style.display = "block";
				this.actions.style.display = "none";
				//this.mythA.innerHTML = "<h3>Это " + (response.type ? "" : "не ") + "миф</h3>" + response.explanation;
				this.mythAW.style.height = "0px";
				as.$$("p.myth-text").innerHTML = response.text;
				this.id = response.id;
				this.show(this.myth);
			},this));
		}
		catch(e) {}
	},
	sendMyth: function(e) {
		e.preventDefault();
		as.remove(this.warning);
		var mythStr = "";
		var error = false;
		as.w("input",this.form).each(function(){
			if (this.checked) mythStr += (this.name + "=true");
			mythStr += "&";
		});
		as.w("textarea",this.form).each(function(){
			mythStr += (this.name + "=" + this.value); 
			mythStr += "&";
			if (this.value == "") error = true;
		});
		if (error) {
			this.warning = as.prepend("<p>Пожалуйста, заполни все поля</p>",this.form);
		}
		else {
			as.ajax(this.addAjaxUrl,as.bind(this.onSendMyth,this),"POST",mythStr,null,[{name:"Content-Type",value:"application/x-www-form-urlencoded; charset=UTF-8"}]);
		}
	},
	onSendMyth: function() {
		this.warning = as.prepend("<p>Твой миф сохранен и будет опубликован после проверки</p>",this.form);
		as.w("input",this.form).each(function(){
			if (this.type != "radio" && !as.is(this.parentNode,"span.button")) this.value = "";
		});
		as.w("textarea",this.form).each(function(){
			this.value = "";
		});
	}
}
function myths() {
	as.w("div.meta-column div.myths").each(function(){new Myth().init(this)});
	as.w("div.aside-column div.myths").each(function(){new Myth().init(this)});
}
/******************************************************************************************* FORM VALIDATOR */
function FormValidator() {}
FormValidator.prototype = {
	validateFNs: {
		'not-empty': function(field) {
			return field.value != "";
		},
		"e-mail": function(field) {
			return field.value.match(/\b[-0-9a-zA-Z_.+]*?\@[-0-9a-zA-Z_]*?\.[-0-9a-zA-Z_]{2,4}\b/);
		},
		"chosen": function(sField) {
			return sField.selectedIndex != 0;
		}
	},
	init: function(form) {
		this.form = form;
		
		this.fieldsToValidate = this.getFieldsToValidate();
		this.addEvents();
	},
	addEvents: function() {
		as.e.submit(this.form,this.validate,this);
	},
	getFieldsToValidate: function() {
		var fieldsToValidate = [];
		as.w("input",this.form).each(function(){this.onfocus && this.onfocus().validate && (this.validateOptions = this.onfocus()) && fieldsToValidate.push(this)});
		as.w("select",this.form).each(function(){this.onfocus && this.onfocus().validate && (this.validateOptions = this.onfocus()) && fieldsToValidate.push(this)});
		as.w("textarea",this.form).each(function(){this.onfocus && this.onfocus().validate && (this.validateOptions = this.onfocus()) && fieldsToValidate.push(this)});
		return as.w(fieldsToValidate);
	},
	validate: function(e) {
		var valid = true, _self_ = this;
		this.hideWarning();
		this.fieldsToValidate.each(function() {
			_self_.unHighlightField(this);
			if (!_self_.validateFNs[this.validateOptions.type](this)) {
				valid = false;
				_self_.highlightField(this);
			}
			else {
				_self_.unHighlightField(this);
			}
		});
		if (!valid) {
			e.preventDefault();
			this.showWarning();
		}
		else {
			this.hideWarning();
		}
	},
	highlightField: function(field) {
		var lighter = as.after("<span class='invalid-field'></span>",field);
		lighter.style.width = field.offsetWidth + "px";
		as.append(field,lighter);
	},
	unHighlightField: function(field) {
		var parent = as.parent(field,"span.invalid-field");
		if (!parent) return;
		as.after(field,parent);
		as.remove(parent);		
	},
	showWarning: function() {
		this.warning = as.append("<span class='warning'>Необходимо заполнить отмеченные поля</span>",this.form);		
	},
	hideWarning: function() {
		as.remove(this.warning);
	}
}

function formValidates() {
	as.w("form.to-validate").each(function() {new FormValidator().init(this)});
}
/*******************************************************************************************\\ FORM VALIDATOR \\*/
function initEditor() {}
/******************************************************************************************* DROP DOWN MENU */
function DropDown() {}
DropDown.prototype = {
	init: function(listItem) {
		this.listItem = listItem;
		this.menu = this.listItem.parentNode;
		this.ddContent = as.$$("div.drop-down-content",this.listItem);
		this.header = as.$$("h2 img",this.listItem);
		this.addEvents();
	},
	addEvents: function() {
		as.e.mouseover(this.listItem,this.tryShowDD,this);
		as.e.mouseout(this.listItem,this.tryHideDD,this);
	},
	tryShowDD: function() {		
		clearTimeout(this.hideTimeout);
		this.showTimeout = setTimeout(as.bind(function(){
			this.dropDown ? this.showDD() : this.createDD();										   
		},this), 120);		
	},
	createDD: function() {
		var dropDown = as.create("<div class='drop-down-wrapper'><div class='drop-down-bottom png'></div></div>");
		as.prepend(this.ddContent,dropDown);
		this.dropDown = dropDown;
		as.e.mouseout(this.dropDown,this.tryHideDD,this);
		this.dropDown.style.display = "none";
		as.append(this.dropDown,document.body);
		this.ddContent.className += " png";
		this.showDD();
	},
	showDD: function() {
		if (this.ddShown) return;
		this.header.src = this.header.src.replace(/\b\.gif\b/,"-active.gif");
		var menuCS = as.getElementPosition(this.menu);
		as.style(this.dropDown,{
			left: menuCS.left -25 + "px",
			top: menuCS.top + menuCS.height - 5 + "px",
			display: "block"
		});
		this.ddShown = true;
		this.listItem.className += " dd";
	},
	tryHideDD: function(e) {
		clearTimeout(this.showTimeout);
		if (!this.ddShown) return;
		var x = e.clientX + document.documentElement.scrollLeft;
		var y = e.clientY + document.documentElement.scrollTop;
		var iCS = as.getElementPosition(this.listItem);
		var ddCS = as.getElementPosition(this.dropDown);
		if (
			(x > iCS.left && x < iCS.left + iCS.width && y > iCS.top && y < iCS.top + iCS.height) ||
			(x > ddCS.left && x < ddCS.left + ddCS.width && y > ddCS.top && y < ddCS.top + ddCS.height)
		) return;
		this.hideTimeout = setTimeout(as.bind(this.hideDD,this),151);
	},
	hideDD: function() {
		this.header.src = this.header.src.replace(/\b-active\b/gi,"");
		this.listItem.className = this.listItem.className.replace(/\bdd\b/gi,"");
		this.dropDown.style.display = "none";
		this.ddShown = false;
	}
}
function dropDownMenu() {
	as.w("ul.menu1 li").filter(function(){return this.parentNode.className.match(/\bmenu1\b/)}).each(function(){new DropDown().init(this)});
	as.foreach(['/i/menu/menu-h2-club-active.gif','/i/menu/menu-h2-advices-active.gif','/i/menu/menu-h2-fun-active.gif','/i/menu/menu-h2-news-active.gif','/i/menu/menu-h2-communications-active.gif','/i/menu/drop-down-top-bg.png','/i/menu/drop-down-bottom-bg.png'],function(img) {
		new Image().src = img;																																																																		 	});
}
/*******************************************************************************************\\ DROP DOWN MENU \\*/
/******************************************************************************************* CHAPTER CONTENTS SORT */
function Sortable() {}
Sortable.prototype = {
	init: function(table) {
		this.table = table;
		this.tbody = as.$$('tbody',this.table);
		this.getColsToSort();
		this.fillCols();
		this.defaultSort();
		this.removeExtraCells();
	},
	getColsToSort: function() {
		var cols = {};
		var _self_ = this;
		as.w("th",this.table).each(function() {
			var by = this.className.match(/\bby-\w+\b/);
			var mode;
			if (by != null) {
				mode = this.onclick().mode;
				cols[by[0]] = {mode: mode, list: []};
				as.e.click(as.$$("a",this),function(e) {
					e.preventDefault();
					_self_.activeSorted && (_self_.activeSorted.className = _self_.activeSorted.className.replace(/\bactive\b/gi,""));
					_self_.activeSorted = this;
					this.className += " active";
					_self_.sortTable(by[0]);
				});
			}
		});
		this.cols = cols;
	},
	modeFunctions: {
		'alpha': function(a,b) {
			try {
				a = a.innerHTML.replace(/<\\?[^>]+>/gi,"");
				b = b.innerHTML.replace(/<\\?[^>]+>/gi,"");
				if (a < b) {return -1}
				if (a > b) {return 1}
				return 0;
			}
			catch(e) {
				return 0;
			}
		},
		'numeric': function(a,b) {			
			a = parseFloat(a.innerHTML.replace(/<\\?[^>]+>/gi,""));
			b = parseFloat(b.innerHTML.replace(/<\\?[^>]+>/gi,""));
			if (isNaN(a) || isNaN(b)) return 0;
			if (a > b) {return -1}
			if (a < b) {return 1}
			return 0;
		},
		'date': function(a,b) {
			try {
				a = new Date(a.onclick().date);
				b = new Date(b.onclick().date);
				if (a > b) {return -1}
				if (a < b) {return 1}
				return 0;
			}
			catch(e) {
				return 0;
			}
		}
	},
	fillCols: function() {
		var cells;
		for (var i in this.cols) {
			cells = as.$("td."+i,this.table);
			cells.sort(this.modeFunctions[this.cols[i].mode]);
			for (var c=0,l=cells.length;c<l;c++) {
				this.cols[i].list.push(as.parent(cells[c],"tr"));
			}
		}
	},
	sortTable: function(by) {
		if (this.tableSortedBy == by) {return}
		for (var i=0,l=this.cols[by].list.length;i<l;i++) {
			this.tbody.appendChild(this.cols[by].list[i]);
		}
		this.tableSortedBy = by;
	},
	defaultSort: function() {
		var _self_ = this;
		as.w("th a",this.table).each(function() {
			if (!this.className.match(/\bactive\b/)) return;
			var by = this.parentNode.className.match(/\bby-\w+\b/);
			if (by != null) {
				_self_.activeSorted = this;
				_self_.sortTable(by[0]);
			}
		});
	},
	removeExtraCells: function() {
		if (this.table.className.match(/\bno_new_comments\b/)) {
			as.w('td.new',this.table).each(function() {as.remove(this)});
		}
	}
}

function chapterContentsSort() {
	as.w("table.sortable").each(function() {new Sortable().init(this)});
}
/*******************************************************************************************\\ CHAPTER CONTENTS SORT \\*/
function appendCounters() {
	as.append('<iframe allowtransparency="1" scrolling="no" frameborder="0" id="counters" name="counters" src="/counters.html" class="counters"></iframe>',as.$$("div.footer-wrapper div.footer"));
}

/******************************************************************************************* PHOTOS MOVING */
function PhotoMove() {}
PhotoMove.prototype = {
	ajaxUrl: '/user/gallerylist/all',
	action: '/user/movephoto/',
	init: function(link) {
		this.link = link;
		this.popup = null;
		this.photoId = this.link.href.match(/photo\/\d+/)[0].replace("photo/","");
		this.galleryId = this.link.href.match(/gallery\/\d+/)[0].replace("gallery/","");
		
		as.e.click(this.link,this.tryShowPopup,this);
	},
	tryShowPopup: function(e) {
		e.preventDefault();
		this.popup ? this.showPopup() : this.getGalleriesList();
	},
	getGalleriesList: function() {
		as.ajax(this.ajaxUrl,as.bind(this.onAjaxResponse,this));
	},
	onAjaxResponse: function(list) {
		list = eval("("+list+")");
		var selectContent = "";
		for (var i=0,l=list.length;i<l;i++) {
			selectContent += ("<option value='" + list[i].id + "'>" + list[i].name + "</option>")
		}
		var content = as.create(
			"<div class='photo-move-popup-content'>" +
				"<p>Переместить фотографию в альбом:</p>" +
				"<form method='POST' action='"+this.action + this.photoId + "/" + this.galleryId +"'>" +
					"<select name='togallery'>" + selectContent + "</select>" +
					"<span class='button'><input type='submit' value='Переместить' /></span>" +
				"</form>" +
			"</div>"
		);
		this.popup = new Popup().init({
			popupType: 'photo-move-popup', 
			closeType: 'ByLink',
			defaultContent: content,
			relativeTo: this.link
		});
	}
}
function movePhotos() {
	as.w('p.move a').each(function() { new PhotoMove().init(this); });
}
/*******************************************************************************************\\ PHOTOS MOVING \\*/
/******************************************************************************************* DISABLE FORMS AFTER SUBMIT */
function disableFormsAfterSubmit() {
	function disable(e) {
		if (e.notToDisable) return;
		var submitter = as.$$("input[type='submit']",this);
		if (submitter) {
			var parentButton = as.parent(submitter,"span.button");
			if (parentButton) {
				parentButton.className += " button-inactive";
			}
			submitter.disabled = true;
		}
	}
	as.w("div.add-item form").submit(disable);
	as.w("div.problem-form form").submit(disable);
	as.w("div.new-review form").submit(disable);
	as.w("div.mail form").submit(disable);
	as.w("div.write form").submit(disable);
	as.w("form.feedback-form").submit(disable);
	as.w("form.entrance-form").submit(disable);
	as.w("form.line-answer").submit(disable);
}
/*******************************************************************************************\\ DISABLE FORMS AFTER SUBMIT \\*/
/******************************************************************************************* SNOW FLAKES */
function SnowFlake() {}
SnowFlake.prototype = {
	init: function(flaker) {
		this.flake = as.append("<img src='/i/snowflake.png' class='snowflake' />",flaker.flakeContainer);
		this.frames = 200 + Math.round(25*Math.random());
		this.sinQ = 30 + Math.round(100*Math.random());
		this.sinStepQ = 0.08 + 0.04*Math.random();
		this.yQ = 2 + Math.round(3*Math.random());
		this.cArray = [];
		this.positionFlake();
		this.createCArray();
		
		return this;
	},
	positionFlake: function() {
		var x = document.documentElement.scrollLeft + Math.round(document.documentElement.clientWidth*Math.random());
		var y = document.documentElement.scrollTop + Math.round(document.documentElement.clientHeight*Math.random());
		
		as.style(this.flake, {top: y + "px", left: x + "px"});
	},
	createCArray: function() {
		this.currentX = parseInt(this.flake.style.left);
		this.currentY = parseInt(this.flake.style.top);
		this.cArray = [];
		
		for (var i=0;i<this.frames;i++) {
			this.cArray.push( {y: this.yQ*i, x: Math.round(this.sinQ*Math.sin(this.sinStepQ*i))} );
		}
	},
	move: function() {
		var top = this.currentY + this.cArray[0].y;
		var left = this.currentX + this.cArray[0].x;
		
		if (top + 21 > document.documentElement.scrollTop + document.documentElement.clientHeight) {
			this.currentY = -this.cArray[0].y;
			this.currentX = document.documentElement.scrollLeft + Math.round(document.documentElement.clientWidth*Math.random());
			top = this.currentY + this.cArray[0].y;
		}
		if (left + 24 > document.documentElement.scrollLeft + document.documentElement.clientWidth) {
			this.currentX = -this.cArray[0].x;
			left = this.currentX + this.cArray[0].x;
		}
		
		this.flake.style.top = top + "px";
		this.flake.style.left = left + "px";
		
		this.cArray.shift();
		
		if (!this.cArray.length) {
			this.createCArray();
		}
	}
}
function Snow() {}
Snow.prototype = {
	q: 30,
	flakes: [],
	aInterval: null,
	delay: 120,
	init: function() {
		this.flakeContainer = as.$$("div.min-width");
		this.makeFlakes();
		this.startAnimation();
	},
	makeFlakes: function() {
		if (location.search.match(/flakes=\d+/)) {
			this.q = Number(location.search.match(/flakes=\d+/)[0].replace("flakes=",""));
		}
		for (var i=0;i<this.q;i++) {
			this.flakes.push(new SnowFlake().init(this));
		}
	},
	startAnimation: function() {
		this.aInterval = setInterval(as.bind(this.animate,this),this.delay);
	},
	pauseAnimation: function() {
		clearInterval(this.aInterval);
	},
	animate: function() {
		for (var i=0;i<this.q;i++) {
			this.flakes[i].move();
		}
	}
}
function enableBarCodeText(){
	var shc=document.getElementById("barcode-text");
	if(shc!=undefined)
		shc.disabled=false;
}
function snowFlakes() {
	//if (location.search.match("snow=true")) {
		new Snow().init();
	//}
}
/******************************************************************************************* RINGTONES */
function ASCustomSelect() {}
ASCustomSelect.prototype = {
	maxHeight: 300,
	init: function(real,callback) {
		this.realSelect = real;
		this.callback = callback;
		this.decorate();
	},
	decorate: function() {
		switch (this.realSelect.multiple) {
			case true:
			this.decorateMultiple();
			break;
			
			case false:
			this.decorateDropdown();
			break;
		}
	},
	decorateMultiple: function() {
		this.replacer = as.after("<div class='as-cf-select'><ul></ul></div>",this.realSelect);
		var cs = as.getElementPosition(this.realSelect);
		this.fillReplacer();
		as.style(this.replacer,{width: cs.width + "px", height: cs.height + "px"});
		if (this.list.offsetHeight > cs.height) {
			new CustomScroll().init(this.replacer);
		}
		this.addMultipleEL();
	},
	fillReplacer: function() {
		this.list = as.$$("ul",this.replacer);
		for (var i=0;i<this.realSelect.length;i++) {
			as.append("<li"+(this.realSelect.options[i].selected ? " class='active'" : "")+"><a href='#'>"+this.realSelect.options[i].innerHTML+"</a></li>",this.list);
		}
		this.realSelect.className += " as-hidden";
	},
	selectMultipleItem: function(e,i) {
		e.preventDefault();
		if (!e.ctrlKey) {
			as.w("option",this.realSelect).each(function() {
				this.selected = false;
			});
			as.w("li",this.replacer).each(function() {
				this.className = this.className.replace(/\bactive\b/gi,"");
			});
		}
		this.realSelect.options[i].selected = !this.realSelect.options[i].selected;
		if (this.realSelect.options[i].selected) {
			e.target.parentNode.className += " active";
		}
		else {
			e.target.parentNode.className = e.target.parentNode.className.replace(/\bactive\b/gi,"");
		}
	},
	decorateDropdown: function() {
		this.replacer = as.append("<div class='as-cf-select as-cf-select-dropdown'><ul></ul></div>",document.body);
		var cs = as.getElementPosition(this.realSelect);
		var value;
		this.fillReplacer();
		this.inputReplacer = as.after("<div class='as-cf-select-input'><input readonly='readonly' type='text' /><a href='#'></a></div>",this.realSelect);
		this.input = as.$$("input",this.inputReplacer);
		as.style(this.inputReplacer,{width: (cs.width ? (cs.width + "px") : "auto")});
		as.style(this.input, {width: cs.width - 20 + "px"});
		cs = as.getElementPosition(this.inputReplacer);
		as.style(this.replacer,{width: (cs.width ? (cs.width + "px") : "auto"), left: cs.left + "px", top: cs.top + cs.height + "px"});
		if (this.list.offsetHeight > this.maxHeight) {
			this.replacer.style.height = this.maxHeight + "px";
			new CustomScroll().init(this.replacer);
		}
		this.addDropdownEL();
		this.setActiveItem(this.realSelect.selectedIndex);
	},
	addMultipleEL: function() {
		as.w("a",this.replacer).click(this.selectMultipleItem,this);
	},
	addDropdownEL: function() {
		as.e.click(this.input,this.dropDown,this);
		as.e.click(as.$$("a",this.inputReplacer),this.dropDown,this);
		as.w("a",this.replacer).click(this.selectDropDownItem,this);
		as.e.click(document.body,this.checkClickTarget,this);
	},
	dropDown: function(e) {
		e.preventDefault();
		this.replacer.style.display = "block";
		var cs = as.getElementPosition(this.inputReplacer);
		as.style(this.replacer,{width: cs.width - 20 + "px", left: cs.left + 10 + "px", top: cs.top + cs.height - 2 + "px"});
	},
	selectDropDownItem: function(e,i) {
		e.preventDefault();
		this.setActiveItem(i);
	},
	checkClickTarget: function(e) {
		if (e.target != this.input && e.target != as.$$("a",this.inputReplacer) && !as.parent(e.target,this.replacer)) {
			this.replacer.style.display = "none";
		}
	},
	setActiveItem: function(index) {
		this.realSelect.selectedIndex = index;
		this.input.value = this.realSelect.options[index].innerHTML;
		this.replacer.style.display = "none";
		as.w("li",this.replacer).each(function(i) {
			this.className = this.className.replace(/\bactive\b/,"");
			if (i == index) {
				this.className += " active";
			}
		});
		
		if (this.realSelect.onchange) {
			this.realSelect.onchange.call(this.realSelect);
		}
		
		this.callback && this.callback();
	}
}




var RingtonePopup = {
	ringtoneExample: '/public/mp3/ringtone-example.mp3',
	listenUrl: '/public/mp3/mp3/',
	downloadUrl: '/public/mp3/mp3dl.php?file=',
	songPrefix: '/public/mp3/substrate/',
	init: function() {
		this.overlay = as.append("<div class='op-overlay'></div>",document.body);
		this.popup = as.append(
			'<div class="ringtone-popup">' +
				'<div class="ringtone-popup-wrapper png">' +
					'<div class="upload">' +
						'<h1><img src="/i/h1-upload-ringtone.gif" /></h1>' +
						'<form action="/public/mp3/mp3.php" method="post" enctype="multipart/form-data">' +
							'<select name="song">' +
								'<option value="aaa.mp3">Танец маленьких утят</option>' + 
								'<option value="bbb.mp3">Весенняя трель</option>' + 
								'<option value="ccc.mp3">Музыкальный трек 1</option>' + 
							'</select>' +
							'<span class="play"></span>' +
							'<div class="fake-upload">' +
								'<div class="fake-upload-wrapper png">' +
									'<input name="mp3" type="file" />' +
								'</div>' +
							'</div>' +
							'<input type="hidden" name="callback" />' +
							'<a class="help png" href="#"></a>' +
						'</form>' +
					'</div>' +	
					'<div class="help" style="display: none;">' +
						'<div class="help-wrapper png">' +
							'<div class="help-container">' +
								'<h1>Какой продолжительности должна быть аудиозапись?</h1>' +
								'<p>Сделай запись смеха своего малыша длительностью не более 10 секунд. Загрузи его через наш сервис и получи рингтон на свой мобильный!</p>' +								
								'<h1>Я случайно нажала крестик. Что мне делать?</h1>' +
								'<p>Ничего страшного. Для этого еще раз нажми «Новые советы из Энциклопедии» и повтори все операции.</p>' +								
								'<h1>У меня не загружается файл со смехом.</h1>' +
								'<p>Если у тебя не загружается файл, возможно, он имеет неподходящий формат. Убедись, что загружаемый файл имеет аудиоформат: .mp3, wav или wma.</p>' +								
								'<h1>Что делать если рингтон не скачивается?</h1>' +
								'<p>Если файл с рингтоном не скачивается, обнови страницу и попробуй снова.</p>' +
								'<span class="example"></span>' +
								'<a class="help help-close png" href="#"></a>' +
							'</div>' +
						'</div>' +
					'</div>' +
					'<div class="ready" style="display: none">' +
						'<h1><img src="/i/h1-ready-ringtone.gif" /></h1>' +
						'<div class="actions">' +
							'<span class="listen"></span>' +
							'<a href="#" class="download png"></a>' +
						'</div>' +
						'<div class="error"><a href="#"></a></div>' +
					'</div>' +
					'<a href="#" class="close"></a>' +
				'</div>' +
			'</div>',
			document.body
		);
		this.uploadFrame = as.append("<iframe class='upload-frame' name='upload-frame' frameborder='0' scrolling='no'></iframe>",document.body);
		this.form = as.$$("form",this.popup);
		this.form.target = this.uploadFrame.name;
		this.fileContainer = as.$$("div.fake-upload",this.popup);
		this.file = as.$$("input[type='file']",this.popup);
		this.hidden = as.$$("input[type='hidden']",this.popup);
		this.hidden.value = "RingtonePopup.callback";
		this.uploadC = as.$$("div.upload",this.popup);
		this.readyC = as.$$("div.ready",this.popup);
		this.helpC = as.$$("div.help",this.popup);
		this.closer = as.$$("a.close",this.popup);
		this.goBackButton = as.$$("div.error a",this.popup);
		this.helpButton = as.$$("div.upload a.help",this.popup);
		this.songPlayContainer = as.$$("div.upload span.play",this.popup);
		this.helpCloseButton = as.$$("div.help a.help",this.popup);
		this.songSelect = as.$$("select",this.uploadC);
		new ASCustomSelect().init(this.songSelect,as.bind(this.onSongChange,this));
		
		
		this.decorate();
		this.addEventListeners();
		this.onSongChange();
		this.initExample();
	},
	initExample: function() {
		var player = new SWFObject("/swf/player.swf","mp3player","100%","100%",8);
		player.addVariable("sndarg",this.ringtoneExample);
		player.addParam("wmode","transparent");
		player.write(as.$$("span.example",this.helpC));
	},
	onSongChange: function() {
		if (this.songSelect.options[this.songSelect.selectedIndex].value != 0) {
			var player = new SWFObject("/swf/miniplayer.swf","mp3player","100%","100%",8);
			player.addVariable("sndarg",this.songPrefix + this.songSelect.options[this.songSelect.selectedIndex].value);
			player.addParam("wmode","transparent");
			player.write(this.songPlayContainer);
		}
		else {
			this.songPlayContainer.innerHTML = "";
		}
	},
	decorate: function() {
		as.style(this.overlay,{
			height: document.documentElement.offsetHeight + "px"
		});
		as.style(this.popup,{
			top: document.documentElement.scrollTop + 50 + "px"
		});		
	},
	addEventListeners: function() {
		as.e.click(this.closer,this.closePopup,this);
		as.e.click(this.goBackButton,this.goBack,this);
		as.e.change(this.file,this.sendForm,this);
		as.e.click(this.helpButton,this.showHelp,this);
		as.e.click(this.helpCloseButton,this.hideHelp,this);
	},
	showHelp: function(e) {
		e.preventDefault();
		this.uploadC.style.display = "none";
		this.helpC.style.display = "block";
	},
	hideHelp: function(e) {
		e.preventDefault();
		this.uploadC.style.display = "block";
		this.helpC.style.display = "none";
	},
	closePopup: function(e) {
		e.preventDefault();
		if (this.helpC.style.display == "block") {
			this.hideHelp(e);
			return;
		}
		
		as.remove(this.uploadFrame);
		as.remove(this.overlay);
		as.remove(this.popup);
	},
	goBack: function(e) {		
		e.preventDefault();
		this.uploadC.style.display = "block";
		this.uploadC.className = this.uploadC.className.replace(/\bloading\b/gi,"");
		this.readyC.style.display = "none";
		this.helpButton.style.display = "block";
	},
	sendForm: function() {
		this.form.submit();
		this.uploadC.className += " loading";
		//this.fileContainer.style.display = "none";
		this.loader = as.after("<img class='loader' src='/i/ringtone-loader.gif' />",this.fileContainer);
		//this.helpButton.style.display = "none";
	},
	callback: function(data) {
		as.remove(this.loader);
		this.uploadC.style.display = "none";
		this.fileContainer.style.display = "block";
		this.readyC.style.display = "block";
		
		if (data.error) {
			as.$$("div.actions",this.readyC).style.display = "none";
			as.$$("div.error",this.readyC).style.display = "block";
		}
		else {
			as.$$("div.actions",this.readyC).style.display = "block";
			as.$$("div.error",this.readyC).style.display = "none";
			
			as.$$("div.actions a.download").href = this.downloadUrl + data.name;
			
			var player = new SWFObject("/swf/player.swf","mp3player","100%","100%",8);
			player.addVariable("sndarg",this.listenUrl + data.name);
			player.addParam("wmode","transparent");
			player.write(as.$$("div.actions span.listen"));
		}
	}
}
function initRingtones() {
	as.w("a.ringtone-popup").click(function(e) {
		e.preventDefault();
		RingtonePopup.init();
	});
}

/*******************************************************************************************\\ RINGTONES \\*/
/*******************************************************************************************\\ SNOW FLAKES \\*/
function giftFormCheckbox() {
	as.w("form.gift-form input#agree").each(function() {
		var submitter = as.$$("input[type='submit']",this.form);
		if (submitter) {
			submitter.disabled = !this.checked;
			submitter.parentNode.className = this.checked ? (submitter.parentNode.className.replace(/\bbutton-inactive\b/gi,"")) : (submitter.parentNode.className + " button-inactive");
			as.e.change(this,function() {
				submitter.disabled = !this.checked;
				submitter.parentNode.className = this.checked ? (submitter.parentNode.className.replace(/\bbutton-inactive\b/gi,"")) : (submitter.parentNode.className + " button-inactive");
			},this);
		}
	});
}
function otherFunctional() {
	movePhotos();
	disableFormsAfterSubmit();
	enableBarCodeText();
	initRingtones();
	giftFormCheckbox();
	//snowFlakes();
}
