/* add the voting buttons */

function addvoting() {
	var sites = getVotedSites();
	$$("div.fuskerpreview").each(function(el) {
		var id = el.id;
		if (sites.indexOf(id)==-1) {
			pro = Builder.node('img', {className: 'votebutton',
									   src:'/fusker/res/rocks.png',
									   onMouseOver:'btflip(this, \'h\');',
									   onMouseOut:'btflip(this, \'\');',
									   onMouseDown: 'btflip(this, \'p\');',
									   onMouseUp: 'btflip(this, \'h\');',
									   onClick: 'vote(\''+id+'\', \'r\');'});
			con = Builder.node('img', {className: 'votebutton',
									   src:'/fusker/res/sucks.png',
									   onMouseOver:'btflip(this, \'h\');',
									   onMouseOut:'btflip(this, \'\');',
									   onMouseDown: 'btflip(this, \'p\');',
									   onMouseUp: 'btflip(this, \'h\');',
	   								   onClick: 'vote(\''+id+'\', \'s\');'});
			frm = Builder.node('div', {id: 'vote'+id, className: 'fvote'}, ['Vote: This site ', pro, ' ', con]);
			el.appendChild(frm);
		}
	});
}

function btflip(el, newstate) {
	if (el.src.indexOf('rocks')!=-1) {
		el.src = '/fusker/res/rocks'+newstate+'.png';
	} else {
		el.src = '/fusker/res/sucks'+newstate+'.png';
	}
}

function vote(target, vote) {
	new Ajax.Request('/fusker/feedback.php', {
					 method: 'post',
					 postBody: 'type'+'=vote&target='+target+'&vote='+vote });
	addVotedSite(target);
	new Effect.SwitchOff( 'vote'+target );	
}

/**
 * this function will be called at the foot of the body, so we do not
 * have to wait until all images are loaded (or timed out)
 */
function afterload() {
	addvoting();
}

function getVotedSites() {
	try {
		var	sites = document.cookie.match('fuskervote=([^;]*)')[1];
	} catch(e) {
		var sites = '';
	}
	return sites.split('+');
}

function addVotedSite(site) {
	var cookiestr = '';
	sites = getVotedSites();
	sites.push(site);
	for (var i=0; i<sites.length; i++) {
		if (sites[i].length>0)
			cookiestr = cookiestr + sites[i] + '+';
	}
	var expDate = new Date();
	expDate.setTime(expDate.getTime()+1*24*60*60*1000);
	document.cookie = 'fuskervote' + '=' + escape(cookiestr) + ';expires=' + expDate.toGMTString() + ';path=/';	
}

function onError(image, site) {
	new Ajax.Request('/fusker/feedback.php', {
					 method: 'post',
					 postBody: 'type'+'=error&fusker='+site+'&url='+image.src });
	if (!curRepl[site]) { curRepl[site] = 0; }
	if (curRepl[site] < repl[site].length) {		
		var newImg = repl[site][curRepl[site]]['img'];		
		var newUrl = repl[site][curRepl[site]]['url'];
		image.src = newImg;
		image.parentNode.href = newUrl;
		curRepl[site] = curRepl[site] + 1;		
	} else {
		image.src = '/fusker/res/broken.gif';
		image.height = '50';
		image.parentNode.href = '';
	}
}

function installScript( script )
{
	// in IE, there is window.execScript
	if (window.execScript) {
		window.execScript(script);
	} else {
	// this approach seems to work in konqueror, firefox
	// what about opera?
	var t_script = document.createElement('script');
	t_script.setAttribute('type', 'text/javascript');
	t_script.innerHTML = script;
	document.body.appendChild(t_script);
	}
}

function hideFuskerImages() {
	document.getElementsByClassName('fuskerimg').each(function f(e) { e.setAttribute('src', '/fusker/res/avs/qmark.png'); });	
}


function avscheck() {
	try {
	if (!navigator.cookieEnabled || window.location.href.indexOf('avs=off')>0) {
		return;
	}
	if (document.cookie.search('AreYouOldEnough=YesSir')==-1||window.location.href.indexOf('avs=on')>-1) {		
		RUZEE.Events.add(window,'domload',function(){
			hideFuskerImages();
			new Ajax.Request('/fusker/res/avs/avs.js', {method: 'get', onComplete: function(r) {
					installScript(r.responseText);
					avsstart(); 
			}});
		});
	  }
	} catch (err) {
		window.location.href=window.location.href+'?avs=off';
		window.location.reload();
	}	
 }

var curRepl = new Object();

/***-below that line are imported scripts-***/
/** ruzee.events, from http://www.ruzee.com/blog/ruzeeevents/ **/
var RUZEE=window.RUZEE||{};

RUZEE.Events={
  domloadEvents:[],
  domloadDone:false,

  add:function(obj,event,fn,useCapture){
    if(event=='domload'){
      RUZEE.Events.domloadEvents.push(fn);
      return true;
    }
    if(obj.addEventListener){
      obj.addEventListener(event,fn,useCapture);
      return true;
    }
    if(obj.attachEvent){
      return obj.attachEvent('on'+event,fn);
    }
    var f=obj['on'+event];
    obj['on'+event]=(f&&typeof f=='function')?function(){ f(); fn(); }:fn;
  },

  remove:function(obj,event,fn,useCapture){
    if(obj.removeEventListener){
      obj.removeEventListener(event,fn,useCapture);
      return true;
    }
    if (obj.detachEvent){
      return obj.detachEvent('on'+event,fn);
    }
    alert('Handler could not be removed!');
  },

  getSrc:function(e){
    var s;
    e=e||window.event;
    if(e.target) s=e.target;
    else if(e.srcElement) s=e.srcElement;
    if (s.nodeType==3) // defeat Safari bug
      s=s.parentNode;
    return s; 
  },

  ondomload:function(){
    if(RUZEE.Events.domloadDone) return;
    RUZEE.Events.domloadDone=true;

    for (var i=0; i<RUZEE.Events.domloadEvents.length; i++)
      RUZEE.Events.domloadEvents[i]();
  },

  domloadCheck:function(){
    if(RUZEE.Events.domloadDone) return true;

    var loaded=(/KHTML/i.test(navigator.userAgent))&&(/loaded|complete/.test(document.readyState));
    var eofAvail=document.getElementById&&document.getElementById('domloadeof');
    // wait till the element with ID domloadeof is in the DOM or readyState=loaded on KHTML
    if(loaded||eofAvail){
      RUZEE.Events.ondomload();
    }else{
      // Not ready yet, wait a little more.
      setTimeout('RUZEE.Events.domloadCheck()',100);
    }
    return true;
  }
};

// if possible, use the "standard" way
if(document.addEventListener)
  document.addEventListener('DOMContentLoaded', RUZEE.Events.ondomload, false);

// for Internet Explorer
/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_ondomload defer src=javascript:void(0)><\/script>");
document.getElementById("__ie_ondomload").onreadystatechange=function() {
  if (this.readyState=="complete") {
    RUZEE.Events.ondomload();
  }
};
/*@end @*/

setTimeout('RUZEE.Events.domloadCheck()',100);
// Just in case window.onload happens first, add it there, too
RUZEE.Events.add(window,'load', RUZEE.Events.ondomload);

/** lightbox gone wild, from http://particletree.com **/

/*-------------------------------GLOBAL VARIABLES------------------------------------*/

var detect = navigator.userAgent.toLowerCase();
var OS,browser,version,total,thestring;

/*-----------------------------------------------------------------------------------------------*/

//Browser detect script origionally created by Peter Paul Koch at http://www.quirksmode.org/

function getBrowserInfo() {
	if (checkIt('konqueror')) {
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser 	= "Safari"
	else if (checkIt('omniweb')) browser 	= "OmniWeb"
	else if (checkIt('opera')) browser 		= "Opera"
	else if (checkIt('webtv')) browser 		= "WebTV";
	else if (checkIt('icab')) browser 		= "iCab"
	else if (checkIt('msie')) browser 		= "Internet Explorer"
	else if (!checkIt('compatible')) {
		browser = "Netscape Navigator"
		version = detect.charAt(8);
	}
	else browser = "An unknown browser";

	if (!version) version = detect.charAt(place + thestring.length);

	if (!OS) {
		if (checkIt('linux')) OS 		= "Linux";
		else if (checkIt('x11')) OS 	= "Unix";
		else if (checkIt('mac')) OS 	= "Mac"
		else if (checkIt('win')) OS 	= "Windows"
		else OS 								= "an unknown operating system";
	}
}

function checkIt(string) {
	place = detect.indexOf(string) + 1;
	thestring = string;
	return place;
}

/*-----------------------------------------------------------------------------------------------*/

/* removed 2007-04-17, since we do that in avsstart()
Event.observe(window, 'load', initialize, false);
Event.observe(window, 'load', getBrowserInfo, false);
*/
Event.observe(window, 'unload', Event.unloadCache, false);

var lightbox = Class.create();

lightbox.prototype = {

	yPos : 0,
	xPos : 0,

	initialize: function(ctrl) {
		this.content = ctrl.href;
		Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);
		ctrl.onclick = function(){return false;};
	},
	
	// Turn everything on - mainly the IE fixes
	activate: function(){
		if (browser == 'Internet Explorer'){
			this.getScroll();
			this.prepareIE('100%', 'hidden');
			this.setScroll(0,0);
			this.hideSelects('hidden');
		}
		this.displayLightbox("block");
	},
	
	// Ie requires height to 100% and overflow hidden or else you can scroll down past the lightbox
	prepareIE: function(height, overflow){
		bod = document.getElementsByTagName('body')[0];
		bod.style.height = height;
		bod.style.overflow = overflow;
  
		htm = document.getElementsByTagName('html')[0];
		htm.style.height = height;
		htm.style.overflow = overflow; 
	},
	
	// In IE, select elements hover on top of the lightbox
	hideSelects: function(visibility){
		selects = document.getElementsByTagName('select');
		for(i = 0; i < selects.length; i++) {
			selects[i].style.visibility = visibility;
		}
	},
	
	// Taken from lightbox implementation found at http://www.huddletogether.com/projects/lightbox/
	getScroll: function(){
		if (self.pageYOffset) {
			this.yPos = self.pageYOffset;
		} else if (document.documentElement && document.documentElement.scrollTop){
			this.yPos = document.documentElement.scrollTop; 
		} else if (document.body) {
			this.yPos = document.body.scrollTop;
		}
	},
	
	setScroll: function(x, y){
		window.scrollTo(x, y); 
	},
	
	displayLightbox: function(display){
		$('overlay').style.display = display;
		$('lightbox').style.display = display;
		if(display != 'none') this.loadInfo();
	},
	
	// Begin Ajax request based off of the href of the clicked linked
	loadInfo: function() {
		var myAjax = new Ajax.Request(
        this.content,
        {method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)}
		);
		
	},
	
	// Display Ajax response
	processInfo: function(response){
		info = "<div id='lbContent'>" + response.responseText + "</div>";
		new Insertion.Before($('lbLoadMessage'), info)
		$('lightbox').className = "done";	
		this.actions();			
	},
	
	// Search through new links within the lightbox, and attach click event
	actions: function(){
		lbActions = document.getElementsByClassName('lbAction');

		for(i = 0; i < lbActions.length; i++) {
			Event.observe(lbActions[i], 'click', this[lbActions[i].rel].bindAsEventListener(this), false);
			lbActions[i].onclick = function(){return false;};
		}

	},
	
	// Example of creating your own functionality once lightbox is initiated
	insert: function(e){
	   link = Event.element(e).parentNode;
	   Element.remove($('lbContent'));
	 
	   var myAjax = new Ajax.Request(
			  link.href,
			  {method: 'post', parameters: "", onComplete: this.processInfo.bindAsEventListener(this)}
	   );
	 
	},
	
	// Example of creating your own functionality once lightbox is initiated
	deactivate: function(){
		Element.remove($('lbContent'));
		
		if (browser == "Internet Explorer"){
			this.setScroll(0,this.yPos);
			this.prepareIE("auto", "auto");
			this.hideSelects("visible");
		}
		
		this.displayLightbox("none");
	}
}

/*-----------------------------------------------------------------------------------------------*/

// Onload, make all links that need to trigger a lightbox active
function initialize(){
	addLightboxMarkup();
	lbox = document.getElementsByClassName('lbOn');
	for(i = 0; i < lbox.length; i++) {
		valid = new lightbox(lbox[i]);
	}
}

// Add in markup necessary to make this work. Basically two divs:
// Overlay holds the shadow
// Lightbox is the centered square that the content is put into.
function addLightboxMarkup() {
	bod 				= document.getElementsByTagName('body')[0];
	overlay 			= document.createElement('div');
	overlay.id		= 'overlay';
	lb					= document.createElement('div');
	lb.id				= 'lightbox';
	lb.className 	= 'loading';
	lb.innerHTML	= '<div id="lbLoadMessage">' +
						  '<p>Loading</p>' +
						  '</div>';
	bod.appendChild(overlay);
	bod.appendChild(lb);
}