/**
 * Compact labels plugin
 */
(function($){$.fn.compactize=function(){return this.each(function(){var label=$(this),input=$('#'+label.attr('for'));input.focus(function(){label.hide();}).blur(function(){if(input.val()===''){label.show();}});window.setTimeout(function(){if(input.val()!==''){label.hide();}},50);});};})(jQuery);

/*
 * hrefID jQuery extention - returns a valid #hash string from link href attribute in Internet Explorer
 */
(function($){$.fn.extend({hrefId:function(){return $(this).attr('href').substr($(this).attr('href').indexOf('#'));}});})(jQuery);

/*
 * Scripts
 *
 */
jQuery(function($) {
 
	var Engine = {
		utils : {
			links : function(){
				$('a[rel*=external]').click(function(e){
					e.preventDefault();
					window.open($(this).attr('href'));						  
				});
			},
			mails : function(){
				$('a[href^=mailto:]').each(function(){
					var mail = $(this).attr('href').replace('mailto:','');
					var replaced = mail.replace('/at/','@');
					$(this).attr('href','mailto:'+replaced);
					if($(this).text() == mail) {
						$(this).text(replaced);
					}
				});
			},
			labels : function(){
				$('.newsletter label').compactize();
			}
		},
		enhancements : {			
			popups : function(el){			
				
				var options = arguments[1] || {};
				
				var defaults = {
					offsetLeft :0,
					offsetTop : 0,
					height : null
				};
				
				options = $.extend({},defaults,options);
												
				$(el).each(function(){
					var 
						$popup = $($(this).hrefId()),
						isOpened = false;

					//do not run if contact box is not present on the page
					if ($popup.length === 0) {
						return;
					}

					//fetch actual height of the contactbox, then hide it (can't fetch height of a hidden elemenet)
					var 
						boxHeight = options.height ? options.height : parseInt($popup.outerHeight(), 10),
						boxWidth = parseInt($popup.width(), 10);
						
					$popup.hide();
					
					//add label toggling
					$popup.find('p[class!=captcha] label').compactize();					

					var boxOpen = function(el){
						//do not run if there is an already opened popup
						if (isOpened) {
							return;
						}					
						isOpened = true;

						var pos = $(el).offset();
						//reposition the contact box
						$popup.css({
							'top': pos.top - boxHeight + options.offsetTop,
							'left': Math.ceil(pos.left + parseInt($(el).width(),10) / 2 - boxWidth / 2) + options.offsetLeft
						});

						if ($.browser.msie) {
							$popup.show();
						}
						else {
							$popup.fadeIn();
						}
					};

					var boxClose = function(){
						//clear form field values 

						var onBoxHide = function(){
							isOpened = false;
							$popup.css('left','-999em');						
						};

						if ($.browser.msie === false || $.browser.version !== '6.0'){
							//ie6 is flipping out here
							$popup.find('input,textarea').val('').trigger('blur');
						}
						
						if ($.browser.msie) {
							$popup.hide();
							onBoxHide();
						}
						else {
							$popup.fadeOut(onBoxHide);
						}
					};

					//close buttons
					$popup.find('.close').click(function(e){
						e.preventDefault();
						boxClose();
					});		
					
					$(this).click(function(e){
						e.preventDefault();			
						if (isOpened === true) {
							boxClose();
						}			
						else {
							boxOpen(this);	
						}						
					});								
					
				});
			},			
			filter : function(el){											
				
				$(el).each(function(){
					var 
						$select = $(this).hide(),
						$options = $('<ul class="dropdown-a"/>').hide(),
						$control = $('<div class="select-a"><a href="#"/></div>'),
						lookupItems, documentClick;
						

					//click on the "select" control should open the dropdown and close on the next click
					$control.find('a').click(function(e){
						e.preventDefault();
						if ($options.is(':visible')) {
							$(document).unbind('click',documentClick);			
						}
						else {
							$(document).bind('click',documentClick);			
						}
						$options.toggle();
						
						if ($options.is(':visible')) {
							var pos = $control.offset();
							$options.css({
								'top' : pos.top + $control.height() - 2,
								'left': pos.left
							});
						}
						
						$options.find('a.current').trigger('focus');		
					});

					lookupItems = $control.add($options).find('*');
					 documentClick = function(e){
						if (lookupItems.index(e.target) === -1) {
							$(document).unbind('click',documentClick);
							$options.hide();
						}
					};

					//click on the dropdown item should close it and change value
					var optionClick = function(e){
						e.preventDefault();
						$options.hide();
						$(document).unbind('click',documentClick); //cleanup

						$control.find('a').text($(this).text());
						$select.val($(this).data('value'));
					};

					//populate data
					$select.find('option').each(function(){
						var option = $('<a href="#">'+$(this).text()+'</a>');
						option.data('value',$(this).attr('value'));		
						option.click(optionClick);

						var li = $('<li/>');
						li.append(option);
						$options.append(li);		
					});

					//activate first option
					$options.find('a:first').triggerHandler('click');

					//append controls to document
					$select.after($control);

					var pos = $control.offset();
					
					$options.css({
						'top' : pos.top + $control.height() - 2,
						'left': pos.left
					});
					
					var w = $control.width()-25;
					if (w >= 200) {
						$options.css({
							'width' : w
						});					
					}	
										
					$('body').append($options);
					
					if ($.browser.msie && $.browser.version == '6.0') {
						if ($options.height() > 200) {
							$options.css('height',200);
						}
					}					
					
					
					$('label[for='+$select.attr('id')+']').click(function(){
						$control.find('a').trigger('focus');
					});					
				});		
			}
		}
	};

	Engine.utils.links();
	Engine.utils.mails();
	Engine.utils.labels();
	
	Engine.enhancements.popups('#new-features a.about');
	
	
	Engine.enhancements.popups('#fb_greet a.about2',{
		offsetLeft : -200,
		offsetTop : 175
	});
					
	Engine.enhancements.popups('div.listing-header p.sell a',{
		offsetLeft : -50,
		height: 325
	});
	
	Engine.enhancements.filter('#listing-filter-a select, #listing-filter-b select, #listing-box select');
});
