//Generic functions
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj.attachEvent( "on"+type, function() { obj["e"+type+fn](); } );
	}
}
function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj["e"+type+fn] );
		obj["e"+type+fn] = null;
	}
}
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
function show_status(str) {
	$('status').innerHTML = str;
}
function toggle(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'none' ) {
		el.style.display = 'none';
	}
	else {
		el.style.display = '';
	}
}
theme = 0;
themed = 'pldh'; //sets default theme
function toggle_theme() {
	var themes = new Array('green','bleu','console','pldh'); //Define your own themes here
	$('ivblock').className= themes[theme];
	show_status('Theme changed to "'+themes[theme]+'"');
	createCookie('layout',themes[theme],30);
	if (theme < themes.length) {
		theme+=1;
	}
	else { theme = 0; }
}
function createCookie(name,value,days) {
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function loadVars() {
	var query, qs = top.location.search.substring(1);
	var queries = qs.split(/\&/);
	for (var i=0; i<queries.length; i++) {
		query = queries[i].split(/\=/);
		$(query[0]).value = (typeof query[1] == 'undefined') ? null : unescape(query[1]).replace(/\+/g," ");
	}
	if (readCookie('sprite') == 1) { display_sprite(); }
	show_base();
	show_nature();
	show_stats();
	show_hp();
	show_text();
}
//Automatation functions
function autoComplete (field, select, property, forcematch) {
	var found = false;
	for (var i = 0; i < select.options.length; i++) {
	if (select.options[i][property].toUpperCase().indexOf(field.value.toUpperCase()) == 0) {
		found=true; break;
		}
	}
	if (found) { select.selectedIndex = i; }
	else { select.selectedIndex = -1; }
	if (field.createTextRange) {
		if (forcematch && !found) {
			field.value=field.value.substring(0,field.value.length-1); 
			return;
			}
		var cursorKeys ="8;46;37;38;39;40;33;34;35;36;45;";
		if (cursorKeys.indexOf(event.keyCode+";") == -1) {
			var r1 = field.createTextRange();
			var oldValue = r1.text;
			var newValue = found ? select.options[i][property] : oldValue;
			if (newValue != field.value) {
				field.value = newValue;
				var rNew = field.createTextRange();
				rNew.moveStart('character', oldValue.length) ;
				rNew.select();
				}
			}
		}
}
//Pokemon data: ATK/DEF/SP.ATK/SP.DEF/SPD
var pokemon = new Array("0,0,0,0,0,0","45,49,49,65,65,45","60,62,63,80,80,60","80,82,83,100,100,80","39,52,43,60,50,65","58,64,58,80,65,80","78,84,78,109,85,100","44,48,65,50,64,43","59,63,80,65,80,58","79,83,100,85,105,78","45,30,35,20,20,45","50,20,55,25,25,30","60,45,50,80,80,70","40,35,30,20,20,50","45,25,50,25,25,35","65,80,40,45,80,75","40,45,40,35,35,56","63,60,55,50,50,71","83,80,75,70,70,91","30,56,35,25,35,72","55,81,60,50,70,97","40,60,30,31,31,70","65,90,65,61,61,100","35,60,44,40,54,55","60,85,69,65,79,80","35,55,30,50,40,90","60,90,55,90,80,100","50,75,85,20,30,40","75,100,110,45,55,65","55,47,52,40,40,41","70,62,67,55,55,56","90,82,87,75,85,76","46,57,40,40,40,50","61,72,57,55,55,65","81,92,77,85,75,85","70,45,48,60,65,35","95,70,73,85,90,60","38,41,40,50,65,65","73,76,75,81,100,100","115,45,20,45,25,20","140,70,45,75,50,45","40,45,35,30,40,55","75,80,70,65,75,90","45,50,55,75,65,30","60,65,70,85,75,40","75,80,85,100,90,50","35,70,55,45,55,25","60,95,80,60,80,30","60,55,50,40,55,45","70,65,60,90,75,90","10,55,25,35,45,95","35,80,50,50,70,120","40,45,35,40,40,90","65,70,60,65,65,115","50,52,48,65,50,55","80,82,78,95,80,85","40,80,35,35,45,70","65,105,60,60,70,95","55,70,45,70,50,60","90,110,80,100,80,95","40,50,40,40,40,90","65,65,65,50,50,90","90,85,95,70,90,70","25,20,15,105,55,90","40,35,30,120,70,105","55,50,45,135,85,120","70,80,50,35,35,35","80,100,70,50,60,45","90,130,80,65,85,55","50,75,35,70,30,40","65,90,50,85,45,55","80,105,65,100,60,70","40,40,35,50,100,70","80,70,65,80,120,100","40,80,100,30,30,20","55,95,115,45,45,35","80,110,130,55,65,45","50,85,55,65,65,90","65,100,70,80,80,105","90,65,65,40,40,15","95,75,110,100,80,30","25,35,70,95,55,45","50,60,95,120,70,70","52,65,55,58,62,60","35,85,45,35,35,75","60,110,70,60,60,100","65,45,55,45,70,45","90,70,80,70,95,70","80,80,50,40,50,25","105,105,75,65,100,50","30,65,100,45,25,40","50,95,180,85,45,70","30,35,30,100,35,80","45,50,45,115,55,95","60,65,60,130,75,110","35,45,160,30,45,70","60,48,45,43,90,42","85,73,70,73,115,67","30,105,90,25,25,50","55,130,115,50,50,75","40,30,50,55,55,100","60,50,70,80,80,140","60,40,80,60,45,40","95,95,85,125,65,55","50,50,95,40,50,35","60,80,110,50,80,45","50,120,53,35,110,87","50,105,79,35,110,76","90,55,75,60,75,30","40,65,95,60,45,35","65,90,120,85,70,60","80,85,95,30,30,25","105,130,120,45,45,40","250,5,5,35,105,50","65,55,115,100,40,60","105,95,80,40,80,90","30,40,70,70,25,60","55,65,95,95,45,85","45,67,60,35,50,63","80,92,65,65,80,68","30,45,55,70,55,85","60,75,85,100,85,115","40,45,65,100,120,90","70,110,80,55,80,105","65,50,35,115,95,95","65,83,57,95,85,105","65,95,57,100,85,93","65,125,100,55,70,85","75,100,95,40,70,110","20,10,55,15,20,80","95,125,79,60,100,81","130,85,80,85,95,60","48,48,48,48,48,48","55,55,50,45,65,55","130,65,60,110,95,65","65,65,60,110,95,130","65,130,60,95,110,65","65,60,70,85,75,40","35,40,100,90,55,35","70,60,125,115,70,55","30,80,90,55,45,55","60,115,105,65,70,80","80,105,65,60,75,130","160,110,65,65,110,30","90,85,100,95,125,85","90,90,85,125,90,100","90,100,90,125,85,90","41,64,45,50,50,50","61,84,65,70,70,70","91,134,95,100,100,80","106,110,90,154,90,130","100,100,100,100,100,100","45,49,65,49,65,45","60,62,80,63,80,60","80,82,100,83,100,80","39,52,43,60,50,65","58,64,58,80,65,80","78,84,78,109,85,100","50,65,64,44,48,43","65,80,80,59,63,58","85,105,100,79,83,78","35,46,34,35,45,20","85,76,64,45,55,90","60,30,30,36,56,50","100,50,50,76,96,70","40,20,30,40,80,55","55,35,50,55,110,85","40,60,40,40,40,30","70,90,70,60,60,40","85,90,80,70,80,130","75,38,38,56,56,67","125,58,58,76,76,67","20,40,15,35,35,60","50,25,28,45,55,15","90,30,15,40,20,15","35,20,65,40,65,20","55,40,85,80,105,40","40,50,45,70,45,70","65,75,70,95,70,95","55,40,40,65,45,35","70,55,55,80,60,45","90,75,75,115,90,55","75,80,85,90,100,50","70,20,50,20,50,40","100,50,80,50,80,50","70,100,115,30,65,30","90,75,75,90,100,70","35,35,40,35,55,50","55,45,50,45,65,80","75,55,70,55,85,110","55,70,55,40,55,85","30,30,30,30,30,30","75,75,55,105,85,30","65,65,45,75,45,95","55,45,45,25,25,15","95,85,85,65,65,35","65,65,60,130,95,110","95,65,110,60,130,65","60,85,42,85,42,91","95,75,80,100,110,30","60,60,60,85,85,85","48,72,48,72,48,48","190,33,58,33,58,33","70,80,65,90,65,85","50,65,90,35,35,15","75,90,140,60,60,40","100,70,70,65,65,45","65,75,105,35,65,85","75,85,200,55,65,30","60,80,50,40,40,30","90,120,75,60,60,45","65,95,75,55,55,85","70,130,100,55,80,65","20,10,230,10,230,5","80,125,75,40,95,85","55,95,55,35,75,115","60,80,50,50,50,40","90,130,75,75,75,55","40,40,40,70,40,20","50,50,120,80,80,30","50,50,40,30,30,50","100,100,80,60,60,50","55,55,85,65,85,35","35,65,35,65,35,65","75,105,75,105,75,45","45,55,45,65,45,75","65,40,70,80,140,70","65,80,140,40,70,70","45,60,30,80,50,65","75,90,50,110,80,95","75,95,95,95,95,85","90,60,60,40,40,40","90,120,120,60,60,50","85,80,90,105,95,60","73,95,62,85,65,85","55,20,35,20,45,75","35,35,35,35,35,35","50,95,95,35,110,70","45,30,15,85,65,65","45,63,37,65,55,95","45,75,37,70,55,83","95,80,105,40,70,100","255,10,10,75,135,55","90,85,75,115,100,115","115,115,85,90,75,100","100,75,115,90,115,85","50,64,50,45,50,41","70,84,70,65,70,51","100,134,110,95,100,61","106,90,130,90,154,110","106,130,90,110,154,90","100,100,100,100,100,100","40,45,35,65,55,70","50,65,45,85,65,95","70,85,65,105,85,120","45,60,40,70,50,45","60,85,60,85,60,55","80,120,70,110,70,80","50,70,50,50,50,40","70,85,70,60,70,50","100,110,90,85,90,60","35,55,35,30,30,35","70,90,70,60,60,70","38,30,41,30,41,60","78,70,61,50,61,100","45,45,35,20,30,20","50,35,55,25,25,15","60,70,50,90,50,65","50,35,55,25,25,15","60,50,70,50,90,65","40,30,30,40,50,30","60,50,50,60,70,50","80,70,70,90,100,70","40,40,50,30,30,30","70,70,40,60,40,60","90,100,60,90,60,80","40,55,30,30,30,85","60,85,60,50,50,125","40,30,30,55,30,85","60,50,100,85,70,65","28,25,25,45,35,40","38,35,35,65,55,50","68,65,65,125,115,80","40,30,32,50,52,65","70,60,62,80,82,60","60,40,60,40,60,35","60,130,80,60,60,70","60,60,60,35,35,30","80,80,80,55,55,90","150,160,100,95,65,100","31,45,90,30,30,40","61,90,45,50,50,160","1,90,45,30,30,40","64,51,23,51,23,28","84,71,43,71,43,48","104,91,63,91,63,68","72,60,30,20,30,25","144,120,60,40,60,50","50,20,40,20,40,20","30,45,135,45,90,30","50,45,45,35,35,50","70,65,65,55,55,70","50,75,75,65,65,50","50,85,85,55,55,50","50,70,100,40,40,30","60,90,140,50,50,40","70,110,180,60,60,50","30,40,55,40,55,60","60,60,75,60,75,80","40,45,40,65,40,65","70,75,60,105,60,105","60,50,40,85,75,95","60,40,50,75,85,95","65,73,55,47,75,85","65,47,55,73,75,85","50,60,45,100,80,65","70,43,53,43,53,40","100,73,83,73,83,55","45,90,20,65,20,65","70,120,40,95,40,95","130,70,35,70,35,60","170,90,45,90,45,60","60,60,40,65,45,35","70,100,70,105,75,40","70,85,140,85,70,20","60,25,35,70,80,60","80,45,65,90,110,80","60,60,60,60,60,60","45,100,45,45,45,10","50,70,50,50,50,70","80,100,80,80,80,100","50,85,40,85,40,35","70,115,60,115,60,55","45,40,60,40,75,50","75,70,90,70,105,80","73,115,60,60,60,90","73,100,60,100,60,65","70,55,65,95,85,70","70,95,85,55,65,70","50,48,43,46,41,60","110,78,73,76,71,60","43,80,65,50,35,35","63,120,85,90,55,55","40,40,55,40,70,55","60,70,105,70,120,75","66,41,77,61,87,23","86,81,97,81,107,43","45,95,50,40,50,75","75,125,100,70,80,45","20,15,20,10,55,80","95,60,79,100,125,81","70,70,70,70,70,70","60,90,70,60,120,40","44,75,35,63,33,45","64,115,65,83,63,65","20,40,90,30,90,25","40,70,130,60,130,25","99,68,83,72,87,51","65,50,70,95,80,65","65,130,60,75,60,75","95,23,48,23,48,23","50,50,50,50,50,50","80,80,80,80,80,80","70,40,50,55,50,25","90,60,70,75,70,45","110,80,90,95,90,65","35,64,85,74,55,32","55,104,105,94,75,52","55,84,105,114,75,52","100,90,130,45,65,55","43,30,55,40,65,97","45,75,60,40,30,50","65,95,100,60,50,50","95,135,80,110,80,100","40,55,80,35,60,30","60,75,100,55,80,50","80,135,130,95,90,70","80,100,200,50,100,50","80,50,100,100,200,50","80,75,150,75,150,50","80,80,90,110,130,110","80,90,80,130,110,110","100,100,90,150,140,90","100,150,140,100,90,90","105,150,90,150,90,95","100,100,100,100,100,100","50,150,50,150,50,150","55,68,64,45,55,31","75,89,85,55,65,36","95,109,105,75,85,56","44,58,44,58,44,61","64,78,52,78,52,81","76,104,71,104,71,108","53,51,53,61,56,40","64,66,68,81,76,50","84,86,88,111,101,60","40,55,30,30,30,60","55,75,50,40,40,80","85,120,70,50,50,100","59,45,40,35,40,31","79,85,60,55,60,71","37,25,41,25,41,25","77,85,51,55,51,65","45,65,34,40,34,45","60,85,49,60,49,60","80,120,79,95,79,70","40,30,35,50,70,55","60,70,55,125,105,90","67,125,40,30,30,58","97,165,60,65,50,58","30,42,118,42,88,30","60,52,168,47,138,30","40,29,45,29,45,36","60,59,85,79,105,36","70,94,50,94,50,66","30,30,42,30,42,70","70,80,102,80,102,40","60,45,70,45,90,95","55,65,35,60,30,85","85,105,55,85,50,115","45,35,45,62,53,35","70,60,70,87,78,85","76,48,48,57,62,34","111,83,68,92,82,39","75,100,66,60,66,115","90,50,34,60,44,70","150,80,44,90,54,80","55,66,44,44,56,85","65,76,84,54,96,105","60,60,60,105,105,105","100,125,52,105,52,71","49,55,42,42,37,85","71,82,64,64,59,112","45,30,50,65,50,45","63,63,47,41,41,74","103,93,67,71,61,84","57,24,86,24,86,23","67,89,116,79,116,33","50,80,95,10,45,10","20,25,45,70,90,60","100,5,5,15,65,30","76,65,45,92,42,91","50,92,108,92,108,35","58,70,45,40,45,42","68,90,65,50,55,82","108,130,95,80,85,102","135,85,40,40,85,5","40,70,40,35,40,60","70,110,70,115,70,90","68,72,78,38,42,32","108,112,118,68,72,47","40,50,90,30,55,65","70,90,110,60,75,95","48,61,40,61,40,50","83,106,65,86,65,85","74,100,72,90,72,46","49,49,56,49,61,66","69,69,76,69,86,91","45,20,50,60,120,50","60,62,50,62,60,40","90,92,75,92,85,60","70,120,65,45,85,125","70,70,115,130,90,60","110,85,95,80,95,50","115,140,130,55,55,40","100,100,125,110,50,50","75,123,67,95,85,95","75,95,67,125,95,83","85,50,95,120,115,80","86,76,86,116,56,95","65,110,130,60,65,95","65,60,110,130,95,65","75,95,125,45,75,95","110,130,80,70,60,80","85,80,70,135,75,90","68,125,65,65,115,80","60,55,145,75,150,40","45,100,135,65,135,45","70,80,70,80,70,110","50,50,77,95,77,91","75,75,130,75,130,95","80,105,105,105,105,80","75,125,70,125,70,115","100,120,120,150,100,90","90,120,100,150,120,100","91,90,106,130,106,77","110,160,110,80,110,100","150,100,120,100,120,90","120,70,120,75,130,85","80,80,80,80,80,80","100,100,100,100,100,100","70,90,90,135,90,125","100,100,100,100,100,100","120,120,120,120,120,120","10,10,10,10,10,10","10,10,10,10,10,10","50,180,20,180,20,150","50,70,160,70,160,90","50,95,90,95,90,180","60,79,105,59,85,36","60,69,95,69,95,36","150,120,100,120,100,90","100,103,75,120,75,127","50,65,107,105,107,86","50,65,107,105,107,86","50,65,107,105,107,86","50,65,107,105,107,86","50,65,107,105,107,86");
function get_base(p,s) {
	base = pokemon[p].split(',');
	return base[s];
}
var natures = new Array(6); //ATK/DEF/SP.ATK/SP.DEF/SPD
natures['Bashful']=new Array(1,1,1,1,1);
natures['Docile']=new Array(1,1,1,1,1);
natures['Hardy']=new Array(1,1,1,1,1);
natures['Serious']=new Array(1,1,1,1,1);
natures['Quirky']=new Array(1,1,1,1,1);
natures['Bold']=new Array(0.9,1.1,1,1,1);
natures['Modest']=new Array(0.9,1,1.1,1,1);
natures['Calm']=new Array(0.9,1,1,1.1,1);
natures['Timid']=new Array(0.9,1,1,1,1.1);
natures['Lonely']=new Array(1.1,0.9,1,1,1);
natures['Mild']=new Array(1,0.9,1.1,1,1);
natures['Gentle']=new Array(1,0.9,1,1.1,1);
natures['Hasty']=new Array(1,0.9,1,1,1.1);
natures['Adamant']=new Array(1.1,1,0.9,1,1);
natures['Impish']=new Array(1,1.1,0.9,1,1);
natures['Careful']=new Array(1,1,0.9,1.1,1);
natures['Jolly']=new Array(1,1,0.9,1,1.1);
natures['Naughty']=new Array(1.1,1,1,0.9,1);
natures['Lax']=new Array(1,1.1,1,0.9,1);
natures['Rash']=new Array(1,1,1.1,0.9,1);
natures['Naive']=new Array(1,1,1,0.9,1.1);
natures['Brave']=new Array(1.1,1,1,1,0.9);
natures['Relaxed']=new Array(1,1.1,1,1,0.9);
natures['Quiet']=new Array(1,1,1.1,1,0.9);
natures['Sassy']=new Array(1,1,1,1.1,0.9);
statnames = new Array('HP','Attack','Defense','Sp.Attack','Sp.Defense','Speed','-');

//Calculation functions
// The ($stativ/1) and ($pokelvl/1) etc are hacky ways to convert to integer.
function calcstat(pstat,stativ,statev) { //calculates stats
	pokelvl = $("main").level.value;
	basestat = get_base($('species').options[$('species').selectedIndex].value,pstat);
	bonus = natures[$('nature').options[$('nature').selectedIndex].value][(pstat-1)];
	sresult = Math.floor((Math.floor(((basestat*2 + (stativ/1) + Math.floor(statev/4))*pokelvl)/100) + 5)*bonus);
	return sresult;
	}
function calchp(stativ,statev) { //calculates HP
	pokelvl = $("main").level.value;
	basestat = get_base($('species').options[$('species').selectedIndex].value,0);
	sresult = (Math.floor(((basestat*2 + (stativ/1) + Math.floor(statev/4))*pokelvl)/100)) + (pokelvl/1) + 10;
	if ($('species').options[$('species').selectedIndex].value == 292) { sresult = 1; }
	return sresult;
}
function calcstativ(pstat,stat,statev,bound) { //calculates stat IVs
	i = 0;
	pokelvl = $("main").level.value;
	basestat = get_base($('species').options[$('species').selectedIndex].value,pstat);
	bonus = natures[$('nature').options[$('nature').selectedIndex].value][(pstat-1)];
	if(bound == 'max') {
		result = Math.floor((Math.ceil((1+stat/1)/bonus) - 5)*100/pokelvl) - Math.floor(statev/4) - (basestat*2);
		while ((calcstat(pstat, result, statev) > stat || result > 31) && calcstat(pstat, result, statev) > 0 && stat > 0 && i < 32) { //I hope this won't cause any infinite loops anymore...
			result-=1;
			i+=1;
		}
	}
	else {
		result = Math.ceil((Math.ceil(stat/bonus) - 5)*100/pokelvl) - Math.floor(statev/4) - (basestat*2);
		while ((calcstat(pstat, result, statev) < stat || result < 0) && calcstat(pstat, result, statev) > 0 && stat > 0 && i < 32) {
			result+=1;
			i+=1;
		}
	}
	//if (result < 0 || result > 31) { show_status('Probable incorrect input of '+statnames[pstat]+' IV or Effort Points'); }
	if (result < 0) { result = 0; }
	if (result > 31) { result = 31; }
	return result;
}
function calchpiv(stat,statev,bound) { //calculates HP IV
	i = 0;
	pokelvl = $("main").level.value;
	basestat = get_base($('species').options[$('species').selectedIndex].value,0);
	if(bound == 'max') {
		result = Math.floor(Math.ceil((stat - pokelvl -9)*100)/pokelvl) - Math.floor(statev/4) - (basestat*2);
		while ((calchp(result, statev) > stat || result > 31) && calchp(result, statev) > 0 && stat > 0 && i < 32) {
			result-=1;
			i+=1;
		}
		if ($('species').options[$('species').selectedIndex].value == 292) { result = 31; }
	}
	else {
		result = Math.ceil(Math.ceil((stat - pokelvl -10)*100)/pokelvl) - Math.floor(statev/4) - (basestat*2);
		while ((calchp(result, statev) < stat || result < 0) && calchp(result, statev) > 0 && stat > 0 && i < 32) {
			result+=1;
			i+=1;
		}
		if ($('species').options[$('species').selectedIndex].value == 292) { result = 0; }
	}
	//if (result < 0 || result > 31) { show_status('Probable incorrect input of '+statnames[0]+' IV or Effort Points'); }
	if (result < 0) { result = 0; }
	if (result > 31) { result = 31; }
	return result;
}
function middleiv(min,max) {
	return Math.floor((min+max)/2);
}
function probability(min,max) {
	middle = middleiv(min,max);
	return Math.round(100 / (max - min + 1));
	//return Math.round(((middle*100)/max)/(max - min), 0);
}
function hidden_power() { // calculates Hidden Power's power 
	$power=new Array(7);
	$power[1] = ($("main").hpmiddle.value%4 == 2 || $("main").hpmiddle.value%4 == 3?1:0);
	$power[2] = ($("main").attackmiddle.value%4 == 2 || $("main").attackmiddle.value%4 == 3?2:0);
	$power[3] = ($("main").defensemiddle.value%4 == 2 || $("main").defensemiddle.value%4 == 3?4:0);
	$power[4] = ($("main").speedmiddle.value%4 == 2 || $("main").speedmiddle.value%4 == 3?8:0);
	$power[5] = ($("main").spatkmiddle.value%4 == 2 || $("main").spatkmiddle.value%4 == 3?16:0);
	$power[6] = ($("main").spdefmiddle.value%4 == 2 || $("main").spdefmiddle.value%4 == 3?32:0);
	$power[0] = Math.floor(($power[1] + $power[2] + $power[3] + $power[4] + $power[5] + $power[6])*40/63 + 30);
	return $power[0];
}
function hidden_type() { // calculates Hidden Power's type 
	$type=new Array(7);
	$type[1] = ($("main").hpmiddle.value%2 == 1?1:0);
	$type[2] = ($("main").attackmiddle.value%2 == 1?2:0);
	$type[3] = ($("main").defensemiddle.value%2 == 1?3:0);
	$type[4] = ($("main").speedmiddle.value%2 == 1?8:0);
	$type[5] = ($("main").spatkmiddle.value%2 == 1?16:0);
	$type[6] = ($("main").spdefmiddle.value%2 == 1?32:0);
	$type[0] = Math.floor(($type[1] + $type[2] + $type[3] + $type[4] + $type[5] + $type[6])*15/63);
	return $type[0];
}
function validate_iv($iv) { // IV error handling
	if ($iv < 0) { return 0; }
	else if ($iv > 31)  { return 31; }
	else return $iv;
}
//Display functions
function show_base() {
	p = $('species').options[$('species').selectedIndex].value;
	$('hpbase').innerHTML =  get_base(p,0);
	$('attackbase').innerHTML =  get_base(p,1);
	$('defensebase').innerHTML =  get_base(p,2);
	$('spatkbase').innerHTML =  get_base(p,3);
	$('spdefbase').innerHTML =  get_base(p,4);
	$('speedbase').innerHTML =  get_base(p,5);
}
function show_nature() {
	n = $('nature').options[$('nature').selectedIndex].value;
	var ic=6; var dc=6; 
	for (i = 0; i <=4 ; i++) {
		if (natures[n][i] > 1) { ic=i+1; }
		if (natures[n][i] < 1) { dc=i+1; }
	}
	$('inc').innerHTML = statnames[ic];
	$('dec').innerHTML = statnames[dc];
}
function display_sprite() { //Shows Sprite from http://www.legendarypokemon.net/
	createCookie('sprite','1');
	img = $('species').options[$('species').selectedIndex].value;
	img = (img>9)?img:'0'+img;
	img = (img>99)?img:'0'+img;
	if (img == 496) { img = '386-F'; }
	if (img == 497) { img = '386-L'; }
	if (img == 498) { img = '386-E'; }
	if (img == 499) { img = '413-S'; }
	if (img == 500) { img = '413-T'; }
	if (img == 501) { img = '487-o'; }
	if (img == 502) { img = '492-s'; }
	if (img == 503) { img = '479-c'; }
	if (img == 504) { img = '479-f'; }
	if (img == 505) { img = '479-h'; }
	if (img == 506) { img = '479-s'; }
	if (img == 507) { img = '479-w'; }
	$('sprite').innerHTML = '<img src="http://media.pldh.net/pokemon/gen4/platinum/'+img+'.png" />';
}
function show_text() {
	show_status($('species').options[$('species').selectedIndex].text+', '+$('nature').options[$('nature').selectedIndex].text+' LvL'+$('level').value+' -  HP: '+$('stathp').innerHTML+' ('+$('hpmiddle').value+'/'+$('hpep').value+') | Atk: '+$('statattack').innerHTML+' ('+$('attackmiddle').value+'/'+$('attackep').value+') | Def: '+$('statdefense').innerHTML+' ('+$('defensemiddle').value+'/'+$('defenseep').value+') | Sp.Atk: '+$('statspatk').innerHTML+' ('+$('spatkmiddle').value+'/'+$('spatkep').value+') | Sp.Def: '+$('statspdef').innerHTML+' ('+$('spdefmiddle').value+'/'+$('spdefep').value+') | Spd: '+$('statspeed').innerHTML+' ('+$('speedmiddle').value+'/'+$('speedep').value+') | Hidden Power: '+$('hiddenp').innerHTML+', '+$('hiddent').options[$('hiddent').selectedIndex].text+' | Format: stat (IV/EP)');
}
function show_hp() {
	if (!$('hiddenl').checked) { $('hiddent').value = hidden_type(); }
	$('hiddenp').innerHTML = hidden_power();
}
function show_stats() {
	$('stathp').innerHTML = calchp($('hpmiddle').value,$('hpep').value);
	$('statattack').innerHTML = calcstat(1,$('attackmiddle').value,$('attackep').value);
	$('statdefense').innerHTML = calcstat(2,$('defensemiddle').value,$('defenseep').value);
	$('statspatk').innerHTML = calcstat(3,$('spatkmiddle').value,$('spatkep').value);
	$('statspdef').innerHTML = calcstat(4,$('spdefmiddle').value,$('spdefep').value);
	$('statspeed').innerHTML = calcstat(5,$('speedmiddle').value,$('speedep').value);
	show_text();
}
function show_iv() {

	min = calchpiv($('hpstat').value,$('hpep').value,'min');
	max = calchpiv($('hpstat').value,$('hpep').value,'max');
	$('hpmiddle').value = middleiv(min,max);
	$('hpprobability').innerHTML = probability(min,max);
	$('hpmin').innerHTML = min;
	$('hpmax').innerHTML = max;
	
	min = calcstativ(1,$('attackstat').value,$('attackep').value,'min');
	max = calcstativ(1,$('attackstat').value,$('attackep').value,'max');
	$('attackmiddle').value = middleiv(min,max);
	$('attackprobability').innerHTML = probability(min,max);
	$('attackmin').innerHTML = min;
	$('attackmax').innerHTML = max;
	
	min = calcstativ(2,$('defensestat').value,$('defenseep').value,'min');
	max = calcstativ(2,$('defensestat').value,$('defenseep').value,'max');
	$('defensemiddle').value = middleiv(min,max);
	$('defenseprobability').innerHTML = probability(min,max);
	$('defensemin').innerHTML = min;
	$('defensemax').innerHTML = max;
	
	min = calcstativ(3,$('spatkstat').value,$('spatkep').value,'min');
	max = calcstativ(3,$('spatkstat').value,$('spatkep').value,'max');
	$('spatkmiddle').value = middleiv(min,max);
	$('spatkprobability').innerHTML = probability(min,max);
	$('spatkmin').innerHTML = min;
	$('spatkmax').innerHTML = max;
	
	min = calcstativ(4,$('spdefstat').value,$('spdefep').value,'min');
	max = calcstativ(4,$('spdefstat').value,$('spdefep').value,'max');
	$('spdefmiddle').value = middleiv(min,max);
	$('spdefprobability').innerHTML = probability(min,max);
	$('spdefmin').innerHTML = min;
	$('spdefmax').innerHTML = max;
	
	min = calcstativ(5,$('speedstat').value,$('speedep').value,'min');
	max = calcstativ(5,$('speedstat').value,$('speedep').value,'max');
	$('speedmiddle').value = middleiv(min,max);
	$('speedprobability').innerHTML = probability(min,max);
	$('speedmin').innerHTML = min;
	$('speedmax').innerHTML = max;	
	
	show_stats();
	show_text();
	//$('status').innerHTML = 'IVs Calculated';
}
//Add Events to the appropriate objects and other OnLoad stuff...
function init()
{	
	$('ivblock').className = (!readCookie('layout')?themed:readCookie('layout'));
	$('name').focus();
	if (readCookie('sprite') == 1) { addEvent($('species'), 'change', display_sprite); addEvent($('name'), 'keyup', display_sprite); addEvent($('number'), 'keyup', display_sprite); display_sprite(); }
	if (location.search.match('species') == 'species') { $('btnLoad').value+='*'; $('btnSave').value+=' ';  } //Make Saved data visible + Opera bugfix
	addEvent($('name'),"keyup", function () { autoComplete(this,$('species'),'text',true); $('number').value=$('species').options[$('species').selectedIndex].value; show_base(); });
	addEvent($('species'),"change", function () { $('name').value=$('species').options[$('species').selectedIndex].text; $('number').value=$('species').options[$('species').selectedIndex].value; show_base(); });
	addEvent($('number'),"keyup", function () { $('species').value=$('number').value; $('name').value=$('species').options[$('species').selectedIndex].text; show_base(); });
	addEvent($('naturename'),"keyup", function () { autoComplete(this,$('nature'),'text',true); show_nature(); });
	addEvent($('nature'),"change", function () { $('naturename').value=$('nature').options[$('nature').selectedIndex].text; show_nature(); });
	addEvent($('btnTheme'),"click", toggle_theme);

	addEvent($('btnIV'),"click", show_iv);
	addEvent($('btnStats'),"click", show_stats);
	addEvent($('btnHP'),"click", show_hp);
	addEvent($('toggleinfo'),"click", function () { toggle('info'); toggle('instructions'); });
	addEvent($('toggleinstructions'),"click", function () { toggle('info'); toggle('instructions'); });
	
	show_status('Loaded without errors');
}
addEvent(window,"load", init); //autoComplete(this,this.form.species,'text',true);