/* cookies funcs */
var Cookies = {
	set: function(cookieName, cookieContent, cookieExpireTime){
		if (cookieExpireTime>0){
			var expDate=new Date();
			expDate.setTime(expDate.getTime()+cookieExpireTime*1000*60*60);
			var expires=expDate.toGMTString();
			document.cookie=cookieName+"="+escape(cookieContent)+"; path="+escape('/')+"; expires="+expires
		}else{
			document.cookie=cookieName+"="+escape(cookieContent)+"; path="+escape('/')+"";
		}
	},
	get: function(cookieName){
		var ourCookie=document.cookie;
		if (!ourCookie || ourCookie=="")return "";
		ourCookie=ourCookie.split(";");
		var i=0;
		var Cookie;
		while (i<ourCookie.length){
			Cookie=ourCookie[i].split("=")[0];
			if (Cookie.charAt(0)==" ") Cookie=Cookie.substring(1);
			if (Cookie==cookieName) return unescape(ourCookie[i].split("=")[1]);
			i++;
		}
		return "";
	},
	erase: function(cookieName){
		var cookie = Cookies.get(cookieName) || true;
		Cookies.set(cookieName, '', -1);
		return cookie;
	},
	accept: function(){
		if (typeof navigator.cookieEnabled == 'boolean') return navigator.cookieEnabled;
		Cookies.set('_test', '1');
		return (Cookies.erase('_test') = '1');
	}
}

/*
 * Randomly interchange elements
 * if param 'b' is set to 'true', it will shuffle sub- and multisubarrays
 * in their own right, the default value is 'false'
 */
Array.prototype.shuffle = function(b){
	var i = this.length, j, t;
	while(i){
		j = Math.floor((i--) * Math.random());
		t = b && typeof this[i].shuffle !== 'undefined' ? this[i].shuffle() : this[i];
		this[i] = this[j];
		this[j] = t;
	}
	return this;
};

/*
 * trim funcs
 */
Object.extend(String.prototype, {
	LTrim: function(){
		return this.replace(/\s*((\S+\s*)*)/, "$1");
	},
	RTrim: function(){
		return this.replace(/((\s*\S+)*)\s*/, "$1");
	},
	trim: function(){
		return this.LTrim(this.RTrim());
	}
});

/*
 * we need win1251, not that utf stuff
 */
window.encodeURIComponent = function(str){
	var trans = [];
	for (var i = 0x410; i <= 0x44F; i++) trans[i] = i - 0x350; // А-Яа-я
	trans[0x401] = 0xA8; // Ё
	trans[0x451] = 0xB8; // ё
	var ret = [];
	for (var i = 0; i < str.length; i++){
		var n = str.charCodeAt(i);
		if (typeof trans[n] != 'undefined') n = trans[n];
		if (n <= 0xFF) ret.push(n);
	}
	return escape(String.fromCharCode.apply(null, ret)).replace(/\+/g, '%2B'); // +
}
window.decodeURIComponent = function(str){
	return unescape(str);
}

function showUsersRating(role_id, type) {
	if ( role_id != '' ) {
		Cookies.set(type, role_id, 0);
	}

	var url = window.location.href;

	new Ajax.Updater(type, '/ajax/rating/users.html', { 
		method: 'get',
		parameters: { type:type, role_id:role_id },
		onComplete: function(transport) {
			if ( 200 == transport.status && url ) {
				var anchor = url.match(/\?(\w+_[0-9]+)/);
				
				if ( anchor && anchor.length > 0 && $(anchor[1]) ) {
					$(anchor[1]).focus();
				}
				
				$$('#' + type + ' .context-menu-link').each( setUserContextMenuHandler );
			}
		}
	});
}

function showNewUsersRating(role_id) {
	if ( role_id != '' ) {
		Cookies.set('new_users', role_id, 0);
	}

	new Ajax.Updater('new_users', '/ajax/rating/new_users.html', { 
		method: 'get',
		parameters: { role_id:role_id },
		onComplete: function(transport) {
			if ( 200 == transport.status ) {
				$$('#new_users .context-menu-link').each( setUserContextMenuHandler );
			}
		}
	});
}

function changeCalendarMonth(id, large, month) {
	new Ajax.Updater(id, '/ajax/events/calendar.html', { 
		method: 'get',
		parameters: { large:large, month:month },
		evalScripts: true,
		onComplete: function(transport) {
			if ( 200 == transport.status ) {
				$$('.event-context-link').each( setEventContextMenuHandler );
			}
		}
	});
}

function setRatingFocus() {
	var url = window.location.href;
	var anchor = url.match(/\?(\w+_[0-9]+)/);
	if ( anchor && anchor.length > 0 && $(anchor[1]) ) {
		$(anchor[1]).focus();
	}
}

function loadUsersSelect(role_id, surname) {
	new Ajax.Updater('users_select', '/ajax/search/users.html', {
		parameters: { role_id:role_id, surname:surname }
	});
}

function showBlog(user_id, curr_post) {
	new Ajax.Updater('blog', '/ajax/blog/blog.html', { 
		method: 'get',
		parameters: { user_id:user_id, curr_post:curr_post }
	});
}

function voteForObject(obj_id, obj_type, voice, container) {
	if (container == null) {
		container = 'rating_container';
	}
	
	new Ajax.Updater(container, '/ajax/rating/vote.html', {
		parameters: { obj_id:obj_id, obj_type:obj_type, voice:voice },
		onSuccess: function() { window.location.reload(); }
	});
}

function checkAll (form, filter) {
	for (var i =0; i < form.elements.length; i++) {
		var el = form.elements[i];
		
		if ( (el.type=='checkbox') && (!el.disabled) ) {
			if (filter == 'unreaded') {
				el.checked = el.parentNode.parentNode.className == 'unread' ? true : false;
			}
			else if (filter == 'readed') {
				el.checked = el.parentNode.parentNode.className == '' ? true : false;
			}
			else {
				el.checked = true;
			}
		}
	}
}

function showMailHistory(user_id, page) {
	new Ajax.Updater('mail_history', '/ajax/mail/history.html', {
		parameters: { user_id:user_id, p:page }
	});
}

function toggleJobInput(inp) {
	if (inp.checked) {
		$('jobtext').value = '';
	}

	$('jobtext').disabled = inp.checked;
}

function toggleRoleDescription(role) {
	$$('.role_description').each( 
		function(el) { 
			if ( !el.hasClassName('hidden') ) el.addClassName('hidden');
		}
	); 
	
	var el = $('role_descr_' + role); 
	
	if ( el != null ) el.toggleClassName('hidden');
}

function onCtrlEnter( e, form ) {
	if( e.ctrlKey && ( e.keyCode == 13 || e.keyCode == 10 ) ) {
		if( form && (!form.onsubmit || form.onsubmit.call( form ) !== false) ) {
			form.submit();
		}
	}
}

function startSlideShow(start_frame, end_frame, delay) {
	setTimeout( switchSlides(start_frame,start_frame,end_frame, delay), delay );
}

function switchSlides(frame, start_frame, end_frame, delay) {
	return (function() {
		Effect.Fade( 'face_of_month' + frame, { duration: 3.0, from: 1, to: 0 } );
		if (frame == end_frame) { frame = start_frame; } else { frame = frame + 1; }
		Effect.Appear( 'face_of_month' + frame, { duration: 3.0, from: 0, to: 1 } );
		setTimeout( switchSlides(frame, start_frame, end_frame, delay), delay + 6000 );
	})
}

function showAnswerForm(comment_id, obj_id, obj_type) {
	$$('.new-write').invoke('hide');
	
	new Ajax.Updater('comment_answer_' + comment_id, '/ajax/comment/answer.html', {
		parameters: { comment_id: comment_id, obj_id: obj_id, obj_type: obj_type },
		evalScripts: true
	});
	
	$('comment_answer_' + comment_id).show();
	
	if ( !$('new_comment').visible ) {
		$('new_comment').show();
	}
}

function showCommentForm() {
	$$('.new-write').invoke('hide');
	
	$('new_comment').hide();
	$('add_comment').show();
}

function setUserContextMenuHandler(e) {
	var user_id = e.href.match(/\/profile\/(\d+)\//);
	if ( user_id == null ) {
		return;
	}
	
	new Tip(e, {
			ajax: {
				url: '/ajax/user/context.html',
				options: {
					parameters: { user_id: user_id[1], back: window.location.href },
					evalScripts: true
				}
			},
			width: 240,
			fixed: true,
			hideAfter: 0.5,
			delay: 0.5,
			offset: { x:50, y:50 }
		});
}

function setEventContextMenuHandler(e) {
	var day = e.href.match(/day=(\d+)/);
	var month = e.href.match(/month=(\d+)/);
	var year = e.href.match(/year=(\d+)/);
	
	new Tip(e, {
			ajax: {
				url: '/ajax/events/events.html',
				options: {
					parameters: { day: day[1], month: month[1], year: year[1] },
					evalScripts: true
				}
			},
			width: 'auto',
			fixed: true,
			hideAfter: 0.5,
			delay: 0.5,
			offset: { x:20, y:20 }
		});
}

function setPacoRabanneHandler(e) {
	e.tip = new Tip(e, 'The new fragrance.<br />Play video', {
			stem: 'bottomMiddle',
			width: 115,
			fixed: true,
			hideAfter: 0.5,
			delay: 0.1,
			target: e,
			style: 'pacorabanne',
			offset: { x:0, y:-70 }
		});

	e.tip.wrapper.setStyle( {opacity: 0.0 } );

	e.observe('prototip:shown', function() {
		this.tip.wrapper.fade( { duration: 1, from: 0, to: 1 } );
	});

	e.observe('prototip:hidden', function() {
		this.tip.wrapper.setStyle( {opacity: 0.0 } );
	});
}

function setBelayaDachaHandler(e) {
	e.tip = new Tip(e, 'Просмотреть видео', {
			stem: 'bottomMiddle',
			width: 115,
			fixed: true,
			hideAfter: 0.5,
			delay: 0.1,
			target: e,
			style: 'belayadacha',
			offset: { x:0, y:-30 }
		});

	e.tip.wrapper.setStyle( {opacity: 0.0 } );

	e.observe('prototip:shown', function() {
		this.tip.wrapper.fade( { duration: 1, from: 0, to: 1 } );
	});

	e.observe('prototip:hidden', function() {
		this.tip.wrapper.setStyle( {opacity: 0.0 } );
	});
}

function updateVisitors(event_id, action, no_visitors) {
	new Ajax.Updater('visitors_actions', '/ajax/events/actions.html', {
		parameters: { event_id:event_id, action:action, no_visitors: no_visitors }
	});
}

function toggleVisitors(event_id, link) {
	if ( link.hasClassName('open') ) {
		new Ajax.Updater('visitors_list', '/ajax/events/visitors.html', {
			parameters: { event_id: event_id, limit: 6 }
		});
	
		link.removeClassName('open');
		link.innerHTML = 'развернуть';
	}
	else {
		new Ajax.Updater('visitors_list', '/ajax/events/visitors.html', {
			parameters: { event_id: event_id }
		});
		
		link.addClassName('open');
		link.innerHTML = 'свернуть';
	}
}

function dropSpaces(str) {
	var newstr = str.trim();
	return newstr.replace(/(\s)+/g, ""); 
}

function checkEmail(email) {
	var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$/;
	email = dropSpaces(email);
	
	if (template.test(email)) {
		return true;
	}
	
	return false; 
}

function showPhotoNavigation(event) {
	this.addClassName('visible');
}

function hidePhotoNavigation(event) {
	this.removeClassName('visible');
}

function recommendObject(obj_id, obj_type, type) {
	new Ajax.Updater('recommend', '/ajax/user/recommend.html', {
		parameters: { obj_id: obj_id, obj_type: obj_type, type: type }
	});
}

function toggleSunpeopleForm() {
	$('sunpeople').toggleClassName('hidden');

	if ( auth_img == null ) {
		auth_img = new AuthImage('ajax-auth-img', 'reload-auth-img-link');
	}
}

function updateUserMood(mood_id, toggle, user_id) {
	new Ajax.Updater('mood', '/ajax/user/mood.html', {
		evalScripts: true,
		parameters: { mood_id: mood_id, toggle: toggle, user_id: user_id }
	});
}

function toggleSearchForm(role, role_model, role_user) {
	if ( role == role_model ) {
		$('model_attrs').show();
	}
	else {
		$('model_attrs').hide()
	};
	
	if ( role == role_user ) {
		$('vip_attrs').hide();
	}
	else {
		$('vip_attrs').show()
	};
}

function togglePacoRabanne(side) {
	var el = $('paco-rabanne');

	if ( side == 'top' ) {
		el.toggleClassName('top');
	}
	else {
		var over = side == 'right' ? 'left' : 'right';

		if ( el.hasClassName(side) ) {
			el.removeClassName(side);
		}
		else {
			el.removeClassName(over);
			el.addClassName(side);
		}

		if ( side == 'left') {
			$('paco-rabanne-right').hide();
			$('paco-rabanne-left').show();
		}
		else {
			$('paco-rabanne-left').hide();
			$('paco-rabanne-right').show();
		}
	}
}

function hidePacoRabanne() {
	var el = $('paco-rabanne');

	el.removeClassName('left');
	el.removeClassName('right');
}

function toggleBelayaDacha(side) {
	var el = $('belaya-dacha');
	var overlay = $('overlay');

	if ( side == 'top' ) {
		el.toggleClassName('top');
		overlay.toggleClassName('hidden');
	}
	else {
		var over = side == 'right' ? 'left' : 'right';

		if ( el.hasClassName(side) ) {
			el.removeClassName(side);
			overlay.addClassName('hidden');
		}
		else {
			el.removeClassName(over);
			el.addClassName(side);
			overlay.removeClassName('hidden');
		}

		if ( side == 'left') {
			$('belaya-dacha-right').hide();
			$('belaya-dacha-left').show();
		}
		else {
			$('belaya-dacha-left').hide();
			$('belaya-dacha-right').show();
		}
	}
}

function hideBelayaDacha() {
	var el = $('belaya-dacha');

	el.removeClassName('left');
	el.removeClassName('right');
	el.removeClassName('top');
	
	$('overlay').addClassName('hidden');
}

function openAuditoriumBanner() {
	$('top-banner').setStyle( {height: '540px'} );
}

function resizeAuditoriumBanner() {
	$('top-banner').setStyle( {height: '90px'} );
}
