jQuery(function($){
	
	// rewrite search to hash for jquery.address()
	rewritePageQueryToHash();
	
	var currentScrollTop = 0; // the current scroll position of the window
	var iFrameSrc = window.iFrameSrc; // source url of the tagged site iframe "<?php echo $tagged; ?>";
	var xid = window.xid; // xid of the tagged site iframe, for use in facebook commentsbox "<?php echo $xid; ?>";
	var numposts = 3; // number of facebook comments to display
	var currentpage = 1; // current facebook comments page 
	var lastPath = ""; // keeps track of our last window.location
	var twBarAutoClose = true;
	var bdwTitle = document.title;
	var taggedTitle = document.title;
	
	var firstTime=true;
	if($.cookies.get( 'visited' )){
		firstTime=false;
	} else {
		$.cookies.set('visited','true');
	}

	/**
	 * Wraps location.search query string in a object. Methods include:
	 * <ul>
	 * <li>pageQuery.getKeyValuePairs()</li>	
 	 * <li>pageQuery.getValue()</li>	
	 * <li>pageQuery.getParameters()</li>
	 * <li>pageQuery.length()</li>
	 * </ul>
	 *
	 * @param  q  a location.search query string
	 */
	function PageQuery(q) {
		if(q.length > 1) this.q = q.substring(q.indexOf('?')+1, q.length);
			else this.q = null;
		this.keyValuePairs = [];
		if(q) {
			for(var i=0; i < this.q.split("&").length; i++) {
				this.keyValuePairs[i] = this.q.split("&")[i];
			}
		}
		this.getKeyValuePairs 
			= function() { return this.keyValuePairs; }
		this.getValue 
			= function(s) {
				for(var j=0; j < this.keyValuePairs.length; j++) {
					if(this.keyValuePairs[j].split("=")[0] == s) 
						return this.keyValuePairs[j].split("=")[1];
				}
				return false;
			}
		this.getParameters 
			= function() {
				var a = new Array(this.getLength());
				for(var j=0; j < this.keyValuePairs.length; j++) {
					a[j] = this.keyValuePairs[j].split("=")[0];
				}
				return a;
			}
		this.getLength 
			= function() { 
				return this.keyValuePairs.length;
			}
	}
	
	/**
	 * Returns the value of a given parameter key in a query string.
	 *
	 * @param  key  a parameter name
	 * @param  q  a location.search query string
	 */
	function queryString(key,q){
		if(q.length==0) q = window.location.search;
		var page = new PageQuery(q);
		return unescape(page.getValue(key));
	}
	
	
	/**
	 * Replaces the current location appending the location.search string to the hash.
	 */
	function rewritePageQueryToHash(){
		var i,
		pq, 
		params, 
		h = {}, 
		s = {}, 
		i,
		hash_array = location.hash.split("?");
	
		pq = new PageQuery(location.search);
		params = pq.getParameters();
		for(i in params){
			s[params[i]]=pq.getValue(params[i]);
		}
		if(hash_array.length>1){
			pq = new PageQuery(hash_array[1]);
			params = pq.getParameters();
			for(i in params){
				h[params[i]]=pq.getValue(params[i]);
				s[params[i]]=pq.getValue(params[i]);
			}
		}
		
		if(location.search.length>1){
			location.replace(location.protocol+"//"+location.host+location.pathname+((hash_array[0]!='')?hash_array[0]:"#/")+((jQuery.param(s).length>0)?'?'+jQuery.param(s):''));
		}
	}
	
	function updateOpenGraphMetaData(){
		var metatags = $("#like-wrapper meta");
		for(var i=0; i<metatags.length; i++){
			var metatag	= $(metatags[i]);
			var property = metatag.attr("property");
			var headtag = $("head meta[property='"+ property +"']");
			if(headtag.length>0){
				headtag.replaceWith(metatag.clone());
			} else {
				$("head").append(metatag.clone());
			}
			
		}
		taggedTitle = $("meta[property='og:title']").attr('content');
		if($("#main-nav-arrow").hasClass("active")){
			//$.address.title(taggedTitle);
			document.title = taggedTitle + ' on Boulder Digital Works at CU';
		} else {
			//$.address.title(bdwTitle);
			document.title = bdwTitle;
		}
	}
	

	/**
	 * Loads a given url to the tagged site iframe and updates the fb:comments xid
	 *
	 * @param  src  the url of a tagged site 
	 */
	function loadIFrame(src){
		
		var pattern =  new RegExp(/[\/:\.#\?%\s=\\\&]/g);
		xid = src.replace(pattern,'_');
		
		FB.XFBML.parse($('#like-wrapper')[0]);
		FB.XFBML.parse($('#bottom-commentary-connect-btn')[0]);
		FB.XFBML.parse($('#bottom-commentary-comments-box-wrapper')[0]);
		
		var fbcomments = $('#bottom-commentary-comments-form').children(0);
		if(fbcomments && fbcomments.attr('xid')!=xid) {
			fbcomments.attr('xid',xid);
		}
		
		$('#like-wrapper iframe')[0].src = $('#like-wrapper iframe')[0].src;
		updateOpenGraphMetaData();
		
		// shows the bottom
		$("#bottom-wrapper").show();
		
		// animates the loading... png sequence
		$("#loading-sequence.animbg").animBg('stop').fadeIn().animBg({'step':97,'steps':4, 'interval':250});
		
		// the iframe tag
		var iframedsiteTag = $("iframe[name='iframed-site']");
		
		// the actual frame
		var iframedsiteFrame = window.frames["iframed-site"];
		
		// cache bust iframe src (for firefox)
		if(iframedsiteTag.attr("src")!=src){
			iframedsiteTag.hide(); 
			var newiframedsite = iframedsiteTag.clone();
			iframedsiteTag.replaceWith(newiframedsite);
			iframedsiteTag = newiframedsite;
			iframedsiteTag.attr("src","about:blank");
			iframedsiteTag[0].src = iframedsiteTag[0].src;
		}
		
		// onload event handler
		iframedsiteTag.onload = function(){
			var h = $("html, body").height();
			if($("#main-nav-arrow").hasClass("active")){	
				$.scrollTo("#nav-wrapper", 0);
				currentScrollTop = h-37;
			}
			drawLayout();
			loadFacebookComments();
			iframedsiteTag.delay(2000).fadeIn('slow');
			$("#loading-sequence.animbg").delay(2000).fadeOut().animBg('stop');
		}
		
		// replace the url of the iframe
		if(iframedsiteTag.attr("src")!=src){
			iframedsiteTag.attr("src",src);
			iframedsiteTag[0].src = iframedsiteTag[0].src;
			iframedsiteFrame.location.replace(src);
		}
		
		// fade in the iframe
		// iframedsiteTag.delay(2000).fadeIn('slow');
		
		// stop the loading animation
		//$("#loading-sequence.animbg").animBg('stop');
		
		toggleBottomCommentaryInnerWrapper(true);
		
		/*
		$("#bottom-commentary-inner-wrapper").show().slideDown({
			duration:'default',
			complete:function(){
				// fade in the iframe
				iframedsiteTag.delay(2000).fadeIn('slow');
				$("#loading-sequence.animbg").delay(1500).fadeOut().animBg('stop');
				$("#iframe-wrapper").height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
			},
			step:function(){
				$("#iframe-wrapper").height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
			}
		});
		*/
		
		
	}
	
	/**
	 * Draws the page layout, adjusting the size of the divs.
	 */
	function drawLayout(){
		var win = $(window);
		var w = $("html, body").width();
		var h = $("html, body").height();
		var topWrapper = $("#top-wrapper").height(h);
		
		var topContentWrapper = $("#top-content-wrapper");
		var topContent = $("#top-content");
		
		var topContentDiv = $("#top-content div.pagecontent div.valigned");
		
		var pageContent =  $("#top-content div.pagecontent");
		
		// if we have a twitter bar
		if($("#tw-close-bar").length>0){
			$(".scrolledcontent").css("marginTop","0px"); // no top margin for .scrolledcontent
			$(".scrolledcontent dl, .scrolledcontent ul").css("top","80px"); // 80px top position for scrolling ol or ul 
			$("#tw-close-bar a").live("click", function(e){ toggleTwitterBar(); e.preventDefault(); } ); // set up click event handler on toggle arrow
			
			pageContent.css("marginTop",Math.max(0,$("#tw-bar-wrapper").height())); // adjust the height of the page content to accommodate twitter bar
			// handling twitter bar auto close
			if(twBarAutoClose && $.cookies.get("tw-bar-status")!='closed'){
				$("#tw-close-bar").delay(5000).show('slow', function(){ toggleTwitterBar(); });
				twBarAutoClose = false;
			}
		
		
		}

		// hide or show tweets depending on the page width
		var tweets = $('.tweet-wrapper');
		for(var i=0; i<tweets.length; i++){
			var tweet = $(tweets[i]);
			if(tweet.position().top>0){
				tweet.css({'visibility':'hidden'});
			} else if(tweet.css('visibility')=='hidden') {
				tweet.css({'visibility':'visible'}).hide().fadeIn('slow');
			}
		}
		
		
		var bottomWrapper = $("#bottom-wrapper");
		var bottomCommentaryWrapper = $("#bottom-commentary-wrapper");
		var iframe = $("#iframed-site");
		var iframeWrapper = $("#iframe-wrapper");
		
		var headerHeight = $("#header-wrapper").height();
		var navHeight = 37;
		var bottomWrapperHeight = h-navHeight; 
		
		// store the current scroll top
		currentScrollTop = $("html, body").scrollTop();
		if(currentScrollTop==0) currentScrollTop = $(document).scrollTop();
		
		// reposition everything
		var topcontentHeight = h-parseInt(topContentWrapper.css("bottom"))-$("#tw-bar-wrapper").height();
		if(topContentDiv){
			topContentDiv.css("marginTop",Math.max(0,(topcontentHeight-topContentDiv.height())/2));
		}
		bottomWrapper.height(bottomWrapperHeight);
		bottomCommentaryWrapper.show();
		iframeWrapper.height(bottomWrapperHeight-bottomCommentaryWrapper.height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
		
		if($("#main-nav-arrow").hasClass("active")){
			$.scrollTo("#nav-wrapper", 0);
			currentScrollTop = h-navHeight;
			// $.address.title(taggedTitle); // set jquery address title new title (http://www.asual.com/jquery/address/) 
			document.title = taggedTitle + ' on Boulder Digital Works at CU'; // update document.title just to be sure
		} else {
			bottomWrapper.height(0);
			iframeWrapper.height(0);
			bottomCommentaryWrapper.hide();
			// $.address.title(bdwTitle); // set jquery address title new title (http://www.asual.com/jquery/address/) 
			document.title = bdwTitle; // update document.title just to be sure
		}
		
		// reposition a modal dialog box
		if($(".dialog-modal").length>0){
			var wallkit_posts = $('.wallkit_posts');
			$(".dialog-modal").dialog('option','width',wallkit_posts.width()+12);
			$(".dialog-modal").dialog('option','position',[wallkit_posts.offset().left-6,wallkit_posts.offset().top+50-currentScrollTop]);
		}
		
	}
	
	/**
	 * Hides or shows the tagged site
	 *
	 * @param  forceClosed  boolean force the bottom closed
	 */
	function toggleBottomWrapper(forceClosed){
		var btn = $("#main-nav-arrow-link");
		var cnt =  $("#main-nav-arrow");
		var btm = $("#bottom-wrapper");
		var btmcw = $("#bottom-commentary-wrapper");
		var iframe = $("#iframed-site");
		var iframew = $("#iframe-wrapper");
		var h = $(window).height();
		var navHeight = 37;
		spectrum(true);
		if(!cnt.hasClass("active") && forceClosed!=true){
			//$('*').stop();
			$("#top-wrapper").css('overflow','visible');
			cnt.addClass("active");
			btn.attr("title","COLLAPSE");
			btn.find("img").attr("title","COLLAPSE");
			currentScrollTop = h-navHeight;
			btm.height(currentScrollTop);
			btmcw.show();
			iframew.height(currentScrollTop-btmcw.height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
			$.scrollTo("#nav-wrapper",{duration:400, 
										onAfter:function(){	
											if(iFrameSrc && iFrameSrc!=iframe.attr("src")){
												loadIFrame(iFrameSrc);
											} else {
												toggleBottomCommentaryInnerWrapper(true);
												drawLayout();
											}
											//iframe[0].src = iframe[0].src;
										}});
		} else {
			//$('*').stop();
			cnt.removeClass("active");
			btn.attr("title","EXPAND")
			btn.find("img").attr("title","EXPAND");
			currentScrollTop = 0;
			$.scrollTo("#top-wrapper", {duration:400, onAfter:function(){drawLayout(); spectrum();}});
			
			// stop the loading animation
			// $("#loading-sequence.animbg").animBg('stop').fadeOut();
		}
	}
	
	/**
	 * Handles a click event on the main nav arrow, which toggles the tagged site.
	 */
	function handleNavArrowClick(e){
		//$("#more-or-less-arrow-link, #bottom-commentary-connect-btn a").unbind("click",expandComments_clickHandler).click(expandComments_clickHandler);
		toggleBottomWrapper();
		return false;
	}
	
	
	var hue=false; // stores the hue for background color animation
	var spectrumStarted=false; // boolean to keep track of background color animation
	var dynamicbgcolor,
		dynamiccolor, 
		bdwcolors = [ 
					  "rgb(222,180,6)",
					  "rgb(0,149,191)",
					  "rgb(96,162,70)",
					  "rgb(205,105,137)",
					  "rgb(10,129,97)",
					  "rgb(244,2,65)",
					  "rgb(199,220,83)",
					  "rgb(251,116,81)",
					  "rgb(196,158,235)",
					  "rgb(127,191,241)",
					  "rgb(165,166,167)",
					  "rgb(6,222,143)"
					];
	/**
	 * Updates the dynamic background color.
	 *
	 * @param bool  boolean, when true, it stops the animation an updates the hue to the last dynamic color.
	 */
	function spectrum(bool){
		dynamicbgcolor = $(".dynamicbgcolor");
		dynamiccolor = $(".dynamiccolor, .secondary-nav a:not('.notdynamic'), #bottom-inner-wrapper a:not('#more-or-less-arrow-link, .facebook, .twitter, .fb_button, .notdynamic')");

		hue = (hue) ? $(".dynamicbgcolor").css("backgroundColor") : bdwcolors[Math.floor(Math.random()*bdwcolors.length)]; //"rgb(" + (Math.floor(Math.random() * 256)) + "," + (Math.floor(Math.random() * 256)) + "," + (Math.floor(Math.random() * 256)) + ")";
	
		if(bool){
			dynamicbgcolor.stop();
			dynamiccolor.stop();
			
			dynamicbgcolor.css({ backgroundColor:hue });
			dynamiccolor.css({ color:hue });
			
			$("#bottom-inner-wrapper a:not('#more-or-less-arrow-link, .facebook, .twitter, .fb_button')").hover(
				function(){
					
					var $this = $(this);
					var data = $this.data();
					if(!$this.data()._exists){
						data._exists = true;
						data._color = hue;
						data._borderColor = $this.css('border-color');
						data._borderStyle = $this.css('border-style');
						data._borderWidth = $this.css('border-width'); 
						data._marginTop = $this.css('margin-top');
						data._marginRight = $this.css('margin-right');
						data._marginBottom = $this.css('margin-bottom'); 
						data._marginLeft = $this.css('margin-left'); 
						data._paddingTop = $this.css('padding-top');
						data._paddingRight = $this.css('padding-right');
						data._paddingBottom = $this.css('padding-bottom'); 
						data._paddingLeft = $this.css('padding-left');
						$this.data(data);
					}

					var obj = {};
					obj.color = hue;
					obj.borderColor = hue;
					if(data._borderWidth=='' || parseInt(data._borderWidth)==0){
						obj.borderStyle = 'solid';
						obj.borderWidth = '1px'; 
						obj.marginTop = (data._marginTop) ? parseInt(data._marginTop)-2+'px' : '-2px';
						obj.marginRight = (data._marginRight) ? parseInt(data._marginRight)-2+'px' : '-2px';
						obj.marginBottom = (data._marginBottom) ? parseInt(data._marginBottom)-2+'px' : '-2px'; 
						obj.marginLeft = (data._marginLeft) ? parseInt(data._marginLeft)-2+'px' : '-2px'; 
						obj.paddingTop = (data._paddingTop) ? parseInt(data._paddingTop)+1+'px' : '1px';
						obj.paddingRight = (data._paddingRight) ? parseInt(data._paddingRight)+1+'px' : '1px';
						obj.paddingBottom = (data._paddingBottom) ? parseInt(data._paddingBottom)+1+'px' : '1px';
						obj.paddingLeft = (data._paddingLeft) ? parseInt(data._paddingLeft)+1+'px' : '1px';
						
					}
					if(!$this.parent().hasClass('user-icon')){
						//$this.css(obj);
					} else {
						$this.css({'border-color':hue});
					}
					
				},
				function(){
					
					var $this = $(this);
					var obj = {};
					var data = $this.data();
					obj.color = hue;
					if(data._exists){
						obj.color = (data._color) ? data._color : hue;
						obj.borderColor = (data._borderColor) ? data._borderColor : 'transparent';
						obj.borderStyle = (data._borderStyle) ? data._borderStyle : 'none';
						obj.borderWidth = (data._borderWidth) ? data._borderWidth : '0';
						obj.marginTop = (data._marginTop) ? data._marginTop : '0';
						obj.marginRight = (data._marginRight) ? data._marginRight : '0';
						obj.marginBottom = (data._marginBottom) ? data._marginBottom : '0'; 
						obj.marginLeft = (data._marginLeft) ? data._marginLeft : '0';
						obj.paddingTop = (data._paddingTop) ? data._paddingTop : '0';
						obj.paddingRight = (data._paddingRight) ? data._paddingRight : '0';
						obj.paddingBottom = (data._paddingBottom) ? data._paddingBottom : '0';
						obj.paddingLeft = (data._paddingLeft) ? data._paddingLeft : '0';
					}
					if(!$this.parent().hasClass('user-icon')){
						//$this.css(obj);
					} else {
						$this.css({'border-color':data._borderColor});
					}
					
				}
			);
			$("#bottom-inner-wrapper a:not('#more-or-less-arrow-link, .facebook, .twitter, .fb_button')").focusin(
				function(){
					var $this = $(this);
					var data = $this.data();
					if(!$this.data()._exists){
						data._exists = true;
						data._color = $this.css('color');
						data._borderColor = $this.css('border-color');
						data._borderStyle = $this.css('border-style');
						data._borderWidth = $this.css('border-width'); 
						data._marginTop = $this.css('margin-top');
						data._marginRight = $this.css('margin-right');
						data._marginBottom = $this.css('margin-bottom'); 
						data._marginLeft = $this.css('margin-left'); 
						data._paddingTop = $this.css('padding-top');
						data._paddingRight = $this.css('padding-right');
						data._paddingBottom = $this.css('padding-bottom'); 
						data._paddingLeft = $this.css('padding-left');
						$this.data(data);
					}
					
					var obj = {};
					obj.color = hue;
					obj.borderColor = hue;
					if(data._borderWidth=='' || parseInt(data._borderWidth)==0){
						obj.borderStyle = 'solid';
						obj.borderWidth = '1px'; 
						
						obj.marginTop = (data._marginTop) ? parseInt(data._marginTop)-2+'px' : '-2px';
						obj.marginRight = (data._marginRight) ? parseInt(data._marginRight)-2+'px' : '-2px';
						obj.marginBottom = (data._marginBottom) ? parseInt(data._marginBottom)-3+'px' : '-2px'; 
						obj.marginLeft = (data._marginLeft) ? parseInt(data._marginLeft)-2+'px' : '-2px'; 
						obj.paddingTop = (data._paddingTop) ? parseInt(data._paddingTop)+1+'px' : '1px';
						obj.paddingRight = (data._paddingRight) ? parseInt(data._paddingRight)+1+'px' : '1px';
						obj.paddingBottom = (data._paddingBottom) ? parseInt(data._paddingBottom)+1+'px' : '1px';
						obj.paddingLeft = (data._paddingLeft) ? parseInt(data._paddingLeft)+1+'px' : '1px';
						
					}
					if(!$this.parent().hasClass('user-icon')){
						//$this.css(obj);
					} else {
						$this.css({'border-color':hue});
					}
					
				},
				function(){
					
					var $this = $(this);
					var obj = {};
					var data = $this.data();
					obj.color = hue;
					if(data._exists){
						obj.color = (data._color) ? data._color : hue;
						obj.borderColor = (data._borderColor) ? data._borderColor : 'transparent';
						obj.borderStyle = (data._borderStyle) ? data._borderStyle : 'none';
						obj.borderWidth = (data._borderWidth) ? data._borderWidth : '0';
						obj.marginTop = (data._marginTop) ? data._marginTop : '0';
						obj.marginRight = (data._marginRight) ? data._marginRight : '0';
						obj.marginBottom = (data._marginBottom) ? data._marginBottom : '0'; 
						obj.marginLeft = (data._marginLeft) ? data._marginLeft : '0';
						obj.paddingTop = (data._paddingTop) ? data._paddingTop : '0';
						obj.paddingRight = (data._paddingRight) ? data._paddingRight : '0';
						obj.paddingBottom = (data._paddingBottom) ? data._paddingBottom : '0';
						obj.paddingLeft = (data._paddingLeft) ? data._paddingLeft : '0';
					}
					if(!$this.parent().hasClass('user-icon')){
						$this.css(obj);
					} else {
						$this.css({borderColor:data._borderColor});
					}
				}
			);
			$("#bottom-inner-wrapper a:not('#more-or-less-arrow-link, .facebook, .twitter, .fb_button')").focusout(
				function(){
					var $this = $(this);
					var obj = {};
					var data = $this.data();
					obj.color = hue;
					if(data._exists){
						obj.color = (data._color) ? data._color : hue;
						obj.borderColor = (data._borderColor) ? data._borderColor : 'transparent';
						obj.borderStyle = (data._borderStyle) ? data._borderStyle : 'none';
						obj.borderWidth = (data._borderWidth) ? data._borderWidth : '0';
						obj.marginTop = (data._marginTop) ? data._marginTop : '0';
						obj.marginRight = (data._marginRight) ? data._marginRight : '0';
						obj.marginBottom = (data._marginBottom) ? data._marginBottom : '0'; 
						obj.marginLeft = (data._marginLeft) ? data._marginLeft : '0';
						obj.paddingTop = (data._paddingTop) ? data._paddingTop : '0';
						obj.paddingRight = (data._paddingRight) ? data._paddingRight : '0';
						obj.paddingBottom = (data._paddingBottom) ? data._paddingBottom : '0';
						obj.paddingLeft = (data._paddingLeft) ? data._paddingLeft : '0';
					}
					if(!$this.parent().hasClass('user-icon')){
						$this.css(obj);
					} else {
						$this.css({borderColor:data._borderColor});
					}
				}
			);
		} else {
			hue = bdwcolors[Math.floor(Math.random()*bdwcolors.length)];//"rgb(" + (Math.floor(Math.random() * 256)) + "," + (Math.floor(Math.random() * 256)) + "," + (Math.floor(Math.random() * 256)) + ")";
			dynamicbgcolor.animate({backgroundColor:hue},
								   {duration:35000,
										complete:function(){
											if(this==dynamicbgcolor[dynamicbgcolor.length-1]){
												hue=$(this).css('background-color');
												dynamiccolor.css({'color':hue});
												$(this).delay(5000,spectrum());
											}
										},
										step:function(){
											if(this==dynamicbgcolor[dynamicbgcolor.length-1]){
												hue=$(this).css('background-color');
												dynamiccolor.css({'color':hue});
											}
										}
									 });
		}
	}
	
	
	/**
	 * Initializes Facebook
	 */
	function initFB() {
		
		window.fbAsyncInit = function() {
			FB.init({apiKey:fb_api_key,
					 status:true,
					 cookie:true,
					 xfbml:true});
			FB.Event.subscribe('auth.sessionChange', 
				function(response) {
					loadFacebookComments();
				});
			FB.Event.subscribe('auth.login', 
				function(response) {
					//alert("auth.login");
					$.post('/bookmarklet/member/member-check-facebook-login.php');
					//loadFacebookComments();
				});
			FB.Event.subscribe('auth.logout', 
				function(response) {
					//alert("auth.logout");
					//loadFacebookComments();
				});
			FB.Event.subscribe('auth.statusChange', 
				function(response) {
					//loadFacebookComments();
				});
			FB.Event.subscribe('comments.add', 
				function(comment) {
					loadFacebookComments(comment);
				});
			FB.Event.subscribe('comments.remove', 
				function(comment) {
					loadFacebookComments();
				});
			updateOpenGraphMetaData();
			$("#more-or-less-arrow-link, #bottom-commentary-connect-btn a").live("click",expandComments_clickHandler).click(expandComments_clickHandler);
		};
		if($("div#fb-root").length==0){
			var fbroot = $('<div></div>').attr({'id':'fb-root'}).appendTo($('body'));
			$('<script></script>').attr({'type':'text/javascript','src':document.location.protocol+'//connect.facebook.net/en_US/all.js', 'async':'true'}).appendTo(fbroot);
		}
		/*
		FB_RequireFeatures(	["XFBML","Comments"], 
							function(){
								FB.init(fb_api_key, 
										"/xd_receiver.htm", 
										{"ifUserConnected":onFBConnected, 
										 "ifUserNotConnected":onNotFBConnected});
								FB.CommentClient.add_onComment(
									function(comment){
										loadFacebookComments(comment);
									}
								);
							}
						   );
		
		*/
	}
	
	function onFBConnected(){
		loadFacebookComments();
	}
	
	function onNotFBConnected(){
		loadFacebookComments();
	}
	
	function promo_clickHandler(event){
		var $a = $(this);
		if(window.pageTracker && window.pageTracker._trackEvent){
			window.pageTracker._trackEvent('Leftnav', 'Click', 'Promo-'+$a.attr('title'));
		}
		$a.unbind("click").click(a_clickHandler).click();
		$a.unbind("click").click(promo_clickHandler);
		return false;
	}	
	
	function a_clickHandler(event){
		var $a = $(this);
		
		if($a.parent().hasClass('news-link') || $a.closest('div.news-content').length>0){
			return true;
		}
		
		var attr =  $a.attr('href');
		
		var q = $.address.queryString();
		var n = '';
		
		if(attr) {
			var arr = attr.split($.address.baseURL());
			var attr_path = arr[arr.length-1];
			attr_path = (attr_path.indexOf('/#')==0) ? attr_path.substr(1) : attr_path;
		}
		
		if(attr && attr_path.indexOf("#")>=0){
			var indexOfHash = attr_path.indexOf("#");
			
			n = attr_path.substr(indexOfHash+1);
			
			if(indexOfHash==0){
				var val = unescape($.address.value());
				var hash = $.address.hash();
				if(hash=='' &&  val.lastIndexOf('#')>=0){
					hash = val.substr( val.lastIndexOf('#'), val.length+1 );
				}
				if(hash!=''){
					val = val.substr(0,val.lastIndexOf('#'));
				}
				var jumptolink = $('a[name='+n+']');
				
				if(jumptolink.length==1){
					$.address.value(val+'#'+n);
					jumptolink.closest(".scrollpane").scrollTo(jumptolink,200);
					$a.closest("ul").find("a").removeClass("active");
					$a.addClass('active');
				}
				return false;
			}
		}
		
		var href = this.href;
		var hostname = location.protocol+"//"+location.hostname;
		if(attr.indexOf(location.protocol+"//"+location.hostname) == 0  
			&& attr.indexOf("/blogs/60weeks/")==-1){
			attr = attr.substring(hostname.length);
		}
		if(attr.indexOf("mailto:")==0 
			|| attr.indexOf("http:")==0 
			|| attr.indexOf("https:")==0 
			|| attr.toLowerCase().indexOf(".pdf")==attr.length-4 ){
			if(!$a.attr('target')){
				$a.attr('target','__blank');
			}
			return true;
		}
		var q = $.address.queryString();

		if(q && $a.parent('[id^=bdw-logo]').length==0){
			
			if(n!=''){
				attr=attr.split('#').join('?'+q+'#');
			}else{
				attr+='?'+q;
			}
		}
		if($.address.value()!=attr){
			$.address.value(attr);
			toggleBottomWrapper(true);
		} else if($.address.value()==attr && $("#main-nav-arrow").hasClass("active")){
			toggleBottomWrapper(true);
		}
		return false;
	}
	
	function expandComments_clickHandler(){
		
		
		if($("#bottom-commentary-right-wrapper:animated").length>0 || $("#bottom-commentary-comments-box-wrapper:animated,#bottom-commentary-comment:animated").length>0){
			return false;
		}
		
		loadFacebookComments();
		var moreOrLessArrow = $("#more-or-less-arrow");
		var moreOrLessArrowLink = $("#more-or-less-arrow-link");
		var moreOrLessArrowImg = $("#more-or-less-arrow-link img");
		var bottomCommentaryRight = $("#bottom-commentary-right-wrapper");
		var bottomCommentaryComment = $("#bottom-commentary-comments-box-wrapper,#bottom-commentary-comment");
		var btmcw = $("#bottom-commentary-wrapper");
		var iFrameWrapper = $("#iframe-wrapper");
		var iFrameHeight = iFrameWrapper.height();
		if(moreOrLessArrow.hasClass("active")){
			moreOrLessArrow.removeClass("active");
			moreOrLessArrowImg.attr({"alt":"COMMENTARY"});
			bottomCommentaryComment.animate({opacity:0},{duration:'default'});
			bottomCommentaryComment.slideUp({duration:'default',
											 complete:function(){
												bottomCommentaryRight.fadeIn('default');
												iFrameWrapper.height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
											 },
											 step:function(){
												 iFrameWrapper.height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
											 }} );
			
		} else {
			
			
			if($(this).hasClass('fb_button')&&!FB.getSession()){
				/*
					FB.login(function(request){
							loadFacebookComments();
						});
				*/
			}
			
			/*
			if($(this).hasClass('fbconnect_login_button')){
				FB.Connect.requireSession();
			}
			*/
			
			moreOrLessArrow.addClass("active");
			moreOrLessArrowImg.attr({"alt":"MINIMIZE"});
			bottomCommentaryRight.fadeOut('fast',
				function(){
					bottomCommentaryComment.css({opacity:0}).slideDown({duration:'default',
																		   complete:function(){
																				iFrameWrapper.height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
																			},
																			step:function(){
																				iFrameWrapper.height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
																			}
																		});
					bottomCommentaryComment.animate({opacity:1},{duration:'default',
																			complete:function(){
																				bottomCommentaryComment.css({'filter':'none'});
																			}});
				}
			);
		}		
		return false;
	}
	
	function wallkitPosts_clickHandler(event){		
		var $a = $(this);
		var attr =  $a.attr("href");
		var href = this.href;
		var hostname = location.protocol+"//"+location.hostname;
		if(attr.indexOf(location.protocol+"//"+location.hostname) == 0){
			attr = attr.substring(hostname.length);
		}
		if(attr.indexOf("mailto:")==0 || attr.indexOf("http:")==0){
			return true;
		}
		var query_array = attr.substring(attr.lastIndexOf("?")+1).split('&');
		var data = {};
		for(var i in query_array){
			var temp = query_array[i].split('=');
			data[temp[0]] = temp[1];
		}
		if(data.xid){
			xid = data.xid;
		}
		if(data.currentpage){
			currentpage = data.currentpage;
		}
		if(data.numposts){
			numposts = data.numposts;
		}
		
		var fbsession = FB.getSession();
		if(fbsession){
			for(var i in fbsession){
				data[i] = fbsession[i];
			}
		}
		
		var fbcomments_url = '/fbcomments_v2.php'; // (fbsession) ? '/fbcomments_v2.php' : '/fbcomments.php';
		
		if(data.action && data.action=='delete'){
			var wallkit_posts = $('.wallkit_posts');
			var dialog = $("<div class='dialog-modal' title='Delete post?'></div>")
				.html('<p>Are you sure you want to delete this post?</p>')
				.dialog({
				modal: true,
				width: wallkit_posts.width()+12,
				position: [wallkit_posts.offset().left-6,wallkit_posts.offset().top+50-currentScrollTop],
				buttons: {
					Cancel: function() {
						$(this).dialog('close');
					},
					Delete: function() {
						$.post(fbcomments_url,data,postFacebookCommentsHandler);
						$(this).dialog('close');
					}
				}
			});
			$('<div class="dialog-modal-bevel"><span></span></div>').appendTo(dialog.parent());
			dialog.parent().css({'background-color':hue});
			dialog.parent().find('button').css({'color':hue});
			return false;
		}
		
		$.post(fbcomments_url,data,postFacebookCommentsHandler);
		return false;
	}
	
	var flagNewComment =  false;
	var fbInt;
	function loadFacebookComments(comment){
		if(xid){
			var data = {xid:xid};
			if(!comment){
				data.currentpage = currentpage;
				data.numposts = numposts;
				flagNewComment = false;
			} else {
				flagNewComment = true;
			}
			var fbsession = FB.getSession();
			if(fbsession){
				for(var i in fbsession){
					data[i] = fbsession[i];
				}
			}
			var fbcomments_url = '/fbcomments_v2.php'; // (fbsession) ? '/fbcomments_v2.php' : '/fbcomments.php';
			$.post(fbcomments_url,data,postFacebookCommentsHandler);
		}
	}

	function postFacebookCommentsHandler(data){
		var new_wallkit_posts = $("<div></div>").html(data);
		new_wallkit_posts = new_wallkit_posts.find(".wallkit_posts");
		
		if(new_wallkit_posts.length==0 || new_wallkit_posts.find('.wallkit_posts_total').length==0 || parseInt(new_wallkit_posts.find('.wallkit_posts_total').html())==0  ){
			window.loadFacebookComments = loadFacebookComments;
			window.flagNewComment = flagNewComment;
			clearTimeout(fbInt);
			fbInt = setTimeout('loadFacebookComments(flagNewComment)', 10500);
			if(parseInt($('.wallkit_posts_total').html())<=0 || new_wallkit_posts.length==0){
				return;
			}
		} else {
			clearTimeout(fbInt);
		}

		flagNewComment = false;

		var wallkit_posts = $('.wallkit_posts');
		if(wallkit_posts.text()==new_wallkit_posts.text()){
			return;
		}
		
		wallkit_posts.fadeOut('fast', function(){
			$(this).replaceWith(new_wallkit_posts);
			spectrum(true);
			drawLayout();
			$('.wallkit_posts').fadeTo(0,0).fadeTo('slow',1, function(){
				$('.wallkit_posts').removeAttr("style");
			});
			$('.wallkit_posts a').live("click",wallkitPosts_clickHandler);
		});
	}

	function address_initHandler(e) {
		if(location.pathname != e.path){
			
		}
	}
	
	function address_changeHandler(e) {

		spectrum(true);
		/*
		if((e.value.length<=1 || e.path=="/" || e.path=="" || e.path=="/index.php") && lastPath==""){
			$("#header-wrapper .h1").fadeTo('normal',0.1);
			$("#top-content").fadeIn();
			return;
		}
		*/
		
		$.validationEngine.closePrompt('.formError',true);
		
		if(e.value.indexOf("/archive/")==0){
			address_load(unescape(e.value));
			if(!$("#main-nav-arrow").hasClass('active')){
				toggleBottomWrapper();
			}
		} else if(e.path.indexOf("/")==0
				&& e.path!=lastPath
				&& !(e.value.length<=1 && lastPath=="")){
			lastPath = e.path;
			address_load(unescape(e.value));
			if($("#main-nav-arrow").hasClass('active')
				&& e.value.indexOf("?bookmarkid=")!=1){
				toggleBottomWrapper(true);
			}			
		} else {
			var hash = $.address.hash();
			if(hash!=''){
				var jumptolink = $('a[name='+hash+']');
				jumptolink.closest(".scrollpane").scrollTo(jumptolink,200);
				
				var $a = $("ul a[href^=#"+hash+"]");
				$a.closest("ul").find("a").removeClass("active");
				$a.addClass('active');
			}
			$("#top-content").fadeIn();
			$("#header-wrapper .h1").fadeTo(400,0.1);
			$("#top-content div.pagecontent").show();
			if(currentScrollTop==0) spectrum();
			
			/* ----------------- */
			var bookmark_id = $.address.parameter('bookmarkid');
			if(bookmark_id && parseInt(bookmark_id)>=0){
				if(bookmark_id!=bid){
					bookmark_load(bookmark_id);
				} else {
					$("iframe[name='iframed-site']").show().height("100%");
				}
			} else if(!firstTime && (e.value=="/" || e.value=="/index.php")){
				toggleBottomWrapper();
			}
		}
		
	}
	
	function address_load(path) {

		$.validationEngine.closePrompt('.formError',true);
		
		$.post(path, postHandler, "html");
	}
		
	function postHandler(data, textStatus) {
		
		
		try{
			var regexp = new RegExp('(?:<title.*?\>)(.+)(?:\<\/title?\>)'); // regex to parse out title from raw data string
			var newtitle = regexp.exec(data)[1]; // title stripped of tags is the first group in the regex
			newtitle = newtitle.split("&amp;").join("&");
			$.address.title(newtitle); // set jquery address title new title (http://www.asual.com/jquery/address/) 
			document.title = newtitle; // update document.title just to be sure
			bdwTitle = newtitle;
			
		} catch(error){}
		
		spectrum(true);
		
		var isArchive = ($.address.value().indexOf("/archive/")!=-1);
		
		if(isArchive){
			$("#header-wrapper .h1").fadeTo('normal',0.1);
			$("#top-content").fadeIn();
			
			if($('.archive-wrapper').length>0){
				$('.archive-wrapper').remove();
			}
			
			$archivewrapper = $(data).find('div.archive-wrapper');
			$("#bottom-inner-wrapper").prepend($archivewrapper);
			spectrum(true);
			
			$("iframe[name='iframed-site']").height(0);
			
			$($archivewrapper).fadeOut(0).fadeIn();
			$(".bookmark-list a[href^=/?bookmarkid=]").live('click',
				function(){
					$('.archive-wrapper').fadeOut('normal',function(){$(this).remove()});
					$.address.value(lastPath+$(this).attr('href').substring(1)); 
					return false;
				});
			$(".archive .close-link").live('click',
				function(){
					$('.archive-wrapper').fadeOut('normal',
													function(){
														$(this).remove();
														$("iframe[name='iframed-site']").height("100%");
													});
					
					// alert($.address.queryString());
					$.address.value(lastPath+'?bookmarkid='+bid); 
					return false;
				});
			
			
			return;
		}

		$("#header-wrapper .h1").fadeOut('normal',function(){
			$(this).replaceWith( $(data).find("#header-wrapper .h1") ).hide().fadeTo('normal',0.1);
		});

		$(".secondary-nav-wrapper").fadeOut('normal');
		$("#top-content").delay(10).fadeOut({duration:'normal',
								   complete:function(){
									   			var $data = $('<div>'+data+'</div>')
												$("#top-content-wrapper").html($data.find("#top-content-wrapper").html());
												spectrum(true);
												drawLayout();
												//$(".pagecontent a:not([class=main-nav-arrow-link]), .secondary-nav a, .tertiary-nav a").live('click',a_clickHandler);
												$(".secondary-nav-wrapper").fadeOut(0).fadeIn();
												$("#top-content").fadeOut(0).fadeIn(
													function(){
														if(currentScrollTop==0){
															spectrum();
														}
													});
												var val = unescape($.address.value());
												var hash = $.address.hash();
												if(hash==''){
													hash = val.substr( val.lastIndexOf('#')+1, val.length-1 );
												}
												if(hash!=''){
													var jumptolink = $('a[name='+hash+']');
													jumptolink.closest(".scrollpane").scrollTo(jumptolink,200);
													
													var $a = $("ul a[href^=#"+hash+"]");
													$a.closest("ul").find("a").removeClass("active");
													$a.addClass('active');
												}
												
												if($data.find("form").length>0){
													initFormLabels();
												}
												
												if($data.find('a[name=confirmation-message]').length>0){
													var confirmationMessage = $('a[name=confirmation-message]');
													confirmationMessage.closest(".scrollpane").scrollTo(confirmationMessage,200);
												}
												
												var $mapiframe = $('#mapiframe');
												if( $mapiframe.length==1 ){
													$mapiframe[0].src = $mapiframe[0].src;
												}												
													
												// Twitter-Bar (keep open or close) handling
												if( cookie=$.cookies.get("tw-bar-status") ){
													if( cookie=='closed' ){
														$("#latest-tweets").css("display","none");
														$("#tw-close-bar a").css("background-position", "-21px 0");
														$(".pagecontent").css("marginTop",Math.max(0,$("#tw-bar-wrapper").height()));
													}
												}
												
											}
									});
			
			var navLinks = $("#main-nav a");
			var path = $.address.path();
			for(var i=0; i<navLinks.length; i++){
				var $n = $(navLinks[i]);
				if((path.indexOf($n.attr('href'))==0 && path.length>1)
				   || (path.length<=1 || path=="/about.php" || path=="/about-bdw.php") 
					   && ($n.attr('href')=="/about.php" || $n.attr('href')=="/about-bdw.php")
				  ){
					$n.addClass('active');
					continue;
				} 
				$n.removeClass('active');
			}
		
		/* -- Archive Nav -- */
		var archiveLink = $("#bottom-commentary-introduction a");
		
		
		/* ----------------- */
		var bookmark_id = $.address.parameter('bookmarkid');
		if(bookmark_id && parseInt(bookmark_id)>=0){
			if(bookmark_id!=bid){
				bookmark_load(bookmark_id);
			}
		}
		
	}
	
	function toggleBottomCommentaryInnerWrapper(bool){
		var direction = (bool) ? "slideDown" : "slideUp";
		
		// the iframe tag
		var iframedsiteTag = $("iframe[name='iframed-site']");
		
		$("#bottom-commentary-inner-wrapper")[direction]({
			duration:'default',
			complete:function(){
				if(direction=='slideDown'){
					// fade in the iframe
					iframedsiteTag.delay(2000).fadeIn('slow');
					$("#loading-sequence.animbg").delay(1500).fadeOut().animBg('stop');
				}
				$("#iframe-wrapper").height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
			},
			step:function(){
				$("#iframe-wrapper").height(currentScrollTop-$("#bottom-commentary-wrapper").height()-parseInt($("#bottom-inner-wrapper").css('paddingTop')));
			}
		});
	}
	
	
	function bookmark_load(id) {

		$("#loading-sequence.animbg").animBg('stop').fadeIn().animBg({'step':97,'steps':4, 'interval':250});
		
		var iframedsiteTag = $("iframe[name='iframed-site']");
		
		if(iframedsiteTag.attr("src")){
			var data = {bookmarkid:id};
			$.post('/bottom-wrapper.php', data, postBookmarkHandler, "html");
			bid = id;
			
			
			toggleBottomCommentaryInnerWrapper();
			
			
			
			iframedsiteTag.height('0px');
			
			if($('.archive-wrapper').length>0){
				$('.archive-wrapper').fadeOut('normal',
													function(){
														$(this).remove();
													});
			}
		}
	}
	
	
	function postBookmarkHandler(data, textStatus) {
		if(textStatus!='success') return;
		var $data = $('<data>'+data+'</data>')
		var newxid = $data.find('div#bottom-commentary-comments-form').children(0).attr('xid');
		if(xid != newxid){
			xid = newxid;
			iFrameSrc = $data.find('#iframed-site').attr('src');
			
			var toggledBottom = $("#main-nav-arrow").hasClass("active");
			var expandedComments = $("#more-or-less-arrow").hasClass("active");
			$("#bottom-commentary-right-inner-wrapper").html($data.find("#bottom-commentary-right-inner-wrapper").html());
			$("#bottom-commentary-tag-info").html($data.find("#bottom-commentary-tag-info").html());
			$("#bottom-commentary-comment").html($data.find("#bottom-commentary-comment").html());
			$("#bottom-commentary-comments-box-wrapper").html($data.find("#bottom-commentary-comments-box-wrapper").html());
			$("#iframed-site").replaceWith($data.find("#iframed-site"));
			
			$("#like-wrapper").replaceWith($data.find("#like-wrapper"));
			updateOpenGraphMetaData();
			
			spectrum(true);
			
			if(expandedComments){
				//expandComments_clickHandler();
			}
			if(!toggledBottom){
				toggleBottomWrapper();
				FB.XFBML.parse($("#like-wrapper")[0]);
				FB.XFBML.parse($("#bottom-commentary-connect-btn")[0]);
				FB.XFBML.parse($('#bottom-commentary-comments-box-wrapper')[0]); 
			} else {
				loadIFrame(iFrameSrc);
			}
			
			
			
			
			//$("#more-or-less-arrow-link, #bottom-commentary-connect-btn a").live("click",expandComments_clickHandler);
			//$('.wallkit_posts a').live("click",wallkitPosts_clickHandler);

			// initFB();
		}
	}
	
	function toggleTwitterBar(){
		//alert( $("#tw-close-bar a").css("background-position-x") );
		var pos = $("#tw-close-bar a").backgroundPosition().substr(0,3);
		//alert( $.cookies.get("tw-bar-status") );
		
		// calculate cookie life time
		var d = new Date();
		var ts = d.getTime();
		var timeOffset = new Date(ts+1800000);	//30minutes
		
		if( pos=='0px' ){
			//arrow pos. left (arrow up)
			$("#latest-tweets").slideUp({duration:'normal',
											 complete:function(e){
												$("#tw-close-bar a").css("background-position", "-21px 0");
												$.cookies.set("tw-bar-status", "closed", {expiresAt: timeOffset});
												// -- calling drawLayout() causes a juicy performance problem when the bar --
												// -- is being closed and opened several times! --
												//drawLayout();
											 },
											 step:function(e){
												$(".pagecontent").css("marginTop",Math.max(0,$("#tw-bar-wrapper").height()));
											 }});
			//$("div .test").text("coookies: " + $.cookies.get("tw-bar-status"));
			
		}else{
			$("#latest-tweets").slideDown({duration:'normal',
											 complete:function(e){
												$("#tw-close-bar a").css("background-position", "0px 0");
												$.cookies.set("tw-bar-status", "open", {expiresAt: timeOffset});
												//drawLayout();
											 },
											 step:function(e){
												$(".pagecontent").css("marginTop",Math.max(0,$("#tw-bar-wrapper").height()));
											 }});
			//$("div .test").text("coookies: " + $.cookies.get("tw-bar-status"));
		}
		
	}
	
	
	function initFormLabels(){
		var labels, id, field;
		var labels = $("label.hoverlabel");
		
		for (var i = 0; i < labels.length; i++) 
		{
			var label = $(labels[i]);
			id = ( labels[i].htmlFor || label.attr('for') );
			if (!id 
				|| !( field = $('#'+id)[0] ))
			{
				continue;
			} 	
		
			// Changing the applied class to hover the label 
			label.removeClass("hoverlabel").addClass("hoverlabel-apply");
			
			var label_help = label.find("em");
			if(label_help.length>0){
				label_help.appendTo( $("<p></p>").addClass("help").appendTo(label.parent()));	
			}
			
			if (field.value !== '') {
				hideLabel(id, true);
			}
		
			// Hiding labels
			$(field).focus(	function(){
								var attId = $(this).attr('id');
								hideLabel(attId, true);
								if($(this).attr('type')=='file'||$(this).is('select')){
									$(this).parent().addClass('focus');
								}
							});
				
			$(field).blur(	function(){
								if ($(this).val() === ''){
									hideLabel( $(this).attr('id'), false);
								}
								if($(this).attr('type')=='file'||$(this).is('select')){
									$(this).parent().removeClass('focus');
								}
							});
			
			if($(field).attr('type')=='file'){
				$(field).bind('change',
							  function() { 
							    $.validationEngine.intercept = true;
							  	var attId = $(this).attr('id');
								var newVal = $(this).val();
								var toggle = (newVal!='');
 							  	$('#'+attId+'-filename').show().val( newVal );
								$('label[for='+attId+']').css({'textIndent':'-1000em'});
								$.validationEngine.loadValidation('#'+attId);
							  });
				$(field).bind('click',
							  function() { 
							  	$.validationEngine.intercept = true;
							  });
			}
		};
		
		function hideLabel(field_id, hide) 
		{
			var field_for;
			var z;
			var labels = $('label');
			for (var i = 0; i < labels.length; i++) 
			{
				
				var label = $(labels[i]);
				field_for = ( labels[i].htmlFor || label.attr('for') );
				if (field_for == field_id) 
				{
					z = (hide) ? 1 : 3;
					label.css({zIndex:z});
					return true;
				}
			}
		}
		
		// JUST AN EXAMPLE OF VALIDATIN CUSTOM FUNCTIONS : funcCall[validate2fields]
		window.validate2fields = function(){
			if($("input[name=firstname]").val() =="" || $("input[name=lastname]").val() == ""){
				return true;
			}else{
				return false;
			}
		}
		
		
		
		if($("select").length && $("select").css('color')){
			//$('#termOptions').selectbox({debug: true});
			
			function selectChangeHandler(e){
				var selectElement = $(this);
				var span = selectElement.siblings("span");
				if(!span.length){
					span = $("<span></span>").prependTo($(this).parent("div.select-wrapper"));
				}
				selectElement.data('_carat',selectElement[0].selectedIndex);

				var selections = selectElement.children();
				selectElement.children("option[value='']").css({'color':selectElement.data('_cachedColor'),'font-weight':'bold'});
				var val = selectElement.val();
				var newcolor = (val!='')? $(selections).last().css('color') : selectElement.data('_cachedColor');
				var newweight = (val!='')? 'normal' : 'bold';
				selectElement.css({'color':newcolor,'font-weight':newweight});
				span.text(selectElement.children("option:selected").html());
				span.css({'color':newcolor,'font-weight':newweight});
				// $.validationEngine.loadValidation(this);
			}
			
			function selectKeypressHandler(e){
				var code;
				if (e.keyCode) code = e.keyCode;
				else if (e.which) code = e.which;
				var character = String.fromCharCode(code).toLowerCase();
				var selectElement = $(this);
				var selections = selectElement.children();
				var span = selectElement.siblings("span");
				switch(code){
					case 40:
						// down
						if(selectElement.data("_carat")<selectElement.children().length-1){
							selectElement.data("_carat",selectElement.data("_carat")+1);
						}
						break;
					case 38:
						// up
						if(selectElement.data("_carat")>0){
							selectElement.data("_carat",selectElement.data("_carat")-1);
						}
						break;
					default:
						if(character!=''){
							var foundOne = false;
							for(var i=Math.min(selectElement.data("_carat")+1, selections.length-1); i<selections.length; i++){
								if($(selections[i]).text().substr(0,1).toLowerCase()==character){
									selectElement.data("_carat",i);
									foundOne = true;
									break;
								}
							}
							if(!foundOne){
								for(var i=0; i<Math.min(selectElement.data("_carat")+1, selections.length); i++){
									if($(selections[i]).text().substr(0,1).toLowerCase()==character){
										selectElement.data("_carat",i);
										foundOne = true;
										break;
									}
								}
							}
						}
						break;
				}
				var caratOption = selections.eq(selectElement.data("_carat"));
				span.html(caratOption.html())
				if(caratOption.val()==''){
					span.css({'color':selectElement.data('_cachedColor'),'font-weight':'bold'});
				} else {
					span.css({'color':caratOption.css('color'),'font-weight':caratOption.css('font-weight')});
				}
			}
			
			$("select").data('_cachedColor',$("select").css('color'))
				.change(selectChangeHandler)
				.keydown(selectKeypressHandler).change();
				
			function handleScroll(e){
				var formErrors =  $(".formError");
				if(formErrors.length==0) return;
				formErrors.each(function(){
					var classAttr = $(this).attr('class');
					var classNames = classAttr.split(" ");
					for(var j=0; j<classNames.length; j++){
						if(classNames[j].indexOf("formError")>0){
							var caller = $("#"+classNames[j].substr(0, classNames[j].indexOf("formError")));
							var callerTopPosition = $(caller).offset().top;
							var callerleftPosition = $(caller).offset().left;
							var callerWidth =  $(caller).width();
							var inputHeight = $(this).height();
	
							/* POSITIONNING */
							if($.validationEngine.settings.promptPosition == "topRight"){callerleftPosition +=  callerWidth -30; callerTopPosition += -inputHeight -10; }
							if($.validationEngine.settings.promptPosition == "topLeft"){ callerTopPosition += -inputHeight -10; }
		
							if($.validationEngine.settings.promptPosition == "centerRight"){ callerleftPosition +=  callerWidth +13; }
		
							if($.validationEngine.settings.promptPosition == "bottomLeft"){
								callerHeight =  $(caller).height();
								callerleftPosition = callerleftPosition;
								callerTopPosition = callerTopPosition + callerHeight + 15;
							}
							if($.validationEngine.settings.promptPosition == "bottomRight"){
								callerHeight =  $(caller).height();
								callerleftPosition +=  callerWidth -30;
								callerTopPosition +=  callerHeight + 15;
							}
							$(this).stop(true, true).animate({
								top:callerTopPosition,
								left:callerleftPosition
							},100);
						}
					}
				});
			}
			
			$("form").parents("div.scrollpane").unbind("scroll resize").bind("scroll resize",handleScroll);
			$(window).unbind("wresize",handleScroll).wresize(handleScroll);
			
		}		
		
		$("form#registrationForm").attr({"enctype":"multipart/form-data","encoding":"multipart/form-data"});
		
		// pre-submit callback 
		function showAjaxSubmitRequest(formData, $form, options) { 
			// formData is an array; here we use $.param to convert it to a string to display it 
			// but the form plugin does this for you automatically when it submits the data 
			var queryString = $.param(formData); 
		 
			// jqForm is a jQuery object encapsulating the form element.  To access the 
			// DOM element for the form do this: 
			// var formElement = $form[0]; 
			
			
			$form.slideUp();
		 
			//alert('About to submit: \n\n' + queryString); 
		 
			// here we could return false to prevent the form from being submitted; 
			// returning anything other than false will allow the form submit to continue 
			return true; 
		} 
				
		// post-submit callback 
		function showAjaxSubmitResponse(responseText, statusText, xhr, $form)  { 
			// for normal html responses, the first argument to the success callback 
			// is the XMLHttpRequest object's responseText property 
		 
			// if the ajaxSubmit method was passed an Options Object with the dataType 
			// property set to 'xml' then the first argument to the success callback 
			// is the XMLHttpRequest object's responseXML property 
		 
			// if the ajaxSubmit method was passed an Options Object with the dataType 
			// property set to 'json' then the first argument to the success callback 
			// is the json data object returned by the server 
		 
			//alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + '\n\nThe output div should have already been updated with the responseText.'); 
			
			// $('.admissions .content-wrapper').replaceWith($('<div>'+responseText+'</div>').find('.admissions .content-wrapper'));
			$.address.value('/apply/admissions-confirmation.php');
			
		} 
		
		
		$("form#registrationForm").validationEngine({
			inlineValidation: true,
			ajaxSubmit: false,
			ajaxSubmitFile:  $('form#registrationForm').attr('action'), 
			ajaxSubmitMessage: "<a id=\"confirmation-message-anchor\" name=\"confirmation-message-anchor\"></a><div class=\"confirmation-message opacity6\"><h3>Thank you for registering!</h3>\n<p>You will receive an email confirming your account&#8212;please keep this for your records.</p></div>", 
			ajaxSubmitExtraData: "ajax=1",
			scroll:true,
			promptPosition: "topRight",
			success : function() {
				$.fn.ajaxSubmit.debug = true;
				$('form#registrationForm').ajaxSubmit({
					iframe:true,
					beforeSubmit:showAjaxSubmitRequest, 
					success:showAjaxSubmitResponse
				});
				return true;
			},
			failure : function() {}
		});	
		
		$("form#contact-form-fields").validationEngine({
			inlineValidation: true,
			ajaxSubmit: true,
			ajaxSubmitFile:  $('form').attr('action'), 
			ajaxSubmitMessage: "<a id=\"confirmation-message-anchor\" name=\"confirmation-message-anchor\"></a><div class=\"confirmation-message opacity7\"><p>Thanks for sending your details to us!!!</p>", 
			ajaxSubmitExtraData: "ajax=1",
			scroll:true,
			promptPosition: "topRight",
			success : function(){$.address.value('/contact/contact-submission-confirmation.php'); return true;},
			failure : function() {}
		});	
	}
	
	function handleArrowMouseOverOut(event) {
		
		if(event.type == 'mouseover'){
			var hovered= $('.fade');
			var fade = $('.big-arrow');
			fade.width('178px').height('308px');
			var offset= hovered.offset();
			var h = offset.top;
			var w = 178*h/308;
			fade.height(h).width(w).css({'top':'5px','left':'-'+(fade.width()/4)+'px'});
			fade.stop().fadeTo(250,1);
			hovered.stop().fadeIn(0,1);
			fade.find('img').attr('alt',hovered.find('img').attr('alt'));
		}else{
			var fade = $('.big-arrow');
			var hovered= $('.fade');
			fade.stop().fadeOut(250);
			hovered.stop().fadeTo(0,1);
			fade.find('img').attr('alt','');
		}
	}
	
	function archivelink_clickHandler(event){
		var $a = $(this);
		var attr =  $a.attr("href");
		var href = this.href;
		
		$.address.value(attr);
		
		return false;
	}
	
	//$(document).pngFix();
	$("body").css({height:"auto"});
	
	$("#main-nav-arrow-wrapper").css({display:"block"});
	$("#main-nav a, #bdw-logotype a, #bdw-logo a, .pagecontent a:not(.main-nav-arrow-link, .team-member-name, .fade, .big-arrow), .secondary-nav a, .tertiary-nav a").live("click", a_clickHandler);
	$(".wallkit_posts a").live("click", wallkitPosts_clickHandler);
	$("#promoMenu a").live("click", promo_clickHandler);
	$("a[href^=/archive/]").live("click", archivelink_clickHandler);
	$("#main-nav-arrow-link, .main-nav-arrow-link").live("click", handleNavArrowClick);
	$("#more-or-less-arrow-link, #bottom-commentary-connect-btn a, #close-comments a").live("click",expandComments_clickHandler);
	$('.fade').live('mouseover mouseout',handleArrowMouseOverOut);
	
	$("#wrapper").show();
	
	drawLayout();
	
	// initialize facebook
	initFB();	
	
	$("#header-wrapper>h1").hide();
	$("#top-content").hide();

	$.scrollTo("#top-wrapper",400);
	
	$(window).scroll(function(){
		var pos = parseInt( $(document).scrollTop() ); 
		var h =  $(window).height()-37;
		if(pos>=h){
			var toggledBottom = $("#main-nav-arrow").hasClass("active");
			if(!toggledBottom){
				toggleBottomWrapper();
			}
		}
	});
	
	$(window).wresize(function(){drawLayout()}).blur(function(){spectrum(true)}).focus(function(){spectrum(true); if(currentScrollTop==0){spectrum()}});
	
	//$.address.crawlable(true);
	$.address.init(address_initHandler);
	$.address.change(address_changeHandler);
	
	window.explain_bookmarklet = function() {
		alert('Drag this to your Bookmarks Bar to install.');
		return false;
	}
	
	
	
	

});

