/**
 * jQuery custom selectboxes
 * 
 * Copyright (c) 2008 Krzysztof Suszyński (suszynski.org)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * @version 0.6.1
 * @category visual
 * @package jquery
 * @subpakage ui.selectbox
 * @author Krzysztof Suszyński <k.suszynski@wit.edu.pl>
**/
jQuery.fn.selectbox = function(options){
	
	if( $(".continentSelect option").length ) {
	
	if( $(".continentSelect option").val() == 0)
	{ }
	else {
	

			if( $(".continentSelect option").attr("selected")==false ) {
				$(".continentSelect").prepend('<option value="0">Select Location...</option>'); 
				}
			else {
				$(".continentSelect").prepend('<option value="0" selected="selected">Select Location...</option>');
				$("select.continentSelect").attr('selectedIndex', 0);
	}
		}
	}

	var L = 0;
	/* Default settings */
	var settings = {
		className: 'jquery-selectbox',
		animationSpeed: "normal",
		listboxMaxSize: 10,
		replaceInvisible: false
	};
	
	
	
	var commonClass = 'jquery-custom-selectboxes-replaced';
	var listOpen = false;
	var thisListElement;

	var myItemSize = $(".jquery-custom-selectboxes-replaced-list:eq(0)").find(".jquery-selectbox-item").length;


	    $("."+settings.className+":eq(0)").attr("tabindex", 1);
	    
	    
	    	if( $("#jTextbox").length > 0 ) {
			$("#jTextbox2").val( $("#jTextbox option:eq(0)").val() );	
			            
		}
    
    $("."+settings.className+":eq(0)").keypress(function(e) {
          if ((e.keyCode || e.which) == 40)  {
             L++;
             if(L>myItemSize-1 ) L=myItemSize-1;
             else {
              		$('.item-'+L+":eq(0)").trigger("click");
            $(".jquery-selectbox-list").slideUp(0);
            }
          }
          if ((e.keyCode || e.which) == 38)  {
             L--;
             if(L<0) L=0;
             else {
              	$('.item-'+L+":eq(0)").trigger("click");
            $(".jquery-selectbox-list").slideUp(0);
          }
          }
    });	

	
	var showList = function(listObj) {
		var selectbox = listObj.parents('.' + settings.className + '');
		listObj.slideDown(settings.animationSpeed, function(){
			listOpen = true;
		});
		selectbox.addClass('selecthover');
		jQuery(document).bind('click', onBlurList);
		//listObj.append("<div class='xClose'><a href='javascript:' onclick='hideItDude()'></a></div>");
		
		return listObj;
	}
	var hideList = function(listObj) {
		var selectbox = listObj.parents('.' + settings.className + '');
		
		listObj.slideUp(settings.animationSpeed, function(){
			//$("div.xClose").remove();
			listOpen = false;
			jQuery(this).parents('.' + settings.className + '').removeClass('selecthover');
		});
		jQuery(document).unbind('click', onBlurList);
		return listObj;
	}
	var onBlurList = function(e) {
		var trgt = e.target;
		var currentListElements = jQuery('.' + settings.className + '-list:visible').parent().find('*').andSelf();
		if(jQuery.inArray(trgt, currentListElements)<0 && listOpen) {
			hideList( jQuery('.' + commonClass + '-list') );
		}
		return false;
	}
	
	/* Processing settings */
	settings = jQuery.extend(settings, options || {});
	
	/* Wrapping all passed elements */
	return this.each(function() {
		var _this = jQuery(this);
		if(_this.filter(':visible').length == 0 && !settings.replaceInvisible)
			return;
		var replacement = jQuery(
			'<div class="' + settings.className + ' ' + commonClass + '">' +
				'<div class="' + settings.className + '-moreButton" />' +
				'<div class="' + settings.className + '-list ' + commonClass + '-list" />' +
				'<span class="' + settings.className + '-currentItem" />' +
			'</div>'
		);
		jQuery('option', _this).each(function(k,v){
											  
											  
							var v = jQuery(v);				  
											  
			
			var listElement =  jQuery('<span class="' + settings.className + '-item value-'+v.val()+' item-'+k+'">' + v.text() + '</span>');	
			listElement.click(function(){
			
			if( $("#jTextbox").length > 0 ) {
				$("select#jTextbox").val( $("#jTextbox option:eq("+listElement.index()+")").val() );
				$("#jTextbox2").val( $("#jTextbox option:eq("+listElement.index()+")").val() );    
			}

									   L=k;
				thisListElement = jQuery(this);
				var thisReplacment = thisListElement.parents('.'+settings.className);
				var thisIndex = thisListElement[0].className.split(' ');
				for( k1 in thisIndex ) {
					if(/^item-[0-9]+$/.test(thisIndex[k1])) {
						thisIndex = parseInt(thisIndex[k1].replace('item-',''), 10);
						break;
					}
				};
				if ($('#masterForm').length > 0) {
					var thisValue = thisListElement[0].innerHTML;
				} else {
					var thisValue = thisListElement[0].className.split(' ');
				}
				for( k1 in thisValue ) {
					if(/^value-.+$/.test(thisValue[k1])) {
						thisValue = thisValue[k1].replace('value-','');
						break;
					}
				};
				thisReplacment
					.find('.' + settings.className + '-currentItem')
					.text(thisListElement.text());
				thisReplacment
					.find('select')
					.val(thisValue)
					.triggerHandler('change');
					
				var thisSublist = thisReplacment.find('.' + settings.className + '-list');
				if(thisSublist.filter(":visible").length > 0) {
					hideList( thisSublist );
				}else{
					showList( thisSublist );
				}
			}).bind('mouseenter',function(){
				jQuery(this).addClass('listelementhover');
			}).bind('mouseleave',function(){
				jQuery(this).removeClass('listelementhover');
			});
			jQuery('.' + settings.className + '-list', replacement).append(listElement);
			if(v.filter(':selected').length > 0) {
				jQuery('.'+settings.className + '-currentItem', replacement).text(v.text());
			}
		});
		
			replacement.find('.' + settings.className + '-moreButton').click(function(){
																				  
			
			var thisMoreButton = jQuery(this);
			var otherLists = jQuery('.' + settings.className + '-list')
				.not(thisMoreButton.siblings('.' + settings.className + '-list'));
			hideList( otherLists );
			var thisList = thisMoreButton.siblings('.' + settings.className + '-list');
			if(thisList.filter(":visible").length > 0) {
				hideList( thisList );
			}else{
				showList( thisList );
			}
			
		}).bind('mouseenter',function(){
			jQuery(this).addClass('morebuttonhover');
		}).bind('mouseleave',function(){
			jQuery(this).removeClass('morebuttonhover');
		});
		_this.hide().replaceWith(replacement).appendTo(replacement);
		var thisListBox = replacement.find('.' + settings.className + '-list');
		var thisListBoxSize = thisListBox.find('.' + settings.className + '-item').length;
		if(thisListBoxSize > settings.listboxMaxSize)
			thisListBoxSize = settings.listboxMaxSize;
		if(thisListBoxSize == 0)
			thisListBoxSize = 1;	
		var thisListBoxWidth = Math.round(_this.width() + 5);
		if(jQuery.browser.safari)
			thisListBoxWidth = thisListBoxWidth * 0.94;
		replacement.css('width', thisListBoxWidth + 'px');
		thisListBox.css({
			width: Math.round(thisListBoxWidth-5) + 'px',
			height:  thisListBoxSize*22+'px'
		});
	});
}
jQuery.fn.unselectbox = function(){
	var commonClass = 'jquery-custom-selectboxes-replaced';
	return this.each(function() {
		var selectToRemove = jQuery(this).filter('.' + commonClass);
		selectToRemove.replaceWith(selectToRemove.find('select').show());		
	});
}

function hideItDude() {
		$(".jquery-selectbox-list").slideUp();
		//$("div.xClose").remove();
		//hideList( thisList );
}
