var recommendSlideshow = function(){
	var els, triggers, current = 0, container = null, timer = null, timeout = 7000, ulWidth, containerWidth, lastLeft = 0;
	return {
		init: function() {
			els = $('div.recommended');
			if (els.size() > 0) {
				recommendSlideshow.build();
			}
		},
		build: function() {
			container = $('<div class="recommendNavig"><ul></ul></div>').appendTo(els.get(0).parentNode);
			containerUl = $('ul', container.get(0));
			els.each(function(nr){
				containerUl.append('<li><a href="#">' + (nr + 1) + '</a></li>');
			});
			lis = $('li', container.get(0));
			triggers = $('a', container.get(0)).bind('click', recommendSlideshow.switchTo).eq(0).addClass('active').end();
			ulWidth = containerUl.css('width', lis.get(lis.size()-1).offsetLeft +  lis.get(lis.size()-1).offsetWidth + 'px').get(0).offsetWidth;
			containerWidth = container.get(0).offsetWidth;
			timer = setInterval(recommendSlideshow.goNext, timeout);
		},
		switchTo: function(e) {
			clearInterval(timer);
			current = container.find('a').index(this);
			els.removeClass('active').eq(current).addClass('active');
			triggers.removeClass('active').eq(current).addClass('active');
			recommendSlideshow.center();
			this.blur();
			return false;
		},
		goNext: function() {
			current ++;
			if (els.size() == current) {
				current = 0;
			}
			els.removeClass('active').eq(current).addClass('active');
			triggers.removeClass('active').eq(current).addClass('active');
			recommendSlideshow.center();
		},
		center: function() {
			mostLeft = Math.max(current - 5, 0);
			left = Math.min(triggers.get(mostLeft).offsetLeft, Math.max(0,ulWidth - containerWidth));
			if (left != lastLeft) {
				containerUl.animate({left: -left + 2}, 700);
				lastLeft = left;
			}
		}
	};
}();

var ajaxLoader = function() {
	var el;
	return {
		init: function() {
			el = $('<div id="ajaxLoader"><img src="/images/loading.gif" /></div>').appendTo('body').css('opacity', 0.8);
		},
		show: function(toLoad) {
			elPosition = $.iUtil.getPosition(toLoad);
			el.css({
				left: elPosition.x + 'px',
				top: elPosition.y + 'px',
				width: toLoad.offsetWidth + 'px',
				height: toLoad.offsetHeight + 'px',
				display: 'block'
			}).fadeTo(700, 0.8);
		},
		hide: function() {
			el.fadeOut(700);
		}
	};
}();

var overlay = function() {
	var el, ifr;
	return {
		init: function() {
			if ($.browser.msie) {
				iframe = document.createElement('iframe');
				ifr = jQuery(iframe)
					.attr(
						{
							id			: 'overlayIframe',
							src			: 'javascript:false;',
							frameborder	: 'no',
							scrolling	: 'no'
						}
					)
					.css ('opacity', 0).appendTo('body');
			}
			el = $('<div id="overlay"></div>').appendTo('body').css('opacity', 0.8);
		},
		show: function() {
			if (ifr) {
				ifr.css({
					width: document.body.offsetWidth + 'px',
					height: document.body.offsetHeight + 'px',
					display: 'block'
				});
			}
			el.css({
				width: document.body.offsetWidth + 'px',
				height: document.body.offsetHeight + 'px',
				display: 'block'
			});
			$(document.body).css('overflow', 'hidden');
		},
		hide: function() {
			if (ifr) {
				ifr.hide();
			}
			el.hide();
			$(document.body).css('overflow', 'auto');
		}
	};
}();

var newsletter = function() {
	var formEl, submitEl, nameErr, emailErr, nameEl, emailEl;
	var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return {
		init: function() {
			formEl = $('#newsletterForm');
			submitEl = $('#newsletterSubmit')
				.bind('click', newsletter.submit);
			nameEl = $('#newsletterName');
			emailEl = $('#newsletterEmail');
			nameErr = $('#newsletterForm em:first');
			emailErr = $('#newsletterForm em:last');
		},
		submit: function(e) {
			nameVal = nameEl.val();
			emailVal = emailEl.val();
			hasError = false;
			if (nameVal == '') {
				nameErr.fadeIn(500);
				hasError = true;
				nameEl.get(0).focus();
			} else if (nameErr.is(':visible')) {
				nameErr.fadeOut(500);
			}
			if (emailVal == '' || newsletter.isNotEmail(emailVal)) {
				emailErr.fadeIn(500);
				if (hasError === false) {
					emailEl.get(0).focus();
				}
				hasError = true;
			}else if (emailErr.is(':visible')) {
				emailErr.fadeOut(500);
			}
			
			if (hasError === false) {
				$.ajax({
					type			: 'POST',
					url				: '/ajaxserver.php',
					data			: 'request=newsletter&email=' + emailVal + '&name=' + nameVal,
					complete		: function()
					{
						ajaxLoader.hide();
					},
					
					success			: function(xml)
					{
						var marked = false;
						$('formel', xml).each(function(){
							el = formEl.find('label[@for=' + $(this).attr('id') + ']');
							if ($(this).text() == 'error' && el.is(':hidden')) {
								el.fadeIn(500);
								if (marked === false) {
									$('#' + $(this).attr('id')).get(0).focus();
									marked = true;
								}
							} else if(el.is(':visible')) {
								el.fadeOut(500);
							}
						});
					}
				});
			}
			return false;
		},
		isNotEmail: function(value) {
			return !filter.test(value);
		}
	};
}();

var tellafriend = function() {
	var formEL;
	return {
		init: function() {
			if ($('#tellAFriend').bind('click', tellafriend.show).size() == 1) {
				formEl = $('#tellAFriendForm');
				$('#tellSubmit').bind('click', tellafriend.submit);
				$('#tellCancel').bind('click', tellafriend.hide);
			}
		},
		show: function() {
			tellafriend.clear();
			window.scrollTo(0,0);
			overlay.show();
			formEl.show();
			$.iUtil.centerEl(formEl.get(0), 'horizontally');
			this.blur();
			return false;
		},
		clear: function() {
			formEl
				.find('input[@type=^text]')
				.val('')
				.end()
				.find('em')
				.hide();
		},
		hide: function() {
			formEl.hide();
			tellafriend.clear();
			overlay.hide();
			return false;
		},
		submit: function() {
			ajaxLoader.show(formEl.get(0));
			$.ajax({
				type			: 'POST',
				url				: '/ajaxserver.php',
				data			: $.param({
					request: 'tellafriend',
					name: $('#tellName').val(),
					email: $('#tellEmail').val(),
					fname: $('#tellFName').val(),
					femail: $('#tellFEmail').val(),
					url: window.location.href,
					title: $('h1').text()
				}),
				complete		: function()
				{
					ajaxLoader.hide();
				},
				success			: function(xml)
				{
					hasErrors = false;
					$('formel', xml).each(function(){
						el = $('#' + $(this).attr('id'));
						if ($(this).text() == 'error') {
							hasErrors = true;
							el.filter(':hidden').fadeIn(500);
						} else if (el.is(':visible')) {
							el.fadeOut(500);
						}
					});
					if (hasErrors == false) {
						tellafriend.hide();
					}
				}
			});
			return false;
		}
	};
}();

var addDirectoryEntry = function() {
	var formEl, origDir;
	return {
		init: function() {
			formEl = $('#addEntry');
			if (formEl.size() > 0) {
				origDir = $('#addEntryDirectory').val();
				$('#addEntryCancel, #addEntryClose').bind('click', addDirectoryEntry.hide);
				$('#addEntrySubmit').bind('click', addDirectoryEntry.submit);
				$('p.addEntry a').bind('click', addDirectoryEntry.show);
			}
		},
		show: function(e) {
			addDirectoryEntry.clear();
			window.scrollTo(0,0);
			overlay.show();
			formEl.show();
			$.iUtil.centerEl(formEl.get(0), 'horizontally');
			this.blur();
			return false;
		},
		hide: function(e) {
			formEl.hide();
			addDirectoryEntry.clear();
			overlay.hide();
			return false;
		},
		clear: function(e) {
			$('#addEntrySubmit, #addEntryCancel').show();
			$('#addEntryClose').hide();
			formEl
				.find('fieldset')
				.show()
				.find('em')
				.hide()
				.end()
				.find('div.mesage')
				.remove();
			$('#addEntryName').val('');
			$('#addEntryEmail').val('');
			$('#addEntryCompany').val('');
			$('#addEntryAccept').attr('checked', 'checked');
			$('#addEntryAddress').val('');
			$('#addEntryPhone').val('');
			$('#addEntryTitle').val('');
			$('#addEntryURL').val('');
			$('#addEntryDescription').val('');
			$('#addEntryDirectory').val(origDir);
			$('#addEntryNote').val('');
		},
		submit: function() {
			ajaxLoader.show(formEl.get(0));
			$.ajax({
				type			: 'POST',
				url				: '/ajaxserver.php',
				data			: $.param({
					request: 'addEntry',
					name: $('#addEntryName').val(),
					email: $('#addEntryEmail').val(),
					phone: $('#addEntryPhone').val(),
					title: $('#addEntryTitle').val(),
					address: $('#addEntryAddress').val(),
					county: $('#addEntryCounty').val(),
					company: $('#addEntryCompany').val(),
					status: $('#addEntryStatus').val(),
					accept: $('#addEntryAccept').attr('checked') ? 1 : 0,
					newsletter: $('#addEntryNewsletter').attr('checked') ? 1 : 0,
					url: $('#addEntryURL').val(),
					description: $('#addEntryDescription').val(),
					directory: $('#addEntryDirectory').val(),
					note: $('#addEntryNote').val()
				}),
				complete		: function()
				{
					ajaxLoader.hide();
				},
				success			: function(xml)
				{
					hasErrors = false;
					$('formel', xml).each(function(){
						el = $('#' + $(this).attr('id'));
						if ($(this).text() == 'error') {
							hasErrors = true;
							el.filter(':hidden').fadeIn(500);
						} else if (el.is(':visible')) {
							el.fadeOut(500);
						}
					});
					message = $('message', xml);
					if (hasErrors == false && message.size() > 0) {
						formEl
							.find('h4')
							.after(message.text())
							.end()
							.find('fieldset')
							.hide();
						$('#addEntrySubmit, #addEntryCancel').hide();
						$('#addEntryClose').show();
					}
				}
			});
		}
	};
}();

var articlesPager = function() {
	var list, perpage = 16, pager, current = 0, pages;
	return {
		init: function() {
			list = $('div.sideContentTop>div.articlesList ul li');
			if (list.size() > perpage) {
				pager = $('<p class="pages">Pagini: </p>').appendTo($('div.articlesList').get(0));
				for(var i=1; i<= Math.ceil(list.size()/perpage); i++) {
					pager.append(' <a href="#" title"Pagina ' + i + '">' + i + '</a>');
				}
				pages = $('div.articlesList p.pages a').bind('click', articlesPager.goToPage);
				articlesPager.goToPage(current);
			}
		}, 
		goToPage: function(e) {
			list.hide();
			pages.eq(current).removeClass('active');
			if (typeof e == 'number') {
				
			} else {
				current = pages.index(this);
				this.blur();
			}
			pages.eq(current).addClass('active');
			list.gt(current * perpage).lt(perpage).show();
			return false;
		}
	}
}();

var contactForm = function() {
	var formEl;
	return {
		init: function() {
			formEl = $('#contactForm');
			if (formEl.size() == 1) {
				$('#contactSubmit').bind('click', contactForm.submit);
			}
		},
		submit: function() {
			ajaxLoader.show(formEl.get(0));
			$.ajax({
				type			: 'POST',
				url				: '/ajaxserver.php',
				data			: $.param({
					request: 'contactForm',
					name: $('#contactName').val(),
					email: $('#contactEmail').val(),
					phone: $('#contactPhone').val(),
					company: $('#contactCompany').val(),
					message: $('#contactMessage').val()
				}),
				complete		: function()
				{
					ajaxLoader.hide();
				},
				
				success			: function(xml)
				{
					var marked = false;
					$('formel', xml).each(function(){
						el = formEl.find('#' + $(this).attr('id') + 'Err');
						if ($(this).text() == 'error') {
							if (el.is(':hidden')) {
								el.fadeIn(500);
							}
							if (marked === false) {
								$('#' + $(this).attr('id')).get(0).focus();
								marked = true;
							}
						} else if(el.is(':visible')) {
							el.fadeOut(500);
						}
					});
					message = $('message', xml);
					if (message.size() > 0) {
						formEl
							.find('h3')
							.after(message.text())
							.end()
							.find('fieldset')
							.hide();
					}
				}
			});
			this.blur();
			return false;
		}
	};
}();

var companyDetailsBox = function() {
	var 
		expanded = false,
		triggerBox = function(e){
				if (expanded == false) {
					expanded = true;
					$(this)
						.removeClass('collapsed')
						.addClass('expanded')
						.blur();
					$('#companyDetails table').removeClass('recommended');
				} else {
					expanded = false;
					$(this)
						.removeClass('expanded')
						.addClass('collapsed')
						.blur();
					$('#companyDetails table').addClass('recommended');
				}
				return false;
		},
		submitMessage = function(e){
			ajaxLoader.show($('#companyDetails').get(0));
			$.ajax({
				type			: 'POST',
				url				: '/ajaxserver.php',
				data			: $.param({
					request: 'companyMessage',
					advert: $('#companyDetails').attr('rel'),
					name: $('#companyName').val(),
					email: $('#companyEmail').val(),
					phone: $('#companyPhone').val(),
					company: $('#companyCompany').val(),
					message: $('#companyMessage').val()
				}),
				complete		: function()
				{
					ajaxLoader.hide();
				},
				
				success			: function(xml)
				{
					var marked = false;
					$('formel', xml).each(function(){
						el = $('#' + $(this).attr('id') + 'Err');
						if ($(this).text() == 'error') {
							if (el.is(':hidden')) {
								el.fadeIn(500);
							}
							if (marked === false) {
								$('#' + $(this).attr('id')).get(0).focus();
								marked = true;
							}
						} else if(el.is(':visible')) {
							el.fadeOut(500);
						}
					});
					message = $('message', xml);
					if (message.size() > 0) {
						$('#companyDetails table td:last')
							.html(message.text());
					}
				}
			});
			this.blur();
			return false;
		};
	return {
		init: function(){
			$('#companyTrigger').bind('click', triggerBox);
			$('#companySubmit').bind('click', submitMessage);
		}
	};
}();

$(document).ready(function(){
	$('div.tabStrip')
		.find('ul.tabs')
		.css('visibility', 'visible')
		.find('a')
		.bind('click', function(){
			$('a', this.parentNode.parentNode).removeClass('active');
			$(this).addClass('active')
				.parent()
				.parent()
				.parent()
				.find('div.tabContent')
				.removeClass('active')
				.eq(
					$(this)
						.parent()
						.parent()
						.find('li')
						.index(this.parentNode)
				)
				.addClass('active');
			this.blur();
			return false;
		});

	recommendSlideshow.init();
	overlay.init();
	ajaxLoader.init();
	newsletter.init();
	addDirectoryEntry.init();
	contactForm.init();
	articlesPager.init();
	tellafriend.init();
	companyDetailsBox.init();
	$('#coversShuffle div').jqShuffle({direction:2, auto: true});
});