var homePage = {
	languagesTopStatus : false,
	languagesBottomStatus : false,
	
	listsLanguages : new Array(),
	currentHotel : 0,
	nbHotelsMax : 0,
	codeLang : new String(),
	lastHotelsViewed : new Array(),
	imgSlide : new Array(),
	
	init : function(){
		bookingEngine.init();
		if($('booking-countries') && $('booking-cities') && typeof countryCity != 'undefined') advancedBookingEngine._init();
		homePage.highlightMenu();
		
		var _h = document.getElementsByTagName("html")[0];
		homePage.codeLang = _h.attributes["lang"].value;

		
		/* Init Scrolling Lists */
		if($('languages-top')){
			homePage.listsLanguages['languages-top'] = false;
			homePage.listsLanguages['footer-language'] = false;

			homePage.languageScrolling('languages-top', 620, 156, 20);
			homePage.languageScrolling('footer-language', 620, 156, 20);
		
			var listLanguagesTopButton = $('languages-top').down('.lang-selected');
			var listLanguagesTopContainer = $('languages-top').down('.lang-selection-container');
			if(listLanguagesTopContainer)listLanguagesTopContainer.style.display="none";
			
			if(listLanguagesTopButton){
				Event.observe(
					listLanguagesTopButton,
					"click",
					function(){
						if(homePage.listsLanguages['languages-top'] == false) homePage.toggleLanguageList('languages-top', 'down');
					}
				);
			}
			
			var listLanguagesBottomButton = $('footer-language').down('.lang-selected');
			var listLanguagesBottomContainer = $('footer-language').down('.lang-selection-container');
			if(listLanguagesBottomContainer)listLanguagesBottomContainer.style.display="none";
			if(listLanguagesBottomButton){
				Event.observe(
					listLanguagesBottomButton,
					"click",
					function(){
						if(homePage.listsLanguages['footer-language'] == false) homePage.toggleLanguageList('footer-language', 'up');
					}
				);
			}
		}
		
		/* Init Engine Elements */
		homePage.engineTabsManager();
		homePage.fidelityCardComponent();
		
		/* Init Toggle Events */
		var toggleButtons = $('home').select('.toggle');
		if(toggleButtons && toggleButtons.length > 0){
			toggleButtons.each(function(elt){
				if(elt){
					elt.observe('click', function(evt){Event.stop(evt); homePage.toggleManager(elt);});
				}
			});
			
		}
		
		/* Init slideshow hotels and first display */
		if($('overture') && $('loading-layer')&& $('slide-hotels') && typeof homepageSlideShow != 'undefined'){
			homePage.nbHotelsMax = homepageSlideShow.length;
			
			homePage.setNewSlideContent();
			homePage.hotelsSlideManager();
		}
		else{
			if($('legend')) $('legend').hide();
			if($('loading-layer')){
				new Effect.Fade('loading-layer', { 
				  duration: 0.5,
				  from: 1.0, 
				  to: 0.0
			  });
		  }
		}
	},
	
	hotelsSlideManager : function(){
		var nextButton = $('legend').down('.next-hotel').select('a')[0];
		var prevButton = $('legend').down('.prev-hotel').select('a')[0];
		
		if(homePage.nbHotelsMax > 1){
			if(nextButton){
				nextButton.observe('click', function(evt){
					Event.stop(evt);
					//hide OAS block
					if($('oas-block') && $('oas-block').hasClassName('on')){
						new Effect.Move('oas-block', { x: 1005, y: 40, mode: 'absolute' });
						$('oas-block').removeClassName('on');
					}
					
					new Effect.Appear('loading-layer', { 
					  duration: 0.5,
					  from: 0.0, 
					  to: 1.0,
					  afterFinish : function(){			  	
					  	// define next hotel to show
						  if(homePage.currentHotel == homePage.nbHotelsMax-1) homePage.currentHotel = 0;
						  else homePage.currentHotel += 1;
						  homePage.setNewSlideContent();
					  }
				  });
				});
			}
			
			if(prevButton){
				prevButton.observe('click', function(evt){
					Event.stop(evt);
					//hide OAS block
					if($('oas-block') && $('oas-block').hasClassName('on')){
						new Effect.Move('oas-block', { x: 1005, y: 40, mode: 'absolute' });
						$('oas-block').removeClassName('on');
					}
					
					new Effect.Appear('loading-layer', { 
					  duration: 0.5,
					  from: 0.0, 
					  to: 1.0,
					  afterFinish : function(){
					  	// define next hotel to show
						  if(homePage.currentHotel == 0) homePage.currentHotel = homePage.nbHotelsMax-1;
						  else homePage.currentHotel -= 1;
						  homePage.setNewSlideContent();
					  }
				  });
				});
			}
		}
		else{
			nextButton.up().addClassName('empty');
			nextButton.hide();
			prevButton.up().addClassName('empty');
			prevButton.hide();
		}
	},
	
	setNewSlideContent : function(){
		if(homepageSlideShow && homepageSlideShow[homePage.currentHotel]){
			var hotel = homepageSlideShow[homePage.currentHotel];
			if(hotel[0] && hotel[0] != ""){
				// mise en cache des img lors de leur premier appel
				if(!homePage.imgSlide[homePage.currentHotel]){
					homePage.imgSlide[homePage.currentHotel] = new Image();
					homePage.imgSlide[homePage.currentHotel].id = "img-slide-hotel-"+homePage.currentHotel;
					
					// gestion IE6 pr pb de cache : onload non leve si img deja ds cache navigateur -> ajout du timer
					if(navigator.userAgent.search(/MSIE/) != -1){
						var today = new Date();
						homePage.imgSlide[homePage.currentHotel].src="/photos/"+hotel[0]+"_hombhpa_00_p_1000x355.jpg?timer="+today.getTime();
					}
					else{
						homePage.imgSlide[homePage.currentHotel].src="/photos/"+hotel[0]+"_hombhpa_00_p_1000x355.jpg";
					}
					$('slide-hotels').update(homePage.imgSlide[homePage.currentHotel]);
					Event.observe($("img-slide-hotel-"+homePage.currentHotel), "load", function(){
						new Effect.Fade('loading-layer', { 
						  duration: 0.5,
						  from: 1.0, 
						  to: 0.0
						});
					});
				}
				// cas ou l'img a deja ete visualisee
				else{
					$('slide-hotels').update(homePage.imgSlide[homePage.currentHotel]);
					new Effect.Fade('loading-layer', { 
					  duration: 0.5,
					  from: 1.0, 
					  to: 0.0
					});
				}
				
				if($('legend') && hotel[1] && hotel[1] != '' && hotel[0] && hotel[0] != ''){
					var hotelLink = $('legend').down('.name-hotel').select('a')[0];
					if(hotelLink){
						$('legend').down('.name-hotel').removeClassName('bigger')
						hotelLink.update(hotel[1]);
						hotelLink.href="/frm_fiche_hotel.svlt?code_langue="+homePage.codeLang+"&code_hotel="+hotel[0];
						if(hotel[1].length > 27){
							$('legend').down('.name-hotel').addClassName('bigger');
						}
					}
				}
			}
		}
		else{
			new Effect.Fade('loading-layer', { 
			  duration: 0.5,
			  from: 1.0, 
			  to: 0.0
		  });
		}
	},
	
	highlightMenu : function(){
		if($('highlight-items')){
			var items = $('highlight-items').select('li');
			if(items && items.length > 0){
				items.each(function(item){
					Event.observe(item, 'mouseover', function(){
						if(!item.hasClassName('over') && !item.hasClassName('current')) item.addClassName('over');
					});
					
					Event.observe(item, 'mouseout', function(){
						if(item.hasClassName('over') && !item.hasClassName('current')) item.removeClassName('over');
					});
				});
			}
			
			var itemsLinks = $('highlight-items').select('a');
			if(itemsLinks && itemsLinks.length > 0){
				itemsLinks.each(function(itemLink){
					Event.observe(itemLink, 'click', function(e){
						Event.stop(e);
						var itemParent = itemLink.up('li');
						if(!itemParent.hasClassName('current')) homePage.highlightChangeContent(itemParent, itemLink);
					});
				});
			}
		}
	},
	
	highlightChangeContent : function(li, a){
		var itemParam = a.className;
		if(itemParam != "" && $(itemParam)){
			var newContent = $(itemParam).innerHTML;
			if($('highlight-container')){
				new Effect.Appear('highlight-mask', { 
				  duration: 0.5,
				  from: 0.0, 
				  to: 1.0,
				  afterFinish: function(){
				  	homePage.hightlightClearMenu();
						li.addClassName('current');
				  	$('highlight-container').update(newContent);
				  	new Effect.Fade('highlight-mask', { 
						  duration: 0.5,
						  from: 1.0, 
						  to: 0.0
					  });
				  }
				});
			}
		}
	},
	
	hightlightClearMenu : function(){
		var items = $('highlight-items').select('li');
		if(items && items.length > 0){
			items.each(function(item){
				if(item.hasClassName('over')) item.removeClassName('over');
				if(item.hasClassName('current')) item.removeClassName('current');
			});
		}
	},


	languageScrolling : function(listID, maxElementToScrollPosition, maxSliderPosition, scrollBySize){
		//alert('ici');
		var scrollbar = $(listID).down('.scrollbar');
		var elementToScroll = $(listID).down('dl');
		var container = $(listID).down('.lang-selection-container');
		var scroll_slider = scrollbar.down('.main-scroll');
		var slider_button = scrollbar.down('.button');
		var down_button = scrollbar.down('.bottom-arrow');
		var up_button = scrollbar.down('.top-arrow');

    homePage.writeCurrentLanguage(listID);
    
    var homeSlider = new Control.Slider(slider_button, scroll_slider, {
    	axis : 'vertical',
      range: $R(0, maxElementToScrollPosition),
      sliderValue: 0,
      onSlide: function(value) {
        elementToScroll.setStyle({ top: value*(-1) + 'px' });
      },
      onChange: function(value) { 
        elementToScroll.setStyle({ top: value*(-1) + 'px' });
      }
    });
    
    if(down_button && slider_button){
    	Element.observe(
    		down_button,
    		'click',
    		function(evt){
    			Event.stop(evt);
    			homeSlider.setValueBy(scrollBySize);
    		}
    	);
    }
    
    if(up_button && slider_button){
    	Element.observe(
    		up_button,
    		'click',
    		function(evt){
    			Event.stop(evt);
    			homeSlider.setValueBy(-scrollBySize);
    		}
    	);
    }
		
		if(container){
			// FF
			Event.observe(container, 'DOMMouseScroll', function(evt){Event.stop(evt); homePage.mousewheelScroll(evt, homeSlider);});
			
			// IE/Opera
			Event.observe(container, 'mousewheel', function(evt){Event.stop(evt); homePage.mousewheelScroll(evt, homeSlider);});
		}
  },
  
  mousewheelScroll : function(evt, sliderObj){
  	var delta = 0;
		if (!evt) evt = window.event;
		/* IE/Opera */
		if (evt.wheelDelta) {
			delta = evt.wheelDelta/8;
			if (evt.opera) delta = -delta;
		} 
		/* FF case */
		else if (evt.detail) {
			delta = -evt.detail*7;
		}

		if (delta) sliderObj.setValueBy(-delta);
  },
  
  writeCurrentLanguage : function(list){
  	if($(list)){
  		var spanElt = $(list).down('.lang-selected').down('span');
			
			var langZoneExp = /\/([a-z]{2})\/([a-z\-]+)\/index\.shtml/;
			langZoneExp.exec(document.location);
			var zone = RegExp.$2;
			var currentLang = RegExp.$1;
			
			var spanLang = $(list).select('.'+zone);
			var sLang = "";
			spanLang.each(function(elt){
				if(elt.hasClassName(currentLang)){
					sLang = elt.innerHTML;
				}
			});
			
			if(sLang != ""){
				spanElt.addClassName(zone);
				spanElt.update(sLang);
			}
  	}
  },
  
  toggleLanguageList : function(listID, direction){
  	if($(listID)){
  		var list = $(listID).down('.lang-selection');
  		var container = $(listID).down('.lang-selection-container');
  		var posY = 0;
  	}
  	
  	if(list && container){
  		switch(homePage.listsLanguages[listID]){
  			case false : 
  				if(direction == 'down') posY = 0;
  				else if(direction == 'up') posY = 0;
  				container.style.display="block";
  				new Effect.Move(list, { 
  					x: 0, 
  					y: posY, 
  					mode: 'absolute', 
  					duration:0.8,
  					afterFinish: function(container){
  						document.observe(
								'click',
								function(evt){
									var el = evt.target || evt.srcElement;;
									for (; el != null && el != container.element; el = el.parentNode);
									if (el == null) {
										homePage.toggleLanguageList(listID, direction);
									}
								}
							);	
  					}
  				});
  				homePage.listsLanguages[listID] = true;
  			break;
  			
  			case true : 
  				if(direction == 'up') posY = container.getHeight();
  				else if(direction == 'down') posY = (-1)*container.getHeight();
  				new Effect.Move(list, { 
  					x: 0, 
  					y: posY,
  					mode: 'absolute', 
  					afterFinish:function(){		  						
  						container.style.display="none";
  						document.stopObserving('click');
  					}, 
  					duration:0.8
  				});
  				homePage.listsLanguages[listID] = false;
  			break;
  			
  			default:
  			break;
  			
  			
  		}
  	}
  },
  
  engineTabsManager : function(){
  	if($('engine-menu')){
  		var tabs = $('engine-menu').select('a');
  		if(tabs && tabs.length > 0){
  			tabs.each(function(tab){
  				Event.observe(
  					tab,
  					'click',
  					function(evt){
  						if(tab.id != "map-tab"){
  							Event.stop(evt);
  							for(var i=0; i< tabs.length; i++){
  								tabs[i].removeClassName('on');
  								if($('engine-'+tabs[i].id))	$('engine-'+tabs[i].id).style.display="none";
  							}
  							tab.addClassName('on');
  							if($('engine-'+tab.id)) $('engine-'+tab.id).style.display="block";
  						}
  					}
  				);
  			});
  		}
  	}
  },
	
	// To emulate existing behaviour, so we don't have to modify the script for now
	fidelityCardComponent : function(){
		if($('type_carte_fidelite') && $('num_carte_fidelite') && $('porteur_carte')){
			$('type_carte_fidelite').observe(
				'blur',
				function(){					
					if($('type_carte_fidelite').value != ''){
						$('porteur_carte').value = 'ON';
						$('porteur_carte').checked = true;
					}
					
					if($('type_carte_fidelite').value == '' && $('num_carte_fidelite').value == getElementByIdIfExists(id_inputCardNber).defaultValue){
						$('porteur_carte').value = '';
						$('porteur_carte').checked = false;
					}
				}
			);
			
			$('num_carte_fidelite').observe(
				'blur',
				function(){					
					if($('num_carte_fidelite').value != '' && $('num_carte_fidelite').value != getElementByIdIfExists(id_inputCardNber).defaultValue ){
						$('porteur_carte').value = 'ON';
						$('porteur_carte').checked = true;
					}
					
					if($('type_carte_fidelite').value == '' && ($('num_carte_fidelite').value == '' || $('num_carte_fidelite').value == getElementByIdIfExists(id_inputCardNber).defaultValue)){
						$('porteur_carte').value = '';
						$('porteur_carte').checked = false;
					}
				}
			);
		}
	},
	
	toggleManager : function(toggleButton){
		if(toggleButton){
			var eltToToggle = toggleButton.next('.content');
			if(eltToToggle){
				eltToToggle.toggle();
				if(toggleButton.hasClassName('on')) toggleButton.removeClassName('on');
				else toggleButton.addClassName('on');
			}
		}
	},
	
	getCookie : function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},
	
	getCookieContent : function(name){
		var cookieContent = homePage.getCookie(name);
		if(cookieContent && cookieContent != ''){
			cookieContent = decodeURIComponent(cookieContent);
			homePage.lastHotelsViewed = cookieContent.split('|');
		}
	},
	
	// when user is not logged in but recognized with the cookie, writes the lastest hotels viewed
	writeHotelsFromCookie : function(listContainer, startBg){
		if(homePage.lastHotelsViewed.length > 0){
			var lastHotelsTmp = new Template(decodeURIComponent(listContainer.innerHTML));
			if(listContainer) listContainer.update();
			homePage.lastHotelsViewed.each(function(elt){
				if(elt && elt != ''){
					var hotelDatas = elt.split(':');
					if(hotelDatas && hotelDatas.length > 0){
						var jHotelDatas = {'hotelRid' : hotelDatas[0], 'hotelName' : hotelDatas[1], 'codeLang' : homePage.codeLang};
						var previousContent = listContainer.innerHTML;
						if(listContainer) listContainer.update(previousContent + lastHotelsTmp.evaluate(jHotelDatas));
					}
				}
			});
		
			listContainer.getElementsBySelector('li').each(function(item,index) {
				if(index % 2 == startBg) item.addClassName('has-background');
			});
		}
	},
	
	

	// Check if user is logged in or not and display the appropriate blocks
	rewriteProfileContent : function(favoriteDestinationsViewBean, favoriteHotelsViewBean, profileViewBean){
		homePage.getCookieContent('histo');

		if(typeof profileViewBean != 'undefined' && $('logged-container')){ // if user is logged in
			
			if(homePage.lastHotelsViewed.length > 0){ // if histo cookie has some content
				
				homePage.writeProfileLastHotelsViewed();
				
				$('logged-last-hotels').removeClassName('hidden');
				$('logged-container').removeClassName('hidden');
			}
			
			// Display favorite hotels
			var favHotels = favoriteHotelsViewBean.favoriteHotels;

			if(favHotels && favHotels.length > 0){ // if user has favorite hotels
				
				homePage.writeFavoriteHotelsContent(favHotels);
				
				$('logged-fav-hotels').removeClassName('hidden');
				$('logged-container').removeClassName('hidden');
			}
			else{
				var favDest = favoriteDestinationsViewBean.destinations;
				if(favDest && favDest.length > 0){ // if user has favorites destinations
					
					homePage.writeFavoriteDestinationsContent(favDest);
					
					$('logged-fav-dest').removeClassName('hidden');
					$('logged-container').removeClassName('hidden');
				}
			}
			
			if($('myah-top') && $('myah')){
				$('myah-top').hide();
				$('myah').hide();
			}
		}
		else if($('logged-container') && $('last-hotels')){ // user not logged in : show generic last hotels viewed
			$('logged-container').hide();
			if(homePage.lastHotelsViewed.length > 0){
				homePage.writeHotelsFromCookie($('last-hotels').down('ul'), 0);
				$('last-hotels-container').show();
				if($('daily-video').down('.content') && $('daily-video').down('.content').style.display != 'none' && homePage.lastHotelsViewed.length > 2)	fireEvent($('daily-video').down('.toggle'), 'click');
			}
			
			if($('myah-top') && $('myah')){
				$('myah-top').show();
				$('myah').show();
			}
		}
	},
	
	
	/******
	* Context : user logged in
	* Action  : write the last hotels that the user has viewed on the website
	******/
	writeProfileLastHotelsViewed : function(){
		if($('single-last-hotels')){
			var singleHotelsTmp = new Template(decodeURIComponent($('single-last-hotels').innerHTML));
			$('single-last-hotels').update();

			if(homePage.lastHotelsViewed[0] && homePage.lastHotelsViewed[0] != ''){
				var hotelDatas = homePage.lastHotelsViewed[0].split(':');
				if(hotelDatas && hotelDatas.length > 0){
					var jHotelDatas = {'hotelRid' : hotelDatas[0], 'hotelName' : hotelDatas[1], 'codeLang' : homePage.codeLang};
					$('single-last-hotels').update(singleHotelsTmp.evaluate(jHotelDatas));
				}
			}
		}
		
		if($('all-last-hotels')){
			homePage.writeHotelsFromCookie($('all-last-hotels'), 1);
			if($('daily-video').down('.content') && $('daily-video').down('.content').style.display != 'none')	fireEvent($('daily-video').down('.toggle'), 'click');
		}
		
		if($('title-logged-last-hotels')){
			Event.observe(
				$('title-logged-last-hotels'),
				'click',
				function(evt){
					if($('single-last-hotels') && !$('single-last-hotels').hasClassName('hidden')){
						$('single-last-hotels').addClassName('hidden');
					}
					else{
						$('single-last-hotels').removeClassName('hidden');
					}
				}
			);
		}
	},
	
	/******
	* Context : user logged in and has declared at least one favorite hotel
	* Action  : write the favorite hotels
	******/
	writeFavoriteHotelsContent : function(favHotels){
		if($('single-fav-hotels')){
			var singleHotelsTmp = new Template(decodeURIComponent($('single-fav-hotels').innerHTML));
			$('single-fav-hotels').update();

			if(favHotels[0] && favHotels[0] != ''){
					var jHotelDatas = {'hotelRid' : favHotels[0].code, 'hotelName' : favHotels[0].name, 'codeLang' : homePage.codeLang};
					$('single-fav-hotels').update(singleHotelsTmp.evaluate(jHotelDatas));
			}
		}
		
		if($('all-fav-hotels')){
			var favHotelsTmp = new Template(decodeURIComponent($('all-fav-hotels').innerHTML));
			$('all-fav-hotels').update();

			favHotels.each(function(elt){
				if(elt && elt != ''){
					var jHotelDatas = {'hotelRid' : elt.code, 'hotelName' : elt.name, 'codeLang' : homePage.codeLang};
					var previousContent = $('all-fav-hotels').innerHTML;
					$('all-fav-hotels').update(previousContent + favHotelsTmp.evaluate(jHotelDatas));
				}
			});
			
			$('all-fav-hotels').getElementsBySelector('li').each(function(item,index) {
				if(index % 2 == 1) item.addClassName('has-background');
			});
		}
		
		
		if($('title-logged-fav-hotels')){
			Event.observe(
				$('title-logged-fav-hotels'),
				'click',
				function(evt){
					if($('single-fav-hotels') && !$('single-fav-hotels').hasClassName('hidden')){
						$('single-fav-hotels').addClassName('hidden');
					}
					else{
						$('single-fav-hotels').removeClassName('hidden');
					}
				}
			);
		}
		
		if($('daily-video').down('.content') && $('daily-video').down('.content').style.display != 'none'){
			fireEvent($('daily-video').down('.toggle'), 'click');
		}
	},
	
	/******
	* Context : user logged in, doesn't have any favorite hotels and has declared at least one favorite destination
	* Action  : write the favorite destinations given in the profile
	******/
	writeFavoriteDestinationsContent : function(favDest){
		if($('single-fav-dest')){
			var singleDestTmp = new Template(decodeURIComponent($('single-fav-dest').innerHTML));
			$('single-fav-dest').update();

			if(favDest[0] && favDest[0] != ''){
					var jHotelDatas = {'destination' : favDest[0].destination, 'geoCode' : favDest[0].geoCode, 'geoType' : favDest[0].geoType, 'codeLang' : homePage.codeLang};
					$('single-fav-dest').update(singleDestTmp.evaluate(jHotelDatas));
			}
		}
		
		if($('all-fav-dest')){
			var favDestTmp = new Template(decodeURIComponent($('all-fav-dest').innerHTML));
			$('all-fav-dest').update();

			favDest.each(function(elt){
				if(elt && elt != ''){
					var jHotelDatas = {'destination' : elt.destination, 'geoCode' : elt.geoCode, 'geoType' : elt.geoType, 'codeLang' : homePage.codeLang};
					var previousContent = $('all-fav-dest').innerHTML;
					$('all-fav-dest').update(previousContent + favDestTmp.evaluate(jHotelDatas));
				}
			});
			
			$('all-fav-dest').getElementsBySelector('li').each(function(item,index) {
				if(index % 2 == 1) item.addClassName('has-background');
			});
		}
		
		
		if($('title-logged-fav-dest')){
			Event.observe(
				$('title-logged-fav-dest'),
				'click',
				function(evt){
					if($('single-fav-dest') && !$('single-fav-dest').hasClassName('hidden')){
						$('single-fav-dest').addClassName('hidden');
					}
					else{
						$('single-fav-dest').removeClassName('hidden');
					}
				}
			);
		}
		
		if($('daily-video').down('.content') && $('daily-video').down('.content').style.display != 'none'){
			fireEvent($('daily-video').down('.toggle'), 'click');
		}
	}

}

if(Prototype.Browser.IE) Event.observe(window, 'load', homePage.init);
else document.observe('dom:loaded', homePage.init);

//Declanche un evenement
function fireEvent(element,event){
  if (document.createEventObject){
      // dispatch for IE
      var evt = document.createEventObject();
      element.fireEvent('on'+event,evt)
  }
  else{
      // dispatch for firefox + others
      var evt = document.createEvent("HTMLEvents");
      evt.initEvent(event, true, true ); // event type,bubbling,cancelable
       !element.dispatchEvent(evt);
  }
}