var WQ = function(){
	this.history = new Array();
	this.loaded = new Array();
        this.loadcount = 0;
	this.active_page = -1;
	this.at_landing = true;
	this.top_level_sections = ['home', 'who-we-are', 'what-we-do', 'join-the-team', 'announcements', 'terms-conditions', 'site-map', 'our-locations', 'contact-us', ];
};
WQ.prototype = {
	init:function(){
		this.trap_clicks();
	},
	trap_clicks:function(){
		var navigation_links = YAHOO.util.Dom.get('navigation').getElementsByTagName('a');
		var footer_links = YAHOO.util.Dom.get('footer-navigation').getElementsByTagName('a');
		this.rebind();
		
		for(var i=0; i<navigation_links.length; i++){
			if(i==0) {
				YAHOO.util.Event.addListener(navigation_links[i], 'click', function(e, obj) {
					YAHOO.util.Event.stopEvent(e);
					obj.page_event = true;
					location.hash = 'home'
				}, this);
			} else {
				YAHOO.util.Event.addListener(navigation_links[i], 'click', function(e, args){
					YAHOO.util.Event.stopEvent(e);
					args[0].page_event = true;
					if(window.fading === undefined || fading == 1)
					{
					  if(window.timer)
					  {
					    clearTimeout(timer);
					  }
					  fading = 0;
					}
					var href = this.href.replace(/^(http:\/\/[^\/]+\/)/, '');
					location.hash = href;					
				}, [this, i]);
			}
		}
		for(var i=0; i<footer_links.length; i++){
			YAHOO.util.Event.addListener(footer_links[i], 'click', function(e, args){
				YAHOO.util.Event.stopEvent(e);
				args[0].page_event = true;
				var href = this.href.replace(/^(http:\/\/[^\/]+\/)/, '');
				location.hash = href;
			}, [this, i]);
		}
		this.navigation_links = navigation_links;
		YAHOO.util.Event.addListener('go-home', 'click', function(e){
			YAHOO.util.Event.stopEvent(e);
			this.load_home();
		}, this, true);
		
	},
	hideFlash:function(){
		var flash = YAHOO.util.Dom.get('flash-wrap').getElementsByTagName('object');
		for(i=0; i<flash.length; i++)
		{
			YAHOO.util.Dom.setStyle(flash[i], 'visibility', 'hidden');
		};
	},
	load_home:function(){
		if(this.referrer != 'home') {
			
			YAHOO.util.Dom.removeClass('flash-wrap', 'active');
			
			var stage_nav = this.stage_nav;
			var grow_banner = function(){
				var grow_banner = new YAHOO.util.Anim('flash-wrap', { height: { to:200 } }, 0.1);
				grow_banner.onComplete.subscribe(grow_content);
				grow_banner.animate();
			};
			var grow_content = function(){
				var sc = YAHOO.util.Dom.get('section-content');
				sc.innerHTML = '';
				YAHOO.util.Dom.setStyle(sc, 'display', 'block');
				document.body.className = 'home';
				
				var grow_content = new YAHOO.util.Anim('section-content', { height: { to: 300 }  }, 0.1, YAHOO.util.Easing.easeOut);
				grow_content.onStart.subscribe(function(){
					YAHOO.util.Dom.setStyle(sc, 'height', '0px');
					YAHOO.util.Dom.setStyle(sc, 'left', '0px');
				});
				grow_content.onComplete.subscribe(function(){
					WQ.prototype.hideFlash();
					swfobject.embedSWF("/m/fla/title2_Spiral.swf", "home-flash", "900", "200", "8", "/m/js/swfobject/expressInstall.swf", null, { bgcolor: '#ffffff', wmode: "transparent", flashvars: "pageValue=Home" });
					YAHOO.util.Dom.addClass('flash-wrap', 'active');
					swfobject.embedSWF("/m/fla/menu1.swf", "to-replace", "492", "100", "8", "/m/js/swfobject/expressInstall.swf");
				});
				
				if(typeof(worldquant.loaded['home'])=='undefined') {
					asyncRequest('GET', '/common/content-distributor.php?s=home', function(o) {
						worldquant.loaded['home'] = o.responseText;
						document.getElementById('section-content').innerHTML = o.responseText;
						
						scroller.init([{
							container: YAHOO.util.Selector.query('div.scrolling')[0],
							config: {
							
							}
						}]);
						
						grow_content.animate();
					});
				} else {
					document.getElementById('section-content').innerHTML = worldquant.loaded['home'];
					scroller.init([{
						container: YAHOO.util.Selector.query('div.scrolling')[0],
						config: {
						
						}
					}]);
					
					grow_content.animate();
				}
			};
			var shrink_section_navigation = function(){
				var slide = new YAHOO.util.Anim('flash-wrap', { height: { to: 0 }  }, 0.25);
				
				var change_colour = new YAHOO.util.ColorAnim('hud', { backgroundColor: { to: '#86746A' } }, 0.25);
				slide.onStart.subscribe(function(){ YAHOO.util.Dom.removeClass('hud', 'brown-on-white'); change_colour.animate(); });		
				slide.onComplete.subscribe(function(){
													
														var el = this.getEl();
														YAHOO.util.Dom.setStyle(el, 'margin-left', '0px');
														var parent = el.parentNode;				
														parent.removeChild(el);
														YAHOO.util.Dom.insertAfter(el, YAHOO.util.Dom.getFirstChild(parent));
														grow_banner();
														
													});
				slide.animate();
			};			
			var shrink = new YAHOO.util.Anim('section-content', { height: { to:0 }  }, 0.25, YAHOO.util.Easing.easeOut);
			shrink.onStart.subscribe(shrink_section_navigation);
			shrink.animate();
			this.referrer = 'home';	
		}
	},
	get_section_name:function(index){
		var sections = this.navigation_links;
		return sections[index].innerHTML;
	},
	get_section_index:function(section){
		for(var i=0; i<this.top_level_sections.length; i++) {
			if(section.indexOf(this.top_level_sections[i]) != -1) {
				return i;
			}
		}
		return null;
	},
	rebind:function(){
		var content = YAHOO.util.Dom.get('content');
		if(content.parentNode.id == 'section-content') {
			var links = content.parentNode.getElementsByTagName('a');
		} else {
			var links = content.getElementsByTagName('a');
		}
		
		function email(str)
		{
			var reg_exp = /(mailto:[A-Za-z0-9])/;
			return reg_exp.test(str);
		}
		
		if(links.length) {
			for(var i=0; i<links.length; i++){
				if(email(links[i]) != true)
				{
					YAHOO.util.Event.addListener(links[i], 'click', function(e, args){
						YAHOO.util.Event.stopEvent(e);
						args[0].page_event = true;
						var href = this.href.replace(/^(http:\/\/[^\/]+\/)/, '');
						location.hash = href;
					}, [this, i]);
				}
			}
		}
	},
	form_validate:function(){
	
      var app_frm = YAHOO.util.Dom.get('application');
	
	  if(app_frm) {
	
		fb_FV = new FormValidator(
		'application', // id of the form
			[ 
				{ name:'first_name', title:'First Name', type:'alpha' },
				{ name:'last_name', title:'Last Name', type:'alpha' },
				{ name:'address_1', title:'Street Address', type:'alphanumeric' },
				{ name:'city', title:'City', type:'alpha' },
				{ name:'zip_code', title:'Zip Code', type:'alphanumeric' },
				{ name:'country', title:'Country', type:'selected' },
				{ name:'phone', title:'Phone Number', type:'alphanumeric' },
				{ name:'email', title:'Email Address', type:'email' },
				{ name:'degree', title:'Degree', type:'alpha' },
				{ name:'major', title:'Major', type:'alpha' },
				{ name:'grad_date', title:'Graduation Date', type:'alphanumeric' },
				{ name:'gpa', title:'GPA', type:'alphanumeric' },
				{ name:'gre', title:'GRE', type:'numeric' },
				{ name:'resume', title:'Resume', type:'fileinput' },
				{ name:'privacy_policy', title:'Privacy Policy', type:'privacy' }
			] // required form fields
  	    );
	  }
	
	},
	insider_views:function(){
	
	  var insider_page = YAHOO.util.Dom.get('insider_views');
	
	  if(insider_page != null) {
	
		function grow_entry(e) {
		
		  var target = YAHOO.util.Event.getTarget(e);

		  while (target.id != "insider_views") {
		
			if(target.nodeName.toUpperCase() == "A") {
			
			 switch(target.id)
			 {
			   case "link_entry1":
				 
	 			 YAHOO.util.Dom.addClass("link_entry1", "active");
				 YAHOO.util.Dom.removeClass("link_entry2", "active");
				 YAHOO.util.Dom.removeClass("link_entry3", "active");
				 
				 var grow = new YAHOO.util.Anim('entry1', { height: { to: 114 } }, 0.3);
				 grow.animate();
			   
				 var shrink = new YAHOO.util.Anim('entry2', { height: { to: 0 } }, 0.3);
				 shrink.animate();
			   
				 var shrink = new YAHOO.util.Anim('entry3', { height: { to: 0 } }, 0.3);
				 shrink.animate();
				 
				 break;
				 
			   case "link_entry2":

				 YAHOO.util.Dom.removeClass("link_entry1", "active");
 	 			 YAHOO.util.Dom.addClass("link_entry2", "active");
				 YAHOO.util.Dom.removeClass("link_entry3", "active");
			   
				 var grow = new YAHOO.util.Anim('entry2', { height: { to: 114 } }, 0.3);
				 grow.animate();
			   
				 var shrink = new YAHOO.util.Anim('entry1', { height: { to: 0 } }, 0.3);
				 shrink.animate();
			   
				 var shrink = new YAHOO.util.Anim('entry3', { height: { to: 0 } }, 0.3);
				 shrink.animate();
				 
				 break;
			 
			   case "link_entry3":

				 YAHOO.util.Dom.removeClass("link_entry1", "active");
				 YAHOO.util.Dom.removeClass("link_entry2", "active");
 	 			 YAHOO.util.Dom.addClass("link_entry3", "active");
			   
				 var grow = new YAHOO.util.Anim('entry3', { height: { to: 114 } }, 0.3);
				 grow.animate();
			  
				 var shrink = new YAHOO.util.Anim('entry1', { height: { to: 0 } }, 0.3);
				 shrink.animate();
			   
				 var shrink = new YAHOO.util.Anim('entry2', { height: { to: 0 } }, 0.3);
				 shrink.animate();
				 
				 break;
			 } // switch
			 
			 break;
			  
			} else {
			 target = target.parentNode; 
			}// if
		  } // while
		} // function
        YAHOO.util.Event.addListener("insider_views", "mouseover", grow_entry);
      } // if
	},
	fade_bg:function(){
	
		if(window.faded === undefined || faded == 0)
		{
			YAHOO.util.Dom.setStyle('section-content-bgcolor', 'opacity', '0');

			var fade_bg_color = function() {
				var fade_bg_color = new YAHOO.util.Anim('section-content-bgcolor', { opacity: { from: 0, to: 0.999 } }, 1.5);
				fade_bg_color.animate();
				fading = 0;
			};
			
			if(window.fading === undefined || fading == 0)
			{
				timer = setTimeout(fade_bg_color, 4000);
				fading = 1;
			}
			
			faded = 1;
		}
	},
	location_functions:function(){
	
		var hide_timer = null;
		var loc_legend = YAHOO.util.Dom.get('locations_legend').getElementsByTagName('li');
		var loc_map = YAHOO.util.Dom.getChildren("locations_map");
		
		for(i=0; i<loc_legend.length; i++)
		{
			YAHOO.util.Event.addListener(loc_legend[i], "mouseover", function(e) {
				var el = YAHOO.util.Event.getTarget(e);
				var div_to_show = el.className + "_li";
				
				var div = document.getElementById(div_to_show);
				
				if(div != null)
				{
					show_loc_div(div);
				}
			});
		}
		
		for(i=0; i<loc_map.length; i++)
		{
			YAHOO.util.Event.addListener(loc_map[i].id, "mouseover", function(e) { 
				var el = YAHOO.util.Event.getTarget(e); 
				show_loc_div(this);
			});
			
			div = YAHOO.util.Dom.getChildren(loc_map[i])[0].id;
			
			YAHOO.util.Event.addListener(div, "mouseout", function(e) {
				var el = YAHOO.util.Event.getTarget(e);
				var that = this;
				hide_timer = setTimeout(function(){
					hide_loc_div(that);
				}, 500);
			});
		}
		
		function show_loc_div(e){
			
			for(i=0; i<loc_map.length; i++)
			{
				var div = loc_map[i].getElementsByTagName('div')[0];
				var hide_loc = new YAHOO.util.Anim(div, { width: { to: 0 } }, 0);
			
				hide_loc.animate();
			}
			
			clearTimeout(hide_timer);
			var div = e.getElementsByTagName('div')[0];
			YAHOO.util.Dom.setStyle(div, 'display', 'block');
			
			var show_loc = new YAHOO.util.Anim(div, { width: { to: 265 } }, 0.2);
			
			show_loc.animate();
		}
		
		function hide_loc_div(e){
			
			var hide_loc = new YAHOO.util.Anim(e, { width: { to: 0 } }, 0.2);
			
			hide_loc.animate();
			
			hide_loc.onComplete.subscribe(function(){
				YAHOO.util.Dom.setStyle(e, 'display', 'none');
			});
		}
	},
	load_press_release:function(index){
		var margin_left = (index * 900)*-1;
		var slide = new YAHOO.util.Anim('stage', { marginLeft: { to: margin_left } }, 0.5, YAHOO.util.Easing.easeOut);
		slide.animate();
	},	
	iframe_loaded:function(section){
		if(!this.page_event && !this.at_landing) {
			var section_index = this.get_section_index(section);
			if(section=='home')
				this.load_home();
			else 
				this.load_section(section_index, section, false);
		}
		this.page_event = false;
	},
	load_section:function(index, name, relocate){
		/*
		 * 1. From the home page
		 * 		1. Shirk main content
		 * 		2. Shrink the flash piece
		 * 		3. Move the HUD
		 * 		4. Grow the banner
		 * 		5. Grow the content
		 * 
		 * 2. From one section to another
		 * 		1. Shrink the content
		 * 		2. Slide the navigation to new section
		 * 		3. Grow the content
		 * 
		 * 3. Loading a page within our current section
		 * 		1. Shrink the content
		 * 		2. Grow the content
		 */	
		/* PRIVATE FUNCTIONS */
		YAHOO.util.Dom.removeClass('flash-wrap', 'active');
		var that = this;
		if(this.at_landing) this.at_landing = false;
		relocate = typeof(relocate)=='undefined' ? true : relocate;
		name = name.toLowerCase().trim('/');
		overall_section = name.split('/')[0];
		
		var shrink_flash = function(){
			var shrink_flash = new YAHOO.util.Anim('flash-wrap', { height: { to: 0 } }, 0.1);
			shrink_flash.onComplete.subscribe(function(){
				var flash_banner = this.getEl();
				var parent = flash_banner.parentNode;				
				parent.removeChild(flash_banner);
				YAHOO.util.Dom.insertBefore(flash_banner, YAHOO.util.Dom.getFirstChild(parent));
				YAHOO.util.Dom.setStyle('flash-wrap', 'margin-top', '200px');
				YAHOO.util.Dom.setStyle('flash-wrap', 'display', 'none');
				var left = -1*(900*index);
				YAHOO.util.Dom.setStyle('flash-wrap', 'margin-left', left+'px');
				move_hud();
			});
			shrink_flash.animate();			
		};
		var move_hud = function(){
			var move_hud = new YAHOO.util.Anim('hud', { marginTop: { to: 200 }  }, 0.2);
			var change_colour = new YAHOO.util.ColorAnim('hud', { backgroundColor: { to: '#FFFFFF' } }, 0.5);
			move_hud.onStart.subscribe(function(){ YAHOO.util.Dom.addClass('hud', 'brown-on-white'); change_colour.animate(); });
			move_hud.onComplete.subscribe(function(){
				grow_banner();
				grow_content();
			});
			move_hud.animate();			
		};
		var grow_banner = function(){
			var grow_banner = new YAHOO.util.Anim('flash-wrap', { height: { to: 200 }, marginTop: { to:0 }}, 0.25);
			grow_banner.onStart.subscribe(function(){ YAHOO.util.Dom.setStyle('flash-wrap', 'display', 'block'); YAHOO.util.Dom.setStyle('hud', 'margin-top', '0'); });
			grow_banner.onComplete.subscribe(function(){
				load_flash();
			});
			grow_banner.animate();
		};
		var load_flash = function(){
		
			that.hideFlash();
			var flash_var = "";
			
			flash_var = location.hash.replace('#', '').replace('/', '').split("-");
			flash_var = "pageValue=" + flash_var[0].substr(0, 1).toUpperCase() + flash_var[0].substr(1);
			
			flash_replace = overall_section + "-flash";
			
			swfobject.embedSWF("/m/fla/title2_Spiral.swf", flash_replace, "900", "200", "8", "/m/js/swfobject/expressInstall.swf", null, { bgcolor: '#ffffff', wmode: "transparent", flashvars: flash_var });
			YAHOO.util.Dom.addClass('flash-wrap', 'active');
		};
		var grow_stage = function(){
			YAHOO.util.Dom.setStyle('stage', 'display', 'none');
			YAHOO.util.Dom.setStyle('map', 'display', 'none');
			YAHOO.util.Dom.setStyle(stage_nav, 'margin-left', margin_left+'px');
			YAHOO.util.Dom.setStyle(stage_nav, 'display', 'block');
			var grow_stage = new YAHOO.util.Anim(stage_nav, { marginTop: { to: 0 }, height: { to: 240 }  }, 0.4, YAHOO.util.Easing.easeOut);
			grow_stage.onComplete.subscribe(grow_content);
			grow_stage.animate();
		};
		var grow_content = function(){
			var section = name;
			var sc = YAHOO.util.Dom.get('section-content');
			sc.innerHTML = '';
			YAHOO.util.Dom.setStyle(sc, 'display', 'block');

                        if (section == "our-locations" && ! worldquant.accepted)
			  document.body.className = "home";
                        else 
			  document.body.className = overall_section;
			
			//if(typeof(worldquant.loaded[section])=='undefined') {
				asyncRequest('GET', '/common/content-distributor.php?s='+section, function(o) {
					worldquant.loaded[section] = o.responseText;
					document.getElementById('section-content').innerHTML = o.responseText;
					
					scroller.init([{
						container: YAHOO.util.Selector.query('div.scrolling')[0],
						config: {
						
						}
					}]);
					
					that.form_validate();
					
					that.insider_views();
					
					that.fade_bg();
					
					if(worldquant.accepted && section == "our-locations")
					{
						that.location_functions();
					}
					
					var grow_content = new YAHOO.util.Anim('section-content', { height: { to: 300 }  }, 0.25, YAHOO.util.Easing.easeOut);
					grow_content.onStart.subscribe(function(){
						YAHOO.util.Dom.setStyle(sc, 'height', '0px');
						YAHOO.util.Dom.setStyle(sc, 'left', '0px');
					});
					grow_content.onComplete.subscribe(function(){
						that.rebind();
					});
					grow_content.animate();
				});
/*
			} else {
				document.getElementById('section-content').innerHTML = worldquant.loaded[section];
				scroller.init([{
						container: YAHOO.util.Selector.query('div.scrolling')[0],
						config: {
						
						}
					}]);
				
				that.form_validate();
					
				that.insider_views();

				that.fade_bg();
				
				if(section == "our-locations")
				{
					that.location_functions();
				}
				
				var grow_content = new YAHOO.util.Anim('section-content', { height: { to: 300 }  }, 0.25, YAHOO.util.Easing.easeOut);
				grow_content.onStart.subscribe(function(){
					YAHOO.util.Dom.setStyle(sc, 'height', '0px');
					YAHOO.util.Dom.setStyle(sc, 'left', '0px');
				});
				grow_content.onComplete.subscribe(function(){
					that.rebind();
				});
				grow_content.animate();
			}
*/
		};
		var slide_navigation = function(){
			var slide = new YAHOO.util.Anim('flash-wrap', { marginLeft: { to: margin_left } }, 0.5, YAHOO.util.Easing.easeOut);
			load_flash();
			slide.animate();
		};
		/* END PRIVATE FUNCTIONS */
		
		var margin_left = (index * 900)*-1;	
		var time = (this.referrer == 'home') ? 0.3 : 0.5;
		
		if(this.referrer == 'home') {
			var shrink = new YAHOO.util.Anim('section-content', { height: { to:0 }  }, 0.1);
			shrink.onComplete.subscribe(shrink_flash);
		} else if(this.referrer.indexOf(overall_section)!=-1) {
			var shrink = new YAHOO.util.Anim('section-content', { height: { to:0 }  }, 0.25, YAHOO.util.Easing.easeOut);
			shrink.onComplete.subscribe(grow_content);
		} else {
			var shrink = new YAHOO.util.Anim('section-content', { height: { to:0 }  }, 0.25, YAHOO.util.Easing.easeOut);			
			shrink.onStart.subscribe(slide_navigation);
			shrink.onComplete.subscribe(grow_content);
			faded = 0;
		}
		
		shrink.animate();
		this.referrer = name;
	}
}

/*
**	AJAX HANDLER
*/
/* Standalone AJAX Caller */
var asyncRequest = function() {
	function handleReadyState(o, callback) {
		if (o && o.readyState == 4 && o.status == 200) {
			if (callback) {
				callback(o);
			}
		}
	}
	var getXHR = function() {
		var http;
		try {
			http = new XMLHttpRequest;
			getXHR = function() {
				return new XMLHttpRequest;
			};
		}
		catch(e) {
			var msxml = [
				"MSXML2.XMLHTTP.3.0",
				"MSXML2.XMLHTTP",
				"Microsoft.XMLHTTP"
			];
			for (var i=0, len = msxml.length; i < len; ++i) {
				try {
					http = new ActiveXObject(msxml[i]);
					getXHR = function() {
						return new ActiveXObject(msxml[i]);
					};
					break;
				}
				catch(e) {}
			}
		}
		return http;
	};
	
	return function(method, uri, callback, postData) {
		var http = getXHR();
		http.open(method, uri, true);
		http.onreadystatechange = function(){handleReadyState(http, callback)};
		http.send(postData || null);
		return http;
	};
}();
String.prototype.trim = function(/* string */to_trim){
	if(typeof(to_trim)==='undefined') to_trim = ' ';
	var regex = new RegExp("^\\"+to_trim+"+|\\"+to_trim+"+$", "gi");
	return this.replace(regex, '');
}
