var score=0;
var questions = {
	part1: new Array(),
	part2: new Array(),
	part3: new Array(),
	checkedQuestions: [false,false,false,false,false,false]
}
var currentQuestion;
var points = {
	q1_a1: 5,
	q1_a2: 5,
	q1_a3: -5,
	q1_a4: -5,
	q1_a5: -5,
	q1_a6: -5,

	q2_a1: 1,
	q2_a2: 1,
	q2_a3: 3,
	q2_a4: 1,
	q2_a5: 2,
	q2_a6: 2,

	q3_a1: 2,
	q3_a2: 1,
	q3_a3: 1,
	q3_a4: 2,
	q3_a5: 1,
	q3_a6: 1,
	q3_a7: 1,
	q3_a8: 2,
	q3_a9: 1,
	q3_a10: 2,
	q3_a11: 1,
	q3_a12: 2,
	q3_a13: 2,
	q3_a14: 1,
	q3_a15: 1,
	q3_a16: 2,
	q3_a17: 2
}

var Rules = {
	'div#yesButton:click': function(element) {
		var box = currentQuestion;
		var val = eval('points.'+box);
		updateScore(val*1);		// add to the score
		goToNextQuestion(box);
	},
	'div#noButton:click': function(element) {
		var box = currentQuestion;
		goToNextQuestion(box);
	},
	'div#continueButton:click': function(element) {
		var box = currentQuestion;
		goToNextQuestion(box);
	},
	'#a1 div.answer li:click': function(element) {
		if (!element.parentNode.hasClassName('answer')) {
			element = element.parentNode;
		}
		var box = element.parentNode.id;
		var val = eval('points.'+box);
		var q = box.substr(-1,1);
		if (isQuestionChecked(box)) {
			questions.checkedQuestions[(q-1)]=false;
			element.className='checked_n';
			updateScore(val*-1);	// subtract from the score
		}
		else {
			questions.checkedQuestions[(q-1)]=true;
			element.className='checked_y';
			updateScore(val*1);		// add to the score
		}
	}
	/*'#a1 div.answer:click': function(element) {
		var box = element.id;
		var val = eval('points.'+box);
		updateScore(val*1);		// add to the score
		goToNextQuestion(box);
	}*/
}

function isQuestionChecked(q) {
	var isChecked = false;
	q = q.substr(-1,1);
	isChecked = questions.checkedQuestions[(q-1)];
	return isChecked;
}

function updateScore(val) {
	score += val*1;

	var queue = Effect.Queues.get('myQueue');
	queue.each(function(e) { e.cancel() });
	
	Effect.Fade('score', {
		duration:0.1,
		from:1.0, to:0.01,
		queue: {position: "end", scope: "myQueue"}
	});
	$('score').innerHTML = score;
	Effect.Appear('score', {
		duration:0.5,
		from:0.01, to:1.0,
		queue: {position: "end", scope: "myQueue"}
	});
}


function getQuestions() {
	var divs = document.getElementsByTagName("div");
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className=="answer") {
			if (divs[i].id.match(/^q1_/)) {
				questions.part1.push(divs[i].id);
			}
			if (divs[i].id.match(/^q2_/)) {
				questions.part2.push(divs[i].id);
			}
			if (divs[i].id.match(/^q3_/)) {
				questions.part3.push(divs[i].id);
			}
		}
	}
	currentQuestion = questions.part1[0];
}


function hideStuff() {
	var divs = document.getElementsByTagName("div");
	for (var i=0; i<divs.length; i++) {
		if (divs[i].className=="answer") {
			if (!divs[i].id.match(/^q1_/)) divs[i].style.display='none';
		}
	}
}


function goToNextQuestion(box) {
	if (box.match(/^q1_/)) {
		// go to part 2
		currentQuestion = questions.part2[0];
		Effect.Fade('continue', { duration:0.25 });
		Effect.DropOut('p1', { duration:0.5, queue: 'end' });
		Effect.BlindDown('p2', { duration:0.25, queue: 'end' });
		Effect.BlindDown('q2_a1', { duration:0.25, queue: 'end' });
		Effect.SlideDown('yesno', { duration:0.25, queue: 'end' });
	}
	else if (box.match(/^q2_/)) {
		questions.part2.shift();
		Effect.Fade('yesno', { duration:0.25 });
		if (questions.part2.length>0) {
			currentQuestion = questions.part2[0];
			Effect.DropOut(box, { duration:0.5, queue: 'end' });
			Effect.Appear(questions.part2[0], { duration:0.5, queue: 'end' });
		}
		else {
			// go to part 3
			currentQuestion = questions.part3[0];
			Effect.DropOut('p2', { duration:0.5, queue: 'end' });
			Effect.BlindDown('p3', { duration:0.25, queue: 'end' });
			Effect.BlindDown('q3_a1', { duration:0.25, queue: 'end' });
		}
		Effect.Appear('yesno', { duration:0.01, queue: 'end' });
		Effect.SlideDown('yesno', { duration:0.25, queue: 'end' });
	}
	else if (box.match(/^q3_/)) {
		questions.part3.shift();
		Effect.Fade('yesno', { duration:0.25 });
		if (questions.part3.length>0) {
			currentQuestion = questions.part3[0];
			Effect.DropOut(box, { duration:0.5, queue: 'end' });
			Effect.Appear(questions.part3[0], { duration:0.5, queue: 'end' });
			Effect.Appear('yesno', { duration:0.01, queue: 'end' });
			Effect.SlideDown('yesno', { duration:0.25, queue: 'end' });
		}
		else {
			// go to the finale
			Effect.DropOut('p3', { duration:0.5, queue: 'end' });
			finalScore();
			Effect.BlindDown('p4', { duration:0.5, queue: 'end' });
		}
	}
}


function finalScore() {
	if (score >= 40) {
		$('clevertext').innerHTML = "Call <a href=\"http://www.calpers.ca.gov/\" target=\"_blank\">CalPERS</a> and tell them you're raising a new fund.";
	}
	else if (score >= 35) {
		$('clevertext').innerHTML = "Call <a href=\"http://www.sequoiacap.com/\" target=\"_blank\">Sequoia</a> and <a href=\"http://www.kpcb.com/\" target=\"_blank\">Kleiner, Perkins</a> and tell them that you're available.";
	}
	else if (score >= 25) {
		$('clevertext').innerHTML = "Send your resume to 2,000 venture capitalists and pray.";
	}
	else if (score <= 24) {
		$('clevertext').innerHTML = "Work until you can score higher, keep flying on <a href=\"http://www.southwest.com/\" target=\"_blank\">Southwest Airlines</a>.";
	}
}


var EventSelectors = {
  version: '1.0_pre',
  cache: [],
  
  start: function(rules) {
    this.rules = rules || {};
    this.timer = new Array();
    this._extendRules();
    this.assign(this.rules);
  },
  
  assign: function(rules) {
    var observer = null;
    this._unloadCache();
    rules._each(function(rule) {
      var selectors = $A(rule.key.split(','));
      selectors.each(function(selector) {        
        var pair = selector.split(':');
        var event = pair[1];
        $$(pair[0]).each(function(element) {
          if(pair[1] == '' || pair.length == 1) return rule.value(element);
          if(event.toLowerCase() == 'loaded') {
            this.timer[pair[0]] = setInterval(this._checkLoaded.bind(this, element, pair[0], rule), 15);
          } else {
            observer = function(event) {
              var element = Event.element(event);
              if (element.nodeType == 3) // Safari Bug (Fixed in Webkit)
            		element = element.parentNode;
              rule.value($(element), event);
            }
            this.cache.push([element, event, observer]);
            Event.observe(element, event, observer);
          }
        }.bind(this));
      }.bind(this));
    }.bind(this));
  },
  
  // Scoped caches would rock.
  _unloadCache: function() {
    if (!this.cache) return;
    for (var i = 0; i < this.cache.length; i++) {
      Event.stopObserving.apply(this, this.cache[i]);
      this.cache[i][0] = null;
    }
    this.cache = [];
  },
  
  _checkLoaded: function(element, timer, rule) {
    var node = $(element);
    if(element.tagName != 'undefined') {
      clearInterval(this.timer[timer]);
      rule.value(node);
    }
  },
  
  _extendRules: function() {
    Object.extend(this.rules, {
     _each: function(iterator) {
       for (key in this) {
         if(key == '_each') continue;         
         var value = this[key];
         var pair = [key, value];
         pair.key = key;
         pair.value = value;
         iterator(pair);
       }
     }  
    });
  }
}

Event.observe(window, 'load', function(event){
	updateScore(0);
	hideStuff();
	getQuestions();
	EventSelectors.start(Rules);
});
