var $j = jQuery.noConflict();

var BrowserDetect = {
	init : function() {
		this.browser = this.searchString(this.dataBrowser)
				|| "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString : function(data) {
		for ( var i = 0; i < data.length; i++) {
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch
					|| data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			} else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion : function(dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1)
			return;
		return parseFloat(dataString.substring(index
				+ this.versionSearchString.length + 1));
	},
	dataBrowser : [ {
		string :navigator.userAgent,
		subString :"Chrome",
		identity :"Chrome"
	}, {
		string :navigator.userAgent,
		subString :"OmniWeb",
		versionSearch :"OmniWeb/",
		identity :"OmniWeb"
	}, {
		string :navigator.vendor,
		subString :"Apple",
		identity :"Safari"
	}, {
		prop :window.opera,
		identity :"Opera"
	}, {
		string :navigator.vendor,
		subString :"iCab",
		identity :"iCab"
	}, {
		string :navigator.vendor,
		subString :"KDE",
		identity :"Konqueror"
	}, {
		string :navigator.userAgent,
		subString :"Firefox",
		identity :"Firefox"
	}, {
		string :navigator.vendor,
		subString :"Camino",
		identity :"Camino"
	}, { // for newer Netscapes (6+)
				string :navigator.userAgent,
				subString :"Netscape",
				identity :"Netscape"
			}, {
				string :navigator.userAgent,
				subString :"MSIE",
				identity :"Explorer",
				versionSearch :"MSIE"
			}, {
				string :navigator.userAgent,
				subString :"Gecko",
				identity :"Mozilla",
				versionSearch :"rv"
			}, { // for older Netscapes (4-)
				string :navigator.userAgent,
				subString :"Mozilla",
				identity :"Netscape",
				versionSearch :"Mozilla"
			} ],
	dataOS : [ {
		string :navigator.platform,
		subString :"Win",
		identity :"Windows"
	}, {
		string :navigator.platform,
		subString :"Mac",
		identity :"Mac"
	}, {
		string :navigator.platform,
		subString :"Linux",
		identity :"Linux"
	} ]

};


/*
 * jQuery selectbox plugin
 *
 * Copyright (c) 2007 Sadri Sahraoui (brainfault.com)
 * Licensed under the GPL license and MIT:
 *   http://www.opensource.org/licenses/GPL-license.php
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * The code is inspired from Autocomplete plugin (http://www.dyve.net/jquery/?autocomplete)
 *
 * Revision: $jId$j
 * Version: 0.6
 * 
 * Changelog :
 *  Version 0.6
 *  - Fix IE scrolling problem
 *  Version 0.5 
 *  - separate css style for current selected element and hover element which solve the highlight issue 
 *  Version 0.4
 *  - Fix width when the select is in a hidden div   @Pawel Maziarz
 *  - Add a unique id for generated li to avoid conflict with other selects and empty values @Pawel Maziarz
 */
jQuery.fn.extend({
	selectbox: function(options) {
		return this.each(function() {
			new jQuery.SelectBox(this, options);
		});
	}
});


/* pawel maziarz: work around for ie logging */
if (!window.console) {
	var console = {
		log: function(msg) { 
	 }
	}
}
/* */

jQuery.SelectBox = function(selectobj, options) {
	
	var opt = options || {};
	opt.inputClass = opt.inputClass || "selectbox";
	opt.containerClass = opt.containerClass || "selectbox-wrapper";
	opt.hoverClass = opt.hoverClass || "current";
	opt.currentClass = opt.selectedClass || "selected"
	opt.debug = opt.debug || false;
	
	var elm_id = selectobj.id;
	var active = 0;
	var inFocus = false;
	var hasfocus = 0;
	//jquery object for select element
	var $jselect = $j(selectobj);
	// jquery container object
	var $jcontainer = setupContainer(opt);
	//jquery input object 
	var $jinput = setupInput(opt);
	// hide select and append newly created elements
	$jselect.hide().before($jinput).before($jcontainer);
	
	
	init();
	
	$jinput
	.click(function(){
    	/*
		if (!inFocus) {
			$jcontainer.toggle(200);
		};
		*/
		$jcontainer.toggle(300);
	})
	.focus(function(){
	   /*
	   if ($jcontainer.not(':visible')) {
	       inFocus = true;
	       $jcontainer.show();
	   }
	   */
	})
	.keydown(function(event) {	   
		switch(event.keyCode) {
			case 38: // up
				event.preventDefault();
				moveSelect(-1);
				break;
			case 40: // down
				event.preventDefault();
				moveSelect(1);
				break;
			//case 9:  // tab 
			case 13: // return
				event.preventDefault(); // seems not working in mac !
				$j('li.'+opt.hoverClass).trigger('click');
				break;
			case 27: //escape
			  hideMe();
			  break;
		}
	})
	.blur(function() {
		if ($jcontainer.is(':visible') && hasfocus > 0 ) {
			if(opt.debug) console.log('container visible and has focus')
		} else {
		  // Workaround for ie scroll - thanks to Bernd Matzner
		  if($j.browser.msie || $j.browser.safari){ // check for safari too - workaround for webkit
        if(document.activeElement.getAttribute('id').indexOf('_container')==-1){
          hideMe();
        } else {
          $jinput.focus();
        }
      } else {
        hideMe();
      }
		}
	});


	function hideMe() { 
		hasfocus = 0;
		$jcontainer.hide(); 
	}
	
	function init() {
		$jcontainer.append(getSelectOptions($jinput.attr('id'))).hide();
		var width = $jinput.css('width');
		$jcontainer.width(width);
    }
	
	function setupContainer(options) {
		var container = document.createElement("div");
		$jcontainer = $j(container);
		$jcontainer.attr('id', elm_id+'_container');
		$jcontainer.addClass(options.containerClass);
		
		return $jcontainer;
	}
	
	function setupInput(options) {
		var input = document.createElement("span");
		var $jinput = $j(input);
		$jinput.attr("id", elm_id+"_input");
		$jinput.attr("type", "text");
		$jinput.addClass(options.inputClass);
		$jinput.attr("autocomplete", "off");
		$jinput.attr("readonly", "readonly");
		$jinput.attr("tabIndex", $jselect.attr("tabindex")); // "I" capital is important for ie
		
		return $jinput;	
	}
	
	function moveSelect(step) {
		var lis = $j("li", $jcontainer);
		if (!lis || lis.length == 0) return false;
		active += step;
    //loop through list
		if (active < 0) {
			active = lis.size();
		} else if (active > lis.size()) {
			active = 0;
		}
    scroll(lis, active);
		lis.removeClass(opt.hoverClass);

		$j(lis[active]).addClass(opt.hoverClass);
	}
	
	function scroll(list, active) {
      var el = $j(list[active]).get(0);
      var list = $jcontainer.get(0);
      
      if (el.offsetTop + el.offsetHeight > list.scrollTop + list.clientHeight) {
        list.scrollTop = el.offsetTop + el.offsetHeight - list.clientHeight;      
      } else if(el.offsetTop < list.scrollTop) {
        list.scrollTop = el.offsetTop;
      }
	}
	
	function setCurrent() {	
		var li = $j("li."+opt.currentClass, $jcontainer).get(0);
		var ar = (''+li.id).split('_');
		var el = ar[ar.length-1];
		$jselect.val(el);
		//$jinput.val($j(li).html());
		$jinput.text($j(li).html());   //added for span
		return true;
	}
	
	// select value
	function getCurrentSelected() {
		return $jselect.val();
	}
	
	// input value
	function getCurrentValue() {
		return $jinput.word();
	}
	
	function getSelectOptions(parentid) {
		var select_options = new Array();
		var ul = document.createElement('ul');
		$jselect.children('option').each(function() {
			var li = document.createElement('li');
			li.setAttribute('id', parentid + '_' + $j(this).val());
			li.innerHTML = $j(this).html();
			if ($j(this).is(':selected')) {
				//$jinput.val($j(this).html());
				$jinput.text($j(this).html());  //added for span
				$j(li).addClass(opt.currentClass);
			}
			ul.appendChild(li);
			$j(li)
			.mouseover(function(event) {
				hasfocus = 1;
				if (opt.debug) console.log('over on : '+this.id);
				jQuery(event.target, $jcontainer).addClass(opt.hoverClass);
			})
			.mouseout(function(event) {
				hasfocus = -1;
				if (opt.debug) console.log('out on : '+this.id);
				jQuery(event.target, $jcontainer).removeClass(opt.hoverClass);
			})
			.click(function(event) {
			  var fl = $j('li.'+opt.hoverClass, $jcontainer).get(0);
				if (opt.debug) console.log('click on :'+this.id);
				$j('li.'+opt.currentClass).removeClass(opt.currentClass); 
				$j(this).addClass(opt.currentClass);
				setCurrent();
				//$jselect.change();
				$jselect.get(0).blur();
				hideMe();
			});
		});
		return ul;
	}
	
};


/**
 * jQuery custom checkboxes
 * 
 * Copyright (c) 2008 Khavilo Dmitry (http://widowmaker.kiev.ua/checkbox/)
 * Licensed under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * @version 1.3.0 Beta 1
 * @author Khavilo Dmitry
 * @mailto wm.morgun@gmail.com
**/

(function($j){
	/* Little trick to remove event bubbling that causes events recursion */
	var CB = function(e)
	{
		if (!e) var e = window.event;
		e.cancelBubble = true;
		if (e.stopPropagation) e.stopPropagation();
	};
	
	$j.fn.checkbox = function(options) {
		/* IE6 background flicker fix */
		try	{ document.execCommand('BackgroundImageCache', false, true);	} catch (e) {}
		
		/* Default settings */
		var settings = {
			cls: 'jquery-checkbox',  /* checkbox  */
			empty: 'fileadmin/templates/reserve.rs/images/empty.png'  /* checkbox  */
		};
		
		/* Processing settings */
		settings = $j.extend(settings, options || {});
		
		/* Adds check/uncheck & disable/enable events */
		var addEvents = function(object)
		{
			var checked = object.checked;
			var disabled = object.disabled;
			var $jobject = $j(object);
			
			if ( object.stateInterval )
				clearInterval(object.stateInterval);
			
			object.stateInterval = setInterval(
				function() 
				{
					if ( object.disabled != disabled )
						$jobject.trigger( (disabled = !!object.disabled) ? 'disable' : 'enable');
					if ( object.checked != checked )
						$jobject.trigger( (checked = !!object.checked) ? 'check' : 'uncheck');
				}, 
				10 /* in miliseconds. Low numbers this can decrease performance on slow computers, high will increase responce time */
			);
			return $jobject;
		};
		//try { console.log(this); } catch(e) {}
		
		/* Wrapping all passed elements */
		return this.each(function() 
		{
			var ch = this; /* Reference to DOM Element*/
			var $jch = addEvents(ch); /* Adds custom events and returns, jQuery enclosed object */
			
			/* Removing wrapper if already applied  */
			if (ch.wrapper) ch.wrapper.remove();
			
			/* Creating wrapper for checkbox and assigning "hover" event */
			ch.wrapper = $j('<span class="' + settings.cls + '"><span class="mark"><img src="' + settings.empty + '" /></span></span>');
			ch.wrapperInner = ch.wrapper.children('span:eq(0)');
			ch.wrapper.hover(
				function(e) { ch.wrapperInner.addClass(settings.cls + '-hover');CB(e); },
				function(e) { ch.wrapperInner.removeClass(settings.cls + '-hover');CB(e); }
			);
			
			/* Wrapping checkbox */
			$jch.css({position: 'absolute', zIndex: -1, visibility: 'hidden'}).after(ch.wrapper);
			
			/* Ttying to find "our" label */
			var label = false;
			if ($jch.attr('id'))
			{
				label = $j('label[for='+$jch.attr('id')+']');
				if (!label.length) label = false;
			}
			if (!label)
			{
				/* Trying to utilize "closest()" from jQuery 1.3+ */
				label = $jch.closest ? $jch.closest('label') : $jch.parents('label:eq(0)');
				if (!label.length) label = false;
			}
			/* Labe found, applying event hanlers */
			if (label)
			{
				label.hover(
					function(e) { ch.wrapper.trigger('mouseover', [e]); },
					function(e) { ch.wrapper.trigger('mouseout', [e]); }
				);
				label.click(function(e) { $jch.trigger('click',[e]); CB(e); return false;});
			}
			ch.wrapper.click(function(e) { $jch.trigger('click',[e]); CB(e); return false;});
			$jch.click(function(e) { CB(e); });
			$jch.bind('disable', function() { ch.wrapperInner.addClass(settings.cls+'-disabled');}).bind('enable', function() { ch.wrapperInner.removeClass(settings.cls+'-disabled');});
			$jch.bind('check', function() { ch.wrapper.addClass(settings.cls+'-checked' );}).bind('uncheck', function() { ch.wrapper.removeClass(settings.cls+'-checked' );});
			
			/* Disable image drag-n-drop for IE */
			$j('img', ch.wrapper).bind('dragstart', function () {return false;}).bind('mousedown', function () {return false;});
			
			/* Firefox antiselection hack */
			if ( window.getSelection )
				ch.wrapper.css('MozUserSelect', 'none');
			
			/* Applying checkbox state */
			if ( ch.checked )
				ch.wrapper.addClass(settings.cls + '-checked');
			if ( ch.disabled )
				ch.wrapperInner.addClass(settings.cls + '-disabled');			
		});
	}
})(jQuery);

BrowserDetect.init();

function closeShader(popup) {
	$j('#shade').stop().fadeTo(1000, 0, function () { $j(this).css("visibility", "hidden"); $j(this).css("height", "1px")});
	$j(popup).stop().slideUp("slow", function () { $j(this).css("visibility", "hidden")});
	currentPopupId="";
}

var currentPopupId = "";

function popup(popupId) {
	position();
	resizeShader();
	
	currentPopupId = popupId;
	/*
	if (BrowserDetect.browser == "Safari" && typeof sIFR == "object" && $j(popupId).find('h1 object').length>0) {
		//&& ($j(popupId).find('h1 object').css('height')=='undefined' || $j(popupId).find('h1').css('height')=='auto')) 
		id = $j(popupId + ' h1 object').attr('id');
		html = $j('#'+id).siblings('.sIFR-alternate:first').html(); 
		$j( popupId + ' h1').removeClass().html(html).css('visibility', 'visible');
	}
	*/
	$j(popupId).stop().slideDown('slow', function() {
		/*
			if (BrowserDetect.browser == "Safari" && typeof sIFR == "object") {
				sIFR.replace(myriadPro, {
					  selector: popupId + ' h1',
					  css: ['.sIFR-root { font-size: 16px; color: #005da1; margin:0px; font-weight:bold; text-align:left; text-transform:uppercase; line-height: 15px;}'
					        ,'a {text-decoration: none; font-size: 16px; color: #005da1; margin:0px; font-weight:bold; text-align:left; text-transform:uppercase; line-height: 15px;}'
					        ,'a:hover {text-decoration: underline; color: #005da1;}'
					        ]
					  ,wmode: 'transparent'
				});	
				for(var i = 0; i < sIFR.replacements.length; i++) { if ($j(popupId + ' h1 object').attr('id')==sIFR.replacements[i].id) sIFR.replacements[i].resetMovie();}
			}
		*/
		}
	);
	
	$j('#shade').stop().fadeTo('slow', 0.5);
	
	$j(popupId).css("visibility", "visible");
	$j('#shade').css("visibility", "visible");
	
}

function MM_showHideLayers() {
	var i, v, obj, args = MM_showHideLayers.arguments;
	for (i = 0; i < (args.length - 2); i += 3)
		if ((obj = document.getElementById(args[i])) != null) {
			v = args[i + 2];
			if (obj.style) {
				obj = obj.style;
				v = (v == 'show') ? 'visible' : (v = 'hide') ? 'hidden' : v;
			}
			obj.visibility = v;
		}
}

function position() {
	var selector = currentPopupId!=""?currentPopupId:"div.popup";
	if(document.documentElement.clientHeight > $j(selector).height() + 40){
		v1 = function () { 
			var selector = currentPopupId!=""?currentPopupId:"div.popup";
			scrollTop = $j(window).scrollTop();
			$j(selector).css("top", scrollTop);
			$j(selector).css("margin-top", 20);
		};
		v1();
		$j(window).scroll( v1 );
	} else {
		scrollTop = $j(window).scrollTop();
		$j(selector).css("top", scrollTop);
		mTop = Math.round((document.documentElement.clientHeight-$j(selector).height())/2);
		$j(selector).css("margin-top", (mTop>0)?mTop:0);
	}
}

function checkSIFR() {
	if (typeof sIFR == 'object') {
		if(jQuery('.sIFR-replaced').length>=sIFR.replacements.length){
			$j('div.popup').slideUp('slow', function() {$j(this).css('top', '0px');});
			$j('#shade').fadeTo(100, 0);
		}else{
			setInterval("checkSIFR()", 100);
		}
	} else {
		$j('div.popup').slideUp(1, function() {$j(this).css('top', '0px');});
		$j('#shade').fadeTo(100, 0);
	}
}

$j(window).resize( function() {
	$j(window).unbind('scroll');
	position();
	
	resizeShader();
});

function resizeShader() {
	h = $j('div.container').height();
	$j('#shade').css("height",h);
}

$j(document).ready( function() {
	
	/*
	 * Logic for popup window
	 */
	if (BrowserDetect.browser == "Firefox") {
		$j('div.popup').css('overflow' , 'hidden');
	}

	h = $j('div.container').height();
	$j('#shade').css("height",h);
	$j('div.shade').after($j('div.popup'));
	$j('div.popup').css("top", "-1000px");
	
		// checks if sifr is loaded and manipulate with popup window
	checkSIFR();
	
		// IE6 hover fix
	if (BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7) {
		var list = $j('li.firstLevel');
		list.each(function (i){
			$j(list[i]).mouseenter(function(){
				$j(list[i]).addClass("hover_state");
			});
			$j(list[i]).mouseleave(function(){
				$j(list[i]).removeClass("hover_state");
			});
		});
	}
	
	/*
	 * Logic for input fields
	 */
	$j('input[type="text"]').focus( function() {
		$j(this).addClass("focusField")

		if (this.value == this.defaultValue) {
			this.value = '';
		}
		if (this.value != this.defaultValue) {
			this.select();
		}
	});
	
	$j('input[type="text"]').blur( function() {
		if (this.value == '') {
			$j(this).removeClass("focusField")
			this.value = this.defaultValue;
		}
	});

	/*
	 *  Logic for radio buttons
	 */
	
	var radioButtons = $j('input:radio[name="ed_reserve[main_category]"]');

	radioButtons.each( function(i) {
		$j(radioButtons[i]).checkbox();
		
		$j(radioButtons[i]).click(function() {
			radioButtons.each( function(j) {
				if (radioButtons[i].id.split("_")[2]==radioButtons[j].id.split("_")[2]) {
						//radio buttons belong to the same plugin
					$j('#list_'+radioButtons[j].id).removeClass();
					if (radioButtons[i].id.split("_")[1]==radioButtons[j].id.split("_")[1]) {
						$j('#list_'+radioButtons[j].id).addClass('visible');
					} else {
						$j('#list_'+radioButtons[j].id).addClass('hidden');
					}
				}
			});

		});
	});
	
	
	/*
	 *  Logic for select boxes
	 */
	
	var selectBoxes = $j('select');
	
	selectBoxes.each( function(i) {
		$j(selectBoxes[i]).selectbox({debug: true});
	});
	
	/*
	 *  Logic for select buttons
	 */
	
	var selectButtons = $j('select[name="ed_reserve[main_category]"]');

	selectButtons.each(function(i) {
		$j(selectButtons[i]).siblings('div.selectbox-wrapper:first').click(function() {
			dropdowns = $j('div.'+selectButtons[i].id);
			dropdowns.each(function(j) {
				if (dropdowns[j].id.split("_")[3]==selectButtons[i].id.split("_")[1]) {
					$j(dropdowns[j]).removeClass('visible').removeClass('hidden');
					if (dropdowns[j].id.split("_")[2]==$j(selectButtons[i]).val()) {
						$j(dropdowns[j]).addClass('visible');
					} else {
						$j(dropdowns[j]).addClass('hidden');
					}
				}						
			});
		});
	});
	

	/*
	 * Logic for main menu second level background 
	 */
	
	var menu_items = $j('div.main_menu > ul > li');
	
	menu_items.each( function(i) {
		
		if ($j(menu_items[i]).find('ul').length > 0) {
			
			$j(menu_items[i]).find('div.menu_effect').height($j(menu_items[i]).find('ul').height()+ 24); //24px for padding + 49px from top of menu
			$j(menu_items[i]).find('div.second_level_background').height($j(menu_items[i]).find('ul').height()+ 24); //24px for padding
			$j(menu_items[i]).find('div.second_level_background_bottom').height($j(menu_items[i]).find('ul').height()-77); //101-24 = 77px (101px - ul background image height, 24px - ul top and bottom padding ) 
			
			if (BrowserDetect.browser != "Explorer" || BrowserDetect.version >= 6) {

				$j(menu_items[i]).data('original_height', $j(menu_items[i]).find('ul').height()+ 24 + 'px');
				$j(menu_items[i]).find('div.menu_effect').hide();
				$j(menu_items[i]).find('div.menu_effect').css({'visibility': 'visible','height': '1px'});
			
				$j(menu_items[i]).hover(function(){
					$j(this).find('div.menu_effect').stop().animate({'height': $j(this).data('original_height')}, 1.5 * parseInt($j(this).data('original_height')));
				}, function(){
					$j(this).find('div.menu_effect').stop();
					$j(this).find('div.menu_effect').css('overflow', 'hidden');
					$j(this).find('div.menu_effect').animate({'height': '0px'}, 0.75 * parseInt($j(this).data('original_height')));
				});
			}
		}
		
	});
		
		//show advanced search form at the end of do ready
	$j('div.advanced_search').removeClass('with_script_hidden');
	$j('div.advanced_search').addClass('with_script_visible');
		
});
