	var FieldTypeOn="f";				//global varible to track the selected 
	var FieldTypeOff="d";				//type of fields fraction or decimal
	function Chgradvalue(strRadbut) {
		if(strRadbut=="1"){
			FieldTypeOn="d";
			FieldTypeOff="f";
		}else {
			FieldTypeOn="f";
			FieldTypeOff="d";
		}
		revealHide();
	}

	function revealHide(){
		var selectedval = document.oddsCalc.betType.selectedIndex;
		for(x=1;x<=8;x++){
			lockelem("oddsnum"+x);
			lockelem("oddsden"+x);
			lockelem("oddsdec"+x);
		}
		switch(selectedval){		
			case 0:	// Single	displays 1
				intDisplay = 1;
			break;
			case 1:	//  Double	displays 2
				intDisplay = 2;
			break;
			case 2:	//  Treble 	displays 3
				intDisplay = 3;
			break;
			case 3:	// Accumulater	displays 8
				intDisplay = 8;
			break;
			case 4:	// Trixie	displays 3
				intDisplay = 3;
			break;
			case 5:	//Patent 	displays 3
				intDisplay = 3;
			break;
			case 6:	//  Yankie	displays 4
				intDisplay = 4;
			break;
			case 7:	// Lucky15	displays 4
				intDisplay = 4;
			break;				
			default:
		}//end switch
		
		if(FieldTypeOn=="f"){
			for(x=1;x<=intDisplay;x++){
				unlockelem("oddsnum"+x);
				unlockelem("oddsden"+x);
			}
		} else {
			for(x=1;x<=intDisplay;x++){
				unlockelem("oddsdec"+x);
			}
		}
	}//end function

	function unlockelem(formElem) {
		document.oddsCalc.elements[formElem].style.background="#FFFFFF";
		document.oddsCalc.elements[formElem].disabled=false;
	}
	function lockelem(formElem) {
		if(is_ie)
			document.oddsCalc.elements[formElem].style.background="#CCCCCC";
		document.oddsCalc.elements[formElem].disabled=true;
	}

//~~~~~~~~~~~~Revel and hide functions END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//'~~~~~~~~~~~~~~~~~~~~~~~~~~Results Display~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	var theblah
	var timerID
	var dropsloaded
	num_drops=1
	first_drop_offset_from_centre=-70
//private functions
	offset=first_drop_offset_from_centre
	dropsloaded=0
	timerID=null
	
function showdrop(num){
	if(dropsloaded){
		clearTimeout(timerID)
		if(is_ie4 || is_ie4up) { theblah="drop"+num+".style.visibility='visible'" }
		if(is_nav4 || is_nav45up) { theblah="document.drop"+num+".visibility='show'" }
		if(is_ns6){ theblah="document.getElementById('drop"+num+"').style.visibility='visible'" }
		eval(theblah);
	}
}
//register initial layer position - for irregularly spaced drops
	layerpos=new Array()
	function registerlayer(num){
		if(is_ie4 || is_ie4up) { layerpos[num]=eval("drop"+num+".style.pixelLeft")}
		if(is_nav4 || is_nav45up) { layerpos[num]=eval("document.drop"+num+".left")}
		if(is_ns6){ layerpos[num]=eval("document.getElementById('drop"+num+"').style.pixelLeft")}
		}
//'~~~~~~~~~~~~~~~~~~~~~~~~~~EndResults Display~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//~~~~~~~~~~~~Calculation functions Start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
var Accumlength =0;

function fmtNum(value) {
	result=Math.floor(value)+".";
	var cents=100* (value-Math.floor(value)) + 0.5;
	
	if(cents > 100){
		result = Math.floor(value)+1+".00";
	}else{
	   	result += Math.floor(cents/10);
		result += Math.floor(cents%10);
	}
	return result;
}
	
function CalcFunction(intStake, selectedval){
	var intMax=99999999999999;
	var intResults =0;
	var x=1;
	//get number of odds fields diaplayed
	switch(selectedval){
		case 0:	// Single
			intResults = arrDec[1] * intStake;
		break;
		case 1:	//  Double
			intResults =  arrDec[1] * arrDec[2] * intStake;
		break;
		case 2:	//  Treble
			intResults =  arrDec[1] * arrDec[2] * arrDec[3] * intStake;
		break;
		case 3:	// Accumulater
			switch(Accumlength){
				case 1:
					intResults = arrDec[1] * intStake;
				break;
				case 2:
					intResults = arrDec[1] * arrDec[2] * intStake;
				break;
				case 3:
					intResults =  arrDec[1] * arrDec[2] * arrDec[3] * intStake;
				break;
				case 4:
					intResults = arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4] * intStake;
				break;
				case 5:
					intResults = arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4] * arrDec[5] * intStake;
				break;
				case 6:
					intResults =  arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4] * arrDec[5] * arrDec[6] * intStake;
				break;
				case 7:
					intResults = arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4] * arrDec[5] * arrDec[6] * arrDec[7] * intStake;
				break;
				case 8:
					intResults = arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4] * arrDec[5] * arrDec[6] * arrDec[7] * arrDec[8] * intStake;
				break;
			}	
		break;
		case 4:	// Trixie
			intResults= ((arrDec[1] * arrDec[2] * arrDec[3]) + (arrDec[1] * arrDec[2]) + (arrDec[1] * arrDec[3])+ (arrDec[2] * arrDec[3])) * intStake;
			intStake = intStake * 4;
		break;
		case 5:	//Patent
			intResults= ((arrDec[1] * arrDec[2] * arrDec[3]) + (arrDec[1] * arrDec[2]) + (arrDec[1] * arrDec[3]) + (arrDec[2] * arrDec[3]) + arrDec[1] +arrDec[2] + arrDec[3]) * intStake;
			intStake = intStake * 7;
		break;
		case 6:	//  Yankie
			intResults  = ((arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2] * arrDec[3]) + (arrDec[1] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2] * arrDec[4]) + (arrDec[2] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2]) + (arrDec[1] * arrDec[3]) + (arrDec[1] * arrDec[4]) + (arrDec[2] * arrDec[3]) + (arrDec[2] * arrDec[4]) + (arrDec[3] * arrDec[4])) * intStake;
			intStake = intStake * 11;	
		break;
		case 7:	// Lucky15
			intResults  = ((arrDec[1] * arrDec[2] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2] * arrDec[3]) + (arrDec[1] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2] * arrDec[4]) + (arrDec[2] * arrDec[3] * arrDec[4]) + (arrDec[1] * arrDec[2]) + (arrDec[1] * arrDec[3]) + (arrDec[1] * arrDec[4]) + (arrDec[2] * arrDec[3]) + (arrDec[2] * arrDec[4]) + (arrDec[3] * arrDec[4]) + arrDec[1] +arrDec[2] + arrDec[3] + arrDec[4]) * intStake * 1.1;
			intStake = intStake * 15;
		break;				
		default:
	}
	
	//' insert values
	if(is_ie4 || is_ie4up || is_ns6) { frmObj = document.frmResults }
	if(is_nav4 || is_nav45up) { frmObj = document.drop1.document.frmResults }
	
	
	if(intResults>intMax){
		alert("The calculated return is greater than maximum payout, Please change your bet");
	}else{	
		frmObj.stake.value=fmtNum(intStake);
		frmObj.results.value=fmtNum(intResults);
		//' show layer
		showdrop(1);	
	}	
}
//~~~~~~~~~~~~Calculation functions END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~Validation START~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

var arrDec = new Array();					//Global array to hold decimal values

function divnumbers(numVal1, numVal2){
	if(numVal2==0||numVal1==0) return(0);
	else return(numVal1/numVal2);
}
				
function fracToDec(intNumer,intDenom){
	var numDec = divnumbers(intNumer, intDenom);
	numDec = numDec + 1;
	return numDec;
}

function validStr(str, validChars){
	var isValid = true;			
	var i = 0;
	var strLength = str.length-1;		// Zero index for length (as for String methods)
	// Loop through all chars and check they are valid
	for(var i=0;i <= strLength;i++){
		var ch = str.charAt(i);
		if (validChars.indexOf(ch) == -1){
			isValid = false;
		}
	} 
	return (isValid);
}

function checkStake(fieldValue) {
	var decimal = "0123456789.";
	decallowed = 2;  // how many decimals are allowed?
	
	if ((isNaN(fieldValue))||(fieldValue == "")||(validStr(fieldValue, decimal)==false)) return 0;
	else {
		if (fieldValue.indexOf('.') == -1) fieldValue += ".";
		dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);
		
		if (dectext.length > decallowed) return 0;
		
		if(fieldValue<0.5) { return 0; }
		else { return 1; }
	}
}

function checkDecimals(fieldValue) {
	var decimal = "0123456789.";
	decallowed = 3;  // how many decimals are allowed?
	
	if((isNaN(fieldValue)) || (fieldValue == "")||(validStr(fieldValue, decimal)==false)) return 0;
	else {
		if (fieldValue.indexOf('.') == -1) fieldValue += ".";
		dectext = fieldValue.substring(fieldValue.indexOf('.')+1, fieldValue.length);
		
		if (dectext.length > decallowed) return 0;
		
		if((fieldValue<1.01)||(fieldValue>101.00)) { return 0; } else { return 1; }
	} 
}

function checkFraction(fieldValue) {
	var decimal = "0123456789";
		
	if((isNaN(fieldValue)) || (fieldValue == "")||(validStr(fieldValue, decimal)==false)) return 0;
	else {
		if((fieldValue<1)||(fieldValue>100)){ return 0; } else { return 1;}
	} 
}

function getFractionValue(oddsDis, Accumul, thisform){
	var frac = "0123456789";
	var x=1;
	var error = true;
	var arrOddnum = new Array();
	var arrOddden = new Array();	
	//get numbers and check fields
	for(x=1;x<=oddsDis;x++){
		arrOddnum[x] = thisform.elements["oddsnum"+x].value;
		arrOddden[x] = thisform.elements["oddsden"+x].value;
		if(!(checkFraction(arrOddnum[x]))||(!checkFraction(arrOddden[x]))){
			error = false;
			alert("Error - Please enter valid Odds");				//Error Message
			return(error);
		} //end if
	}//end for
	
	//if Accumulated choosen
	if(Accumul){		
		var strLengthnum, strLengthden;
		oddsDis=8;
		Accumlength = 1;
		for(x=2;x<=oddsDis;x++){
			arrOddnum[x] = thisform.elements["oddsnum"+x].value;
			arrOddden[x] = thisform.elements["oddsden"+x].value;
			strLengthnum = arrOddden[x].length;
			strLengthden = arrOddden[x].length;
			if((strLengthnum!=0)||(strLengthden!=0)){
				if(!(checkFraction(arrOddnum[x]))||(!checkFraction(arrOddden[x]))){
					error = false;
					alert("Error - Please enter valid Odds");				//Error Message
					return(error);
				} 
				else Accumlength = x;
				//end if
			} else { oddsDis=x; }
			//end if
		}//end while		
	}//end if
	
	for(x=1;x<=oddsDis;x++){
		arrDec[x]= fracToDec(arrOddnum[x],arrOddden[x]);
	}	
	return(error);
}//end Fraction function

function getDecimalValue(oddsDis, Accumul, thisform){
	var strtemp;
	var x=1;
	var error = true;
	for(x=1;x<=oddsDis;x++){
		strtemp = thisform.elements["oddsdec"+x].value;
		if(!checkDecimals(strtemp)){
			error = false;
			alert("Error - Please enter valid Odds")				//Error Message
			return(error);
		}else { arrDec[x] = parseFloat(strtemp); }
		//end if
	}//end for
		
	if(Accumul){	
		var strLength;
		oddsDis=8;
		Accumlength = 1;
		for(x=2;x<=oddsDis;x++){
			strtemp = thisform.elements["oddsdec"+x].value;
			strLength = strtemp.length;
			if(strLength!=0){
				if(!checkDecimals(strtemp)){
					error = false;
					alert("Error - Please enter valid Odds 2");				//Error Message
					return(error);
				} else {
					arrDec[x] = parseFloat(strtemp);
					Accumlength = x;
				}
				//end if
			} else { oddsDis=x; }//end if				
		}//end for
	}//end if	
	return(error);
}

function validate(thisform) {
	var selectedval = thisform.betType.selectedIndex;
	var intStake = thisform.stake.value;
	var error = true;
	var Accumul = false;
	var oddsDis = 0;
	
	if(!checkStake(intStake)){
		alert("Error 1 - Stake not vaild, please try again");		//Error Message
		error = false;
	}else {
		var intOdds;
		switch(selectedval){
			case 0:	// Single	displays 1					
				oddsDis = 1;
			break;
			case 1:	//  Double	displays 2
				oddsDis = 2;
			break;
			case 2:	//  Treble 	displays 3
				oddsDis = 3;
			break;
			case 3:	// Accumulater	displays 8
				oddsDis = 1;		//have 4 - 8
				Accumul = true;
			break;
			case 4:	// Trixie	displays 3
				oddsDis = 3;
			break;
			case 5:	//Patent 	displays 3
				oddsDis = 3;
			break;
			case 6:	//  Yankie	displays 4				
				oddsDis = 4;
			break;
			case 7:	// Lucky15	displays 4
				oddsDis = 4;
			break;				
			default:
		}//end switch
	}//end if
	
	// reset aray with zeros
	for(x=1;x<=8;x++) arrDec[x]= 0;
	
	//if fraction selected
	if(error && FieldTypeOn=="f") { 
		error = getFractionValue(oddsDis, Accumul, thisform);
	} else if(error && FieldTypeOn=="d"){
		error = getDecimalValue(oddsDis, Accumul, thisform);
	}
	
	//if no errors then calculate results
	if(error){
		CalcFunction(intStake, selectedval);
		return true;
	} else { return false;}
}
