var Gui = {
	entries_per_page: 20,
	total_entries: 0,
	active_page: 1,
	pages_to_show: 11,
	page_build_from: null,
	page_build_till: null,
	paging_width: null,
	paging_padding: 10,
	disable_previous_link: false,
	disable_next_link: false,
	activate_js_paging: false,
	vote_img: '/css/img/vote_start_big',
	vote_width: 24,
	
	init: function() {
		this.initHeaderSearch(jQuery('#header-search-input'));
		this.initListHover(jQuery('.list-item'));
		//this.initPagesNavigation(jQuery('.previous-link'), jQuery('.next-link'));
		this.initVoting(jQuery('.rating.active'));
		this.initValidator();
		
		this.initToggleShareForm(jQuery('#share-video-btn'));
		this.initToggleComments(jQuery('#comment-video-btn'));
		this.initExternalLinks();
		this.initPopupLinks();
		
		if (jQuery('form select.select').length)
			this.initSelect(jQuery('form select.select'));
	},
	
	
	initPopupLinks: function(){
		jQuery('a.popup').click(function(e){
			e.preventDefault();
			
			window.open(jQuery(this).attr('href'),jQuery(this).attr('title'), "menubar=no,width=640,height=480,toolbar=no,location=no,status=no,titlebar=no,toolbar=no,scrollbars=yes");
		});
	},
	
	
	initHeaderSearch: function($elem){
		$elem.blur(function(){ 
			if ($elem.val() == '') {
				$elem.val($elem.attr('title')).addClass('blurred');
			}
		});
		
		$elem.focus(function(){ 
			if ($elem.val() == $elem.attr('title')) {
				$elem.val('').removeClass('blurred');
			}
		});
		
		$elem.blur();
	},
	
	initListHover: function($elem) {
		$elem.each(function(){
			jQuery(this).hover(
				function(){											// mouse over
					jQuery('.preview span', this).addClass('hover');
				},
				function(){											// mouse out
					jQuery('.preview span', this).removeClass('hover');
				}
			);
		});
	},
	
	
	initPagesNavigation: function($previous, $next) {
		Gui.total_entries = parseInt(jQuery('.totalentries').html());
		Gui.active_page = parseInt(jQuery('.available-pages .on').html());
		Gui.activate_js_paging = (Math.ceil(Gui.total_entries / Gui.entries_per_page) > Gui.pages_to_show) ? true : false;
		
		
		if (Gui.activate_js_paging) {
			$previous.each(function(){
				var $this = jQuery(this);
				$this.click(function(){
					Gui.page_build_from = parseInt(jQuery('.available-pages a:first').html()) - Gui.pages_to_show;
					Gui.page_build_till = parseInt(jQuery('.available-pages a:first').html()) - 1;
					if (Gui.page_build_from < 1) {
						Gui.page_build_from = 1;
						Gui.page_build_till = Gui.page_build_from + (Gui.pages_to_show - 1);
						
					}
					
					if (!Gui.disable_previous_link && Gui.page_build_till >= Gui.pages_to_show) {
						Gui.paging_width = jQuery('.available-pages').attr('offsetWidth');
						jQuery('.available-pages').css('width', (Gui.paging_width-Gui.paging_padding)+'px');
						
						if (Gui.page_build_from == 1) { Gui.disable_previous_link = true; }
						
						jQuery('.available-pages').fadeOut(100, function(){
							Gui.createPages(jQuery('.available-pages'), Gui.page_build_from, Gui.page_build_till);
							jQuery('.available-pages').css('width','');
							jQuery(this).fadeIn(100, function(){ Gui.disable_next_link = false; });
						});
					}
					
					
					return false;
				});
			});
			
			$next.each(function(){
				var $this = jQuery(this);
				$this.click(function(){
					Gui.page_build_from = parseInt(jQuery('.available-pages a:first').html()) + Gui.pages_to_show;
					Gui.page_build_till = parseInt(jQuery('.available-pages a:first').html()) + (Gui.pages_to_show * 2) - 1;
					
					if (Gui.page_build_till >= Math.ceil(Gui.total_entries / Gui.entries_per_page)) {
						Gui.page_build_from = Math.ceil(Gui.total_entries / Gui.entries_per_page) - Gui.pages_to_show;
						Gui.page_build_till = Math.ceil(Gui.total_entries / Gui.entries_per_page);
					}
					
					if (!Gui.disable_next_link && Gui.page_build_till <= (Math.ceil(Gui.total_entries / Gui.entries_per_page))) {
						Gui.paging_width = jQuery('.available-pages').attr('offsetWidth');
						jQuery('.available-pages').css('width', (Gui.paging_width-Gui.paging_padding)+'px');
						
						if (Gui.page_build_till == Math.ceil(Gui.total_entries / Gui.entries_per_page)) { Gui.disable_next_link = true; }
						
						jQuery('.available-pages').fadeOut(100, function(){
							Gui.createPages(jQuery('.available-pages'), Gui.page_build_from, Gui.page_build_till);
							jQuery('.available-pages').css('width','');
							jQuery(this).fadeIn(100, function(){ Gui.disable_previous_link = false; });
						});
					}
					
					return false;
				});
			});
		}
	},
	
	createPages: function($container, from, till) {
		$container.html('');
		for (var i=from;i<=till;i++) {
			var $elem = jQuery('<a href="">'+i+'</a>');
			if (i == Gui.active_page) { $elem = $elem.addClass('on'); }
			$container.append($elem).append('&nbsp;');
		}
	},
	
	
	
	
	initVoting: function($container) {
		var old_width = jQuery('.bg', $container).css('width');
		
		jQuery('.fg img', $container).hover(
			function(){
				var vote_value = parseInt(jQuery('.fg img', $container).index(this)) + 1;
				jQuery(this).attr('src', Gui.vote_img + '_hover.png');
				jQuery('.bg', $container).css('width', (vote_value * Gui.vote_width)+'px');
			},
			function(){
				jQuery(this).attr('src', Gui.vote_img + '.png');
				jQuery('.bg', $container).css('width', old_width);
			}
		);
		
		
		
		jQuery('.fg img', $container).click(function(){
			var vote_value = parseInt(jQuery('.fg img', $container).index(this)) + 1;
			
			jQuery.ajax({
				type: 'POST',
				url: window.location.href,
				data: 'vote='+vote_value,
				dataType: 'json',
				success: function(json) {
					jQuery('.bg', $container).css('width', json.rating_width+'px');
					jQuery('#current-rating').fadeOut(100, function(){ jQuery('#current-rating').html(json.rating).fadeIn(100); });
					
					jQuery('.fg img', $container).unbind();
					jQuery('.fg img', $container).each(function(){
						jQuery(this).attr('src', Gui.vote_img + '.png');
					});
				}
			});
		});
	},
	
	
	initValidator: function(){
		var errors =  [];
		jQuery('form.validate_me').submit(function(){
			errors.length = 0;
			$form = jQuery(this);
			jQuery('.validate_required, .validate_int, .validate_email', $form).removeClass('validate_error');
			jQuery('.validate_required', $form).each(function(){ 
				if (!jQuery(this).hasClass('validate_error') && !Validator.required(jQuery(this))) {
					errors.push(jQuery(this).attr('title') + ' is required');
					jQuery(this).addClass('validate_error');
				}
			});
			jQuery('.validate_int', $form).each(function(){ 
				if (!jQuery(this).hasClass('validate_error') && !Validator.integer(jQuery(this))) {
					errors.push(jQuery(this).attr('title') + ' is not integer');
					jQuery(this).addClass('validate_error');
				} 
			});
			jQuery('.validate_email', $form).each(function(){ 
				if (!jQuery(this).hasClass('validate_error') && !Validator.email(jQuery(this))) {
					errors.push(jQuery(this).attr('title') + ' is not a correct email format');
					jQuery(this).addClass('validate_error');
				}
			});
			
			
			if (errors.length > 0) {
				SMSG.show(errors);
				return false;
			}
			//return false;
			return true;
		})
	},
	
	initSelect: function($elem) { $elem.each(function(i,dom){ jQuery(dom).selectEm(); }); },
	initToggleShareForm: function ($container) { $container.click(function(){ jQuery('#share-content').slideToggle(450); }); },
	initToggleComments: function ($container) { $container.click(function(){ jQuery('#comments-content').slideToggle(450); }); },
	initExternalLinks: function() { jQuery('a.external').click(function(){ jQuery(this).attr('target', '_blank'); }); }
	
};


// fading out messages
var SMSG = {
	smsg_timer1: null,
	smsg_timer2: null,
	opacity: .8,
	
	show: function(msgs) {
		if (!jQuery('#smsg').length) {
			jQuery('body').append('<div id="smsg"><div class="round"></div><p></p><div class="round"></div></div>');
		}
		
		clearTimeout(SMSG.smsg_timer2);
		
		for (var i in msgs) {
			jQuery('#smsg p').append(msgs[i] + '<br />');
		}
		
		jQuery('#smsg').show().animate({opacity: SMSG.opacity}, 200);
		SMSG.smsg_timer1 = setTimeout("SMSG.bindEvents()", 700);
		SMSG.smsg_timer2 = setTimeout("SMSG.remove()", 5000);
	},
	
	bindEvents: function() { 
		jQuery(window)
			.mousemove(SMSG.remove)
			.click(SMSG.remove)
			.keypress(SMSG.remove);
	},
	
	remove: function() {
		jQuery(window)
			.unbind('mousemove')
			.unbind('click')
			.unbind('keypress');
			
			if (jQuery('#smsg').css('opacity') == SMSG.opacity) { 
				jQuery('#smsg').animate({opacity: 0}, 500, function(){ jQuery(this).hide(); jQuery('p', this).html(''); });
			}
	}

};


// form validator
var Validator = {
	email_regexp: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
	int_regexp: /^-?\d+$/,
	
	required: function($elem) { return (trim($elem.val()).length  > 0) ? true : false; },
	integer: function($elem) { return (Validator.int_regexp).test($elem.val()); },
	email: function($elem) { return (Validator.email_regexp).test($elem.val()); }
}



function trim(string) {
	return string.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function findPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		while (1) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
			if (!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	} else if (obj.x && obj.y) {
		curleft += obj.x;
		curtop += obj.y;
	}
	
	return [curleft,curtop];
}

jQuery(document).ready(function(){ Gui.init(); });
