// document.observe('dom:loaded', function(e) {
Event.observe(window, 'load', function(){
	if (!loggedIn())
		$$(".members-only").invoke("show");
});

// var storyUrl = function (string) {
// 	return string.toString().replace(/(stories\/\d+).+$/, "$1");
// }

// this is for browser detection
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	
			string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

Event.observe(window, 'load', function(e) {
	// story mouseovers 
	$$('.story .highlight').each(function(el){
		el.observe('mouseover', function(){
			var i = el.up('.story').down('.image a img');
			i.src = i.src.sub('_bw.', '.');
		});
		el.observe('mouseout', function(){
			var i = el.up('.story').down('.image a img');
			if (i.src.indexOf("_bw.") == -1) { // sometimes mouseout fires twice in a row
				i.src = i.src.sub(/\.(?!.*\.)/, '_bw.');
			}
		});
	});
	
	// browser detection	
	BrowserDetect.init();
	if ((BrowserDetect.browser == "Safari") || BrowserDetect.browser == "Firefox" && BrowserDetect.version == "2") {
		// fix navigation shifting in safari and ff2
		$('navigation').style.marginLeft = "20px";
	}
});


// detect an enter key press in any browser
function checkEnter(e){ //e is event object passed from function invocation
	var characterCode;

	if (e && e.which) { //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	} else {
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
		return false;
	}	else {
		return true; 
	}
}

// this is for centering the top bg in ie6
Event.observe(window, "resize", function() {
	$('top').style.width = (document.body.clientWidth < 941) ? "940px" : "auto";
});

function loggedIn () {
  return Cookie.get('logged_in');
}

function returningUser () {
  return Cookie.get('returning');
}

function lightbox (type) {		
  if (typeof type == 'undefined') type = returningUser() ? 'login' : 'register';
  if (!loggedIn()) {
    var el = 'lb_' + type;
    var top = (document.viewport.getScrollOffsets().top + document.viewport.getHeight()/2 - $(el).getHeight()/2);
    var left = (document.viewport.getWidth()/2 - $(el).getWidth()/2);
    $(el).setStyle({'top': top+'px', 'left': left+'px'}).show();
	hideAudioVideo();
    return true;
  } else return false;
}

function lightbox2(el){
 	el = $(el).remove();
 	document.body.insert(el);
 	var top = (document.viewport.getScrollOffsets().top + document.viewport.getHeight()/2 - $(el).getHeight()/2);
 	var left = (document.viewport.getWidth() - $(el).getWidth())/2;
 	$(el).setStyle({'top': top+'px', 'left': left+'px'});
	$(el).show();
}

function hideAudioVideo() {
	if ($('primaryContent')) {
		var els = document.getElementsByTagName('embed');
		for (var x=0; x<els.length; x++) {
			els[x].style.visibility = "hidden";	
		}
	}
}
function showAudioVideo() {
	if ($('primaryContent')) {
		var els = document.getElementsByTagName('embed');
		for (var x=0; x<els.length; x++) {
			els[x].style.visibility = "visible";	
		}
	}	
}

if (typeof GoodForm != "undefined" && typeof GoodForm.Validate != "undefined") {
	GoodForm.Validate.Effect = function (name, response) {
	 	var fEls =  document.getElementsByName(name);
	 	var fEl = fEls[fEls.length - 1];
	 	var status = GoodForm.Helpers.parseResponse(response);
	 	var l = $(fEl).previous('label') ? $(fEl).previous('label').innerHTML.sub(/<span>.*<\/span>/, '') : '';
	 	try { if ($validatingAll) $(fEl).up().removeClassName('error').removeClassName('warning') } catch (e) { $validatingAll = false; };
	 	if ( vEl = $(fEl).up(1).descendants().find(function(e){ return e.hasClassName('validation') }) ){
	   		if ( ivEl = $(vEl).descendants().find(function(e){ return e.hasClassName($(fEl).readAttribute('id')) })) {
	     		$(ivEl).update('');
	   		} else {
	     		$(vEl).update('');
	   		}
	   		if (status == "error"){
	     		response.without("can't be blank").uniq().each(function(r){
	       			var span = new Element('span').update(l+' '+r);
	       			$(ivEl) ? $(ivEl).insert(span) : $(vEl).insert(span);
	     		});
	   		}
	 	}
	 	if (status == "error") {
	   		$(fEl).up().addClassName('error');
	   		if ($(fEl).up().next() && $(fEl).up().next().hasClassName('span-two')) $(fEl).up().next().addClassName('error');
	 	}
	}
}

// Sliding Product Reviews (infinite movement)

/* var Sliderule = Class.create({
	initialize: function(viewer, wrapper, slides) {
		this.viewer = $(viewer);
		this.wrapper = $(wrapper);
		this.slides = slides;
		this.options = Object.extend({
			next: false,
			prev: false,
			onSlide: function() {}
		}, arguments[3] || {});
		this.stylizeViewer();
		this.widthifyWrapper();
		this.buildIndicator();
		this.listen();
		this.transition = false;
		this.currentSlide = 0;
	},
	stylizeViewer: function() {
		//this.viewer.style.width = this.slides[0].offsetWidth+'px';
		this.viewer.style.width = '640px';
		this.viewer.style.overflow = 'hidden';
	},
	widthifyWrapper: function() {
		var width = 0;
		for (var i=0;i<this.slides.length;i++) {
			width += this.slides[i].offsetWidth;
		}
		this.wrapper.style.width = width+'px';
		this.wrapper.style.position = 'relative';
	},
	buildIndicator: function() {
		el = $('indicator');
		pages = Math.ceil(this.slides.length/3);
		str = '';
		for ( i = 0; i < pages; i++ ) {
			str += '<span></span>';
		}
		el.insert(str);
		$$('#indicator span')[0].addClassName('current');
// 		console.log(pages);
	},
	listen: function() {
		if (this.options.next) {
			this.options.next = (this.options.next.constructor == Array) ? this.options.next:[this.options.next];
			for (var i=0;i<this.options.next.length;i++) {
				Event.observe(this.options.next[i], 'click', function() {
					this.turnPage(false);
				}.bind(this));
			}
		}
		if (this.options.prev) {
			this.options.prev = (this.options.prev.constructor == Array) ? this.options.prev:[this.options.prev];
			for (var i=0;i<this.options.prev.length;i++) {
				Event.observe(this.options.prev[i], 'click', function() {
					this.turnPage(true);
				}.bind(this));
			}
		}
	},
	turnPage: function(reverse) {
		if (this.transition) {
			return false;
		}
		this.transition = true;
		var oldSlide = this.currentSlide;
		if (reverse) {
			this.currentSlide = (this.currentSlide == 0) ? this.slides.length-1:this.currentSlide-1;
		} else {
			this.currentSlide = (this.currentSlide == this.slides.length-1) ? 0:this.currentSlide+1;
		}

		if (reverse && this.slides[oldSlide].offsetLeft < this.slides[oldSlide].offsetWidth) {
			this.wrapper.insertBefore(this.slides[this.currentSlide], this.slides[oldSlide]);
			this.wrapper.style.left = '-'+this.slides[this.currentSlide].offsetWidth+'px';
		// originally this.slides.length-1
		// checked for (this.slides.length-3)*this.slides[oldSlide].offsetWidth to begin appending concurrent slides three from the end as opposed to at the end
		} else if (!reverse && this.slides[oldSlide].offsetLeft >= (this.slides.length-3)*this.slides[oldSlide].offsetWidth) {
			// originally this.currentSlide
			// used (this.currentSlide+2)%this.slides.length to put the next slide in the 3rd slot
			this.wrapper.appendChild(this.slides[(this.currentSlide+2)%this.slides.length]);	
			// originally this.slides.length-2
			// used (this.slides.length-4) to stop moving the wrapper two slides before the end
			this.wrapper.style.left = '-'+((this.slides.length-4)*this.slides[this.currentSlide].offsetWidth)+'px';				
		}
		
		//alert(this.slides[oldSlide].offsetLeft);
		//alert((this.slides.length-1)*this.slides[oldSlide].offsetWidth);
		
		new Effect.Move(this.wrapper, {y: 0, x: (this.slides[this.currentSlide].offsetWidth)*((reverse) ? 1:-1), afterFinish: function() { this.transition = false; }.bind(this)});
		this.options.onSlide(this.slides[this.currentSlide]);
		
		// Beginnings of the indicator updater
		$$('#indicator span').invoke('removeClassName', 'current');
	}
}); */

// Slide module w/ finite functionality

// super sliding action

Event.observe(window, 'load', function(e) {
	if ($$('#carousel #stories .story').length > 0) {
		var width = 0;
		var slides = $$('#carousel #stories .story');
		var wrapper = $('stories');
		for (var i=0; i<slides.length; i++) {
			width += slides[i].offsetWidth;
		}
		wrapper.style.width = width+'px';
		wrapper.style.position = 'relative';
	}
});

function jumpTo(page) {
	var containerArea = 640,
		container = $('stories'), 
		containerOffSet = $('stories').positionedOffset(),
		current = Math.floor(-containerOffSet[0]/containerArea),
		distance = ((current - page) * containerArea);
	if (distance != 0) {
		new Effect.Move(container, {
			queue: { position: 'end', scope: 'carousel', limit: 1 },
			x: distance,
			mode: 'relative',
			afterFinish: function() { updateIndicator(page) }
		});
	}
}

function viewMoreGo() {

	var containerArea = 640,
		container = $('stories'), 
		containerWidth = $('stories').getWidth(),
		containerOffSet = $('stories').positionedOffset();
		
	if(-containerOffSet[0] < containerWidth - containerArea) {
		new Effect.Move(container, { 
			queue: { position: 'end', scope: 'carousel', limit: 1 },
			x: -containerArea, 
			mode: 'relative',
			afterFinish: function() { updateIndicator((-containerOffSet[0]+containerArea)/containerArea) }
		});
	}
	else if (containerWidth <= containerArea ) {
		// may want to do something special when 3 or less photos are present
	}
	else {
		new Effect.Move(container, { 
			queue: { position: 'end', scope: 'carousel', limit: 1 },
			duration: 1,
			x: -containerOffSet[0] , 
			mode: 'relative',
			afterFinish: function() { updateIndicator(0) }
		});
	}
}

function viewLessGo() {

	var containerArea = 640,
		container = $('stories'), 
		containerWidth = $('stories').getWidth(),
		containerOffSet = $('stories').positionedOffset();
		
	if(containerOffSet[0] == 0) {
		// at starting position
	}
	else if (containerWidth == containerArea ) {
		// may want to do something special when 3 or less photos are present
	}
	else {
		new Effect.Move(container, { 
			queue: { position: 'end', scope: 'carousel', limit: 1 },
			duration: 1,
			x: containerArea, 
			mode: 'relative',
			afterFinish: function() { updateIndicator(-(containerOffSet[0]+containerArea)/containerArea) }
		});
	}
}

function updateIndicator(page) {
	$$('#indicator a').invoke('removeClassName', 'current');
	$$('#indicator a')[Math.ceil(page)].addClassName('current');
}

Event.observe(window, 'load', function(e) {
	if ($$('#carousel #stories .story').length > 0) {
		slides = $$('#stories .story');
		el = $('indicator');
		pages = Math.ceil(slides.length/3);
		str = '';
		for ( i = 0; i < pages; i++ ) {
			str += '<a onclick="jumpTo(' + i + ');"></a>';
		}
		el.insert(str);
		$$('#indicator a')[0].addClassName('current');
	}
});


// Event.observe(window, 'load', function() {
// 	new Sliderule('storiesWindow', 'stories', $$('.mini'), {next: $A($$('#carousel .next')), prev: $A($$('#carousel .prev'))});
// });

// Change story tabs

function swapTab(obj, tabId, total) {
    for(var x=1; x<=total; x++) {
		var tab = false;
		tab = document.getElementById( "tab_"+x );
		var content = false;
		content = document.getElementById( "content_"+x );
        if(tab){
            if(content){
			if (x == tabId){
				tab.className = "active";
				content.style.display = "";
			}else{
				tab.className = "";
				content.style.display = "none";
			}
			}
		}
    }
}

// Used by Story detail and member profile for when user removes comment
function replaceAccountBarCommentCount(newCommentCount){
	$$('.comments_count').each(function(x){
		x.innerHTML = newCommentCount;
	});
	$("comments_count_word_form").innerHTML = getSidebarStatsWordForm("comments_count", newCommentCount);	
}

// Returns the correct form of the word 'story' based on the count
function getSidebarStatsWordForm(stat_type, count){
	var returnVal = '';
	switch(stat_type){
			case "comments_count":
				returnVal = (count == "1") ? "comment" : "comments";
				break;
			default:
				returnVal = (count == "1") ? "story" : "stories"; 
	}
	return returnVal;
	// COOKIE_CLASS_MAP = {
	// 			    "member_id"       => "id",
	// 			    "favorites_count" => "favorites_count",
	// 			    "comments_count"  => "comments_count",
	// 			    "stories_count"   => "story_submissions_count"
	// 			  }

	// story_count == 1 ? return 'story' : return 'stories';
	// if(story_count == 1)
	// 	return 'story';
	// else
	// 	return 'stories'
}

// Returns the correct form of the word 'comment' based on the count
// function getCommentForm(comment_count){
// 	comment_count == 1 ? return 'comment' : 'comments';
// }
