function init_area()
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;
     load_questions(area);
     load_cands(area);
     show_coloring('P');
     predict();
     update_candlist();
}

function area_selected()
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;
     var url = "vaalikone?area=" + area + get_answ_urlparams(area);
     document.location = url;
}

function at_c_handler(event)
{
     answertoggle_changed(event.data.foo);
}

function animate_cand($x, $y, $id, $title)
{
     $('#highlight').show();
     $('#highlight').animate({top: $y, left: $x}, 2000);
     $('#highlight').attr('title', $title);
     $('#highlight').bind("click", {foo: $id}, at_c_handler);
}

function cand_selected()
{
     var cand = $('#cand')[0].options[$('#cand')[0].selectedIndex].value;

     if("-1" == cand)
     {
	  $('#highlight').hide();
	  return;
     }

     arr = cand.split("_");

     animate_cand(arr[0], arr[1], arr[2], arr[3]);
}

function select_answers()
{
     var areaidx = $('#area')[0].selectedIndex;

     for(i = 0; i < mapping[areaidx].length; i += 1)
     {
	  val = answers[mapping[areaidx][i]];
	  if(val != -1)
	  {
	       $("#radio"+i+"_"+val).attr("checked", "checked");
	  }
     }
}

function question_selected(qid, qvalue)
{
     var areaidx = $('#area')[0].selectedIndex;
     oldval = answers[mapping[areaidx][qid]];
     answers[mapping[areaidx][qid]] = qvalue;

     if(oldval != qvalue)
     {
	  select_answers(); // to ensure integrity
	  predict();
	  update_candlist();
     }
}

function show_coloring(id)
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;
     var imgsrc = "../map_" + area + "_" + id + ".png";
     var $legendurl = "../legends/legend_" + area + "_" + id;

     $('.visattrbox_highlight').removeClass("visattrbox_highlight");
     $('#vab'+id).addClass("visattrbox_highlight");

     $.ajax({
	type: "GET",
	url: $legendurl,
	cache: false,
	async: true,
	success: function(d){
	    $('#legend').html(d);
	}
     });

     $('#visimg')[0].src = imgsrc;
}

function load_questions(area)
{
     var $qdata = "cmd=questions&area=" + area;

     $.ajax({
	type: "GET",
	url: "vaalikone",
	data: $qdata,
	async: false,
	success: function(d){
	    $('#questions').html(d);
	    update_cand_answers();
	}
     });

     select_answers();
}

function parse_answers(d)
{
     arr = d.split("\n");

     for(i = 0; i < arr.length - 2; i++)
     {
	  entry = arr[i].split("\t");
	  if("before" == entry[0])
	       $(entry[1]).before(entry[2]);
	  else
	       $(entry[1]).after(entry[2]);
     }
}

function update_cand_answers()
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;

     var $qdata = "cmd=answers&area=" + area + get_show_urlparams(area);

     $('.SA').remove();

     if(shown_answers.length == 0)
	  return;

     $.ajax({
	type: "GET",
	url: "vaalikone",
	data: $qdata,
	async: true,
	success: function(d){
		    parse_answers(d);
	}
     });
}

function load_cands(area)
{
     var $qdata = "cmd=cands&area=" + area;

     $.ajax({
	type: "GET",
	url: "vaalikone",
	data: $qdata,
	async: false,
	success: function(d){
	    $('#cand').html(d);
	}
     });
}

function answertoggle_changed(id)
{
     found = 0;

     for(i = 0; i < shown_answers.length; i++)
     {
	  if(shown_answers[i] == id)
	  {
	       found = 1;
	       shown_answers.splice(i, 1);
	       break;
	  }
     }

     if(!found)
     {
	  shown_answers.splice(0, 0, id);
     }

     update_candlist();
     update_cand_answers();
}

function get_answ_urlparams(area)
{
     var str = '';
     for(i = 0; i < answers.length; i += 1)
     {
	  str = str + "&q"+i+"="+answers[i];
     }

     return str;
}

function get_show_urlparams(area)
{
     var str = '&show=';
     for(i = 0; i < shown_answers.length; i += 1)
     {
	  if(i > 0) str = str + "_";
	  str = str + shown_answers[i];
     }

     return str;
}

function update_candlist()
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;
     var str = "area=" + area + get_answ_urlparams(area);
     var shown = get_show_urlparams(area);

     var $ehd_url = "vaalikone?cmd=ehdlist&"+str+shown;

     $.ajax({
	type: "GET",
	url: $ehd_url,
	async: true,
	success: function(d){
	    $('#ehdlist').html(d);
	    $("#candlisttable tr").addClass("stripe");
	    $("#candlisttable tr:even").addClass("stripe2");
	}
     });
}

function predict()
{
     var area = $('#area')[0].options[$('#area')[0].selectedIndex].value;
     var str = "area=" + area + get_answ_urlparams(area);

     var $pos_url = "vaalikone?cmd=pos&"+str;

     $.ajax({
	type: "GET",
	url: $pos_url,
	cache: false,
	success: function(d){
		display_pos(d);
	}
     });

     return;
}

function display_pos(d)
{
     var pa = d.split(" ");
     var $left = pa[0];
     var $top = pa[1];

     $('#poscross').animate({top: $top, left: $left}, 2000);
     $('#pos_left').animate({top: $top}, 2000);
     $('#pos_right').animate({top: $top}, 2000);
     $('#pos_top').animate({left: $left}, 2000);
     $('#pos_bottom').animate({left: $left}, 2000);
}
