RolexYoungLaureates = function() {

	// Private Variables
	var _modal_id				= 'modal';
	var _overlay_id				= 'modal_overlay';	
		
	var _overlay_html		 	= '<div id="'+_overlay_id+'" style="display: none;"><div id="'+_overlay_id+'_inner"> </div></div>'
	var _modal_html		 		= '<div id="'+_modal_id+'" style="display: none;">'
									+ '<div class="modal_content"></div>'
								+ '</div>';
	
	var _presskit_html 			= '<div id="download_modal">'
								+ '<a href="#" onClick="RLX.hideModal(); return false;" class="close"> </a>'
								+ '<div class="instructions">Please enter your information to receive a media press kit.</div>'
								+ '<form name="downloadform" id="downloadform" action="/SERVICE/downloadPressKit" method="post" class="tndr_form">'
								+ '<fieldset class="multi-item-fieldset"><input type="text" name="first-name" id="first-name" maxlength="60" value="FIRST NAME" class="text required default" /></fieldset>'
								+ '<fieldset><input type="text" name="email-address" id="email-address" maxlength="50" value="EMAIL ADDRESS" class="text required default email" /></fieldset>'
								+ '<fieldset><input type="text" name="publication" id="publication" maxlength="50" value="PUBLICATION" class="text required default" /></fieldset>'
								+ '<fieldset><input type="text" name="country" id="country" maxlength="50" value="COUNTRY" class="text required default" /></fieldset>'
								+ '<fieldset id="personal-title-fieldset">'
								+ '<select name="lang" id="lang" class="required">'
								+ '<option class="first" value="">Select Language</option>'
								+ '<option value="English">English</option>'
								//+ '<option value="French">French</option>'
								//+ '<option value="German">German</option>'
								//+ '<option value="Spanish">Spanish</option>'
								+ '</select>'
								+ '</fieldset>'
								+ '<fieldset><input type="image" src="/assets/img/submitbutton_light.png" width="70"  height="28" border="0" alt="submit!" /></fieldset>'
								+ '</form>'
								+ '<script language="javascript">RLX.form.init("downloadform");</script>'
								+ '</div>';

	var _download_html 			= '<div id="download_modal">'
								+ '<a href="#" onClick="RLX.hideModal(); return false;" class="close"> </a>'
								+ '<div class="instructions">Please enter your information to download this file.</div>'
								+ '<form name="downloadform" id="downloadform" action="/SERVICE/downloadFile" method="post" class="tndr_form">'
								+ '<fieldset class="multi-item-fieldset"><input type="text" name="first-name" id="first-name" maxlength="60" value="FIRST NAME" class="text required default" /></fieldset>'
								+ '<fieldset><input type="text" name="email-address" id="email-address" maxlength="50" value="EMAIL ADDRESS" class="text required default email" /></fieldset>'
								+ '<fieldset><input type="text" name="publication" id="publication" maxlength="50" value="PUBLICATION" class="text required default" /></fieldset>'
								+ '<fieldset><input type="text" name="country" id="country" maxlength="50" value="COUNTRY" class="text required default" /></fieldset>'
								+ '<fieldset><a href="#" onClick="RLX.downloadFileSubmit(); return false;"><img src="/assets/img/submitbutton_light.png" width="70"  height="28" border="0" alt="submit!" /></a></fieldset>'
								+ '<input type="hidden" name="file" value="%%FILE%%" />'
								+ '</form>'
								+ '<script language="javascript">RLX.form.init("downloadform");</script>'
								+ '</div>';

	// Private Functions


	
	// Public Functions

	this.form = {	
			
		init: function(f) {
		
			f = $(f);

			// Add form click observer
			f.observe('click', this._onFormClick.bind(this));					

			// Add form submit observer
			f.observe('submit', function(e) {
				if (!this.validateSubmit(Event.element(e))) e.stop();
			}.bind(this));					

			// Initialize all text fields
			f.select('INPUT[type="text"]').each(function(input){
			
				// Default Value
				if (input.hasClassName('default')) {
				
					input.setAttribute('default', $F(input));
				
					input.observe('focus', function(event){
						var i = event.findElement('INPUT');
						if ($F(i) != i.getAttribute('default')) return;
						i.value = '';
					});
				
					input.observe('blur', function(event){
						var i = event.findElement('INPUT');
						if ($F(i) != '') return;
						i.value = i.getAttribute('default');
					});
				
				}
						
			}.bind(this));

			// Initialize all selects
			f.select('SELECT').each(function(input){			
				this.select.applyStyle(input);
			}.bind(this));

		}
		
		, _onFormClick : function(evnt) {
			
			var elem = Event.element(evnt);

			 if (elem.hasClassName('form_select_option')) {
				evnt.stopPropagation();
				this.select.onOptionClick(elem);
			} else if (elem.hasClassName('form_select')) {
				evnt.stopPropagation();
				this.select.onClick(elem);
			} else if ((dd = elem.up('DIV.form_select'))) {
				evnt.stopPropagation();
				this.select.onClick(dd);
			}
		
		}

			

		, select : {

			applyStyle: function(item) {		
			
					var item 					= $(item);					
					var options_html 			= '';
					var _input_select_option 	= new Template('<li option_value="#{value}" class="form_select_option">#{name}</li>');
					var _input_select 			= new Template('<div class="form_select #{class_string}">'	
													 + '<div class="display">#{display}</div>'
													 + '<input type="hidden" name="#{name}" value="#{value}" #{input_extra} />'
													 + '<div class="options" style="display: none;"><div class="options_inner"><ul>#{options}</ul></div></div>'
													 + '</div>');
					
					$A(item.options).each(function(opt) {
						if (!$(opt).hasClassName('first')) options_html += _input_select_option.evaluate({name: opt.text, value: opt.value});
					});

					// Extra stuff to add if this is a toggle_hide items
					var input_extra = '';
					if (item.hasClassName('required')) {
						input_extra += 'class="required"';
					}

					var template_options = {
						value 			: item.value
						, name			: item.name
						, options		: options_html
						, display		: item.options[item.selectedIndex].innerHTML || item.value
						, input_extra	: input_extra
					};
					item.replace(_input_select.evaluate(template_options));		
		
				
			}
			
			, onClick: function(elem, type) {
	
				// Make sure that all other dropdowns are closed first			
				$$('.form_select.open').invoke('removeClassName','open');
	
				elem.down('.options').toggle();
				elem.toggleClassName('open');
	
				elem.observe('mouseout', function(e) {
				
					if (!e.relatedTarget || !e.relatedTarget.up('.form_select')) {
						
						var sel = e.findElement('.form_select');
						
						sel.removeClassName('open');
						sel.down('.options').hide();
						
						e.stopObserving;
					}
				
				}.bind(this));
	
			}
	
			, onOptionClick: function(opt) {
				
				var val = opt.getAttribute('option_value');			
				var sel = opt.up('.form_select');
	
				sel.down('INPUT[type=hidden]').value = val;
				sel.down('.display').update(opt.innerHTML);
				sel.down('.options').hide();
				
			}
		
		} // End select
		
		, validateSubmit: function(f) {		
		
				if (!(f	= $(f))) {
					alert('Could not find form "'+f+'"');
					return false;
				}			
				
				var ok	= true;
			
				// Clear any current errors
				f.select('DIV.error').invoke('update', '');		
				
				// Check for required elements
				f.select('.required').each(function(i) {
					
					var val	= $F(i) ? $F(i).strip() : '';
					
					// Clear default value
					if (i.hasClassName('default') && (val == i.getAttribute('default'))) {
						val = '';
					}

					if (!val.length) {
						
						ok = false;
						var fs = i.up('FIELDSET');
						
						if (!(ef = fs.down('.error'))) {
							fs.insert({top: '<div class="error">REQUIRED</div>'});
						} else {
							ef.update('REQUIRED');							
						}
					
					}
				
				});	

				// Check for required elements
				f.select('.email').each(function(i) {
					
					var val				= $F(i) ? $F(i).strip() : '';
					var _pattern_email 	= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

					if (!_pattern_email.test(val)) {
						
						ok = false;
						var fs = i.up('FIELDSET');
						
						if (!(ef = fs.down('.error'))) {
							fs.insert({top: '<div class="error">INVALID</div>'});
						} else {
							ef.update('INVALID');
						}
					
					}
				
				});	
		
				
				return ok;
				
		}


	};

		
	this.hideModal = function() {

			// Effect.Fade(_modal_id, { duration: 0.4});
			// Effect.Fade(_overlay_id, { duration: 0.6});

			// jQuery replacement:
			$('#'+_modal_id).fadeOut();
			$('#'+_overlay_id).fadeOut();

			//$(_modal_id).down('.modal_content').update('');

	};

	this.showModal = function(content) {
				
			// Add modal html if it's not alreaty there
			//if (!(modal = $(_modal_id))) $$('BODY').invoke('insert', {bottom: _modal_html});			
			//if (!(overlay = $(_overlay_id))) $$('BODY').invoke('insert', {bottom: _overlay_html});			


			// if (!(modal = $(_modal_id))) $('layout').insert({top: _modal_html});
			// if (!(overlay = $(_overlay_id))) $('layout').insert({top: _overlay_html});
			
			// jQuery replacement:
			$('#layout').append(_modal_html);
			$('#layout').append(_overlay_html);
			
			
			// var content_height 	= parseInt($('content').getStyle('height'));
			// var view_height		= document.viewport.getDimensions().height;
			// var overlay_height	= ((content_height > view_height) ? content_height : view_height) + 'px';
			
			// $(_overlay_id).setStyle({height: overlay_height});

			
			// jQuery replacement:
			var content_height 	= parseInt($('#content').height());
			var view_height		= $(window).height(); 
			var overlay_height	= ((content_height > view_height) ? content_height : view_height) + 'px';		
			
			$('#'+_overlay_id).css('height', overlay_height);


			// Activate event listeners for closing modal
			//document.observe('keydown', function(e) {
			//	if (e.keyCode != Event.KEY_RETURN && e.keyCode != Event.KEY_ESC) {
			//		return;
			//	}
			//	RLX.hideModal();
			//});

			
			// jQuery replacement:
			$(document).keypress(function(e) {
				if (e.keyCode == '13' || e.keyCode == '27') {
					RLX.hideModal();
				}
			});

			// $(_modal_id).down('.modal_content').update(content);
			
			// jQuery replacement:
			$('.modal_content').html(content);


			// Effect.Appear(_modal_id, { duration: 0.4});
			// Effect.Appear(_overlay_id, { duration: 0.6});

			// jQuery replacement:
			$('#'+_modal_id).fadeIn();
			$('#'+_overlay_id).fadeIn();


			// $(_overlay_id).observe('click', function(e) {RLX.hideModal();});	

	};
	
	this.openPresskitDownload = function() {
			this.showModal(_presskit_html);
	};


	this.downloadFile = function(file) {	
			var dlc = readCookie('rlxdownload');
			if (dlc == null) {
				this.showModal(_download_html.replace("%%FILE%%", file));
				return false;
			} else {
				return true;			
			}
	};
	this.downloadFileSubmit = function(file) {
		if (this.form.validateSubmit('downloadform')) {		
			createCookie('rlxdownload', 1, 10);
			$('downloadform').submit();
			RLX.hideModal();
		}	
	};

	this.openMediaPlayer = function(gallery) {
		
			this.showModal('<div id="media_modal"><div id="media_modal_swf"> </div></div>');

			var flashvars 	= {conf_uri: '/xml/config.xml', mediaXML:gallery};
			//var attributes 	= {id: "flash_embed", name: "flash_embed_swf"};
			var attributes 	= {id: "media_modal", name: "media_modal_swf"};
			var params 		= { wmode:"transparent", bgcolor: "#000000", menu: "true", quality: "high", scale: "noScale", allowScriptAccess: "always", swLiveConnect: "true", allowFullScreen: "false" };
			//swfobject_utils.createFullBrowserFlash('flash_embed');
			swfobject.embedSWF("/assets/swf/media_manager.swf", "media_modal_swf", "865", "700", "9.0.115","assets/playerProductInstall.swf", flashvars, params, attributes);

		
	};
	

	
	
	this.showMeetVideo = function(id) {
			$('.videodesc').hide();	
			$('#videodesc_'+id).show();
	};
	
	
	this.showMediaModal = function(id) {

			var scroll_height	= 0;
			var code 			= $('press_'+id).innerHTML;
			var element 		= $('press_'+id);
			do {
			  scroll_height 	+= element.scrollTop  || 0;
			  element 			= element.parentNode;
			} while (element);
			
			this.showModal(code);

			$(_modal_id).setStyle({paddingTop: (scroll_height + 80) + 'px'});				
			
	};
	
	this.hideMediaModal = function () {
			this.hideModal();
	};

	this.showMediaDetailsEmbed = function(id) {
			$('press_'+id).down('.code').show();
			$('press_'+id).down('.image').hide();		
	};
	
	

		
};


RLX = new RolexYoungLaureates();


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(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;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}





