/*1stbase stuff */
var bases = new Array(null,null,null,null,null);

function baseShout(s) {
	dinner("<span class='ttt'>"+s+"<\/span>",'baserr');
	}

function baseConvert(v,b) { 
	var max,w,r, ch, b_str,ok = true, errs = new Array(), st="",rowname;
	var b36max = new Array([/[01]/,/[1]/],[/[0-9a-zA-Z]/,/[zZ]/],[/[01]/,/[1]/],[/[0-4]/,/[4]/],[/[01]/,/[1]/],[/[0-9a-zA-Z]/,/[zZ]/],[/[0-3]/,/[3]/]);
	var tmp_array, dec;
	if(v=="") {baseShout("Please enter a value"); return} 
	switch(b) {
		case "2": if(v.length>32) {baseShout("Too big. Maximum 32 binary digits"); return;}
					r = /[01]/; b_str="binary"; break;
		case "8": if(v.length>11) {
					baseShout("Too big. Maximum 11 octal digits"); return;
				} else if(v.length==11 && parseInt(v[0])>3) {
					baseShout("Too big. Maximum 37777777777 octal"); return;
				}
				r = /[0-7]/; b_str="octal"; break;
		case "10": if(parseInt(v)>4294967295) {baseShout("Too big. Maximum 4294967295 decimal"); return;}
					 r = /[0-9]/; b_str="decimal"; break;
		case "16": if(v.length>8) {baseShout("Too big. Maximum 8 hexadecimal digits"); return;}
					 r = /[0-9a-fA-F]/; b_str="hexadecimal"; break;
		case "36": if(v.length>7) {baseShout("Too big. Maximum 1z141z3 (7 digits) in base 36"); return;
				} else if(v.length==7) {
					w=0; max=true;
					while(ok && max && w<7) {
						ok=b36max[w][0].test(v[w]);
						if(ok) max=b36max[w][1].test(v[w++]);
					}
					if(!ok) {baseShout("Too big. Maximum 1z141z3 in base 36"); return;}
				}
					 r = /[0-9a-zA-Z]/; b_str="base 36";
		}
	
	for(var loop=0; loop<v.length; loop++) {
		ch=v.charAt(loop);
		if(r.test(ch)) errs[loop]=v.charAt(loop);
		else {errs[loop]="<span style=\"color:#cf3333\">"+v.charAt(loop)+"<\/span>"; ok=false}
		}
	if(ok) baseShout("&nbsp;"); else {st=errs.join(""); baseShout("Invalid "+b_str+" value: "+st); return}

	dec = toDecimal(v,parseInt(b)); 
	tmp_array= new Array(dec,fromDecimal(dec,16),fromDecimal(dec,2),fromDecimal(dec,8),fromDecimal(dec,36).toLowerCase()); 
	if(tmp_array[1].length/2!=Math.floor(tmp_array[1].length/2)) tmp_array[1]="0"+tmp_array[1];
	while(tmp_array[2].length<32) tmp_array[2]="0"+tmp_array[2];
	if(tmp_array[3].length/2!=Math.floor(tmp_array[3].length/2)) tmp_array[3]="0"+tmp_array[3];

	bases=tmp_array;

    for(var loop=0; loop<bases.length; loop++) {
		rowname="row"+loop;
		dinner(bases[loop],rowname);
   	}
}
			

function toDecimal(str,c) {
	var result=0, BS=str.toUpperCase();
	var l=str.length-1;
	for(var loop=0; loop<=l; loop++) {
		n=fbVal(BS.charAt(loop));
		result += n*Math.pow(c,l-loop);
		}
	result += "";
	return result;
	}
	
function fromDecimal(n,b) {
	var aresult=new Array(),f,m,p;
	var c=8*(b==16)+7*(b==36)+32*(b==2)+11*(b==8);
	p=c-1;
	m=n;
	for(var loop=0; loop<c; loop++) {
		f=Math.floor(m/(Math.pow(b,p)));
		aresult[loop]=String.fromCharCode(f+48*(f<10)+55*(f>9));
		m=m-f*Math.pow(b,p);
		p--;
		}
	result=aresult.join("");
	return result.replace(/^0*/,"");
	
	}
	
	
function fbVal(ch) {
	switch(ch) {
		case "0": return 0;
		case "1": return 1;
		case "2": return 2;
		case "3": return 3;
		case "4": return 4;
		case "5": return 5;
		case "6": return 6;
		case "7": return 7;
		case "8": return 8;
		case "9": return 9;
		case "A": return 10;
		case "B": return 11;
		case "C": return 12;
		case "D": return 13;
		case "E": return 14;
		case "F": return 15;
		case "G": return 16;
		case "H": return 17;
		case "I": return 18;
		case "J": return 19;
		case "K": return 20;
		case "L": return 21;
		case "M": return 22;
		case "N": return 23;
		case "O": return 24;
		case "P": return 25;
		case "Q": return 26;
		case "R": return 27;
		case "S": return 28;
		case "T": return 29;
		case "U": return 30;
		case "V": return 31;
		case "W": return 32;
		case "X": return 33;
		case "Y": return 34;
		case "Z": return 35;
		}}

	
