
function solve (oper, arr) {
  var s = arr[0];
  for (var i=1; i<arr.length; i++) {
    switch (oper) {
    case 'div':
      s /= arr[i];
      break;
    case 'mul':
      s *= arr[i];
      break;
    case 'sub':
      s = s - arr[i];
      break;
    default:
      s += arr[i];
      break;
    }
  }
  return s;
}

function identity(oper) {
  mdoperator = '';
  var videntity;
  switch (oper) {
  case 'div':
    mdoperator = "&divide;";
    videntity = 1;
    break;
  case 'mul':
    mdoperator = "&times;";
    videntity = 1;
    break;
  case 'sub':
    mdoperator = '-';
    videntity = 0;
    break;
//  case 'add':
  default:
    mdoperator = '+';
    videntity = 0;
  }
  return videntity;
}

function getrange(oper, i, level) {
  var max, min, ret_arr;
  switch (oper) {
  case 'div':
  case 'mul':
    if (level > 6 || (level == 6 && i === 0)) {
      max = 100;
      min = 3;
    } else if (level > 4 || (level == 4 && i === 0)) {
      max = 20;
      min = 2;
    } else if (level > 2 || (level == 2 && i === 0)) {
      max = 10;
      min = 0;
    } else {
      max = 5;
      min = 0;
    }
    if (oper=='div' && min===0) { min++; }
    break;
  case 'sub':
  case 'add':
    if (level > 6 || (level == 6 && i === 0)) {
      max = 999;
      min = 101;
    } else if (level > 4 || (level == 4 && i === 0)) {
      max = 99;
      min = 11;
    } else if (level > 2 || (level == 2 && i === 0)) {
      max = 20;
      min = 0;
    } else {
      max = 9;
      min = 0;
    }
    if (i===0 && min===0) { min++; }
    break;
  }
  ret_arr = [min, max];
  return ret_arr; 
}


// determine operator for the question we are generating
function get_answer(operator_array, level) {

if ( typeof operator_array != "object" ) {
   operator_array = ["add"];
}

terms = 2;
random=Math.floor(Math.random()*operator_array.length);
random1 = Math.floor ( Math.random ( ) * 2 ) 
oper = operator_array[random];
mdsolution = identity(oper);
mdoper = [];
mdval  = [];
for (i=0; i<terms; i++) {
  mdoper[i] = mdoperator;
  if ( oper == 'div' ) {
    range_array = getrange(oper, i, level);
    if (i===0) {
      mdval[i] = get_rand(range_array[0], range_array[1]);
    } else {
      mdsolution = get_rand(range_array[0], range_array[1]);
      mdval[i] = mdval[i-1];
      mdval[i-1] = solve("mul", [mdsolution, mdval[i]]);
    }
  } else if ( oper == 'sub' ) {
    range_array = getrange(oper, i, level);
    if (i===0) {
      op = "add";
    } else {
      op = "sub";
      if (level < 5 && range_array[1] > mdval[i-1]) { range_array[1] = mdval[i-1]; }
    }
    mdval[i] = get_rand(range_array[0], range_array[1]);
    mdsolution = solve(op, [mdsolution, mdval[i]]);
  } else if ( oper == 'mul' ) {
    range_array = getrange(oper, i, level);
    mdval[i] = get_rand(range_array[0], range_array[1]);
    mdsolution = solve(oper, [mdsolution, mdval[i]]);
    // if (get_rand(0,1)) { mdval = array_reverse(mdval); } // TODO
  } else {   // add
    range_array = getrange(oper, i, level);
    mdval[i] = get_rand(range_array[0], range_array[1]);
    mdsolution = solve(oper, [mdsolution, mdval[i]]);
/*
    if (get_rand(0,1))  { 
        alert('bef rev mdval='+mdval);
        mdval = array_reverse(mdval, true); 
        alert('rev mdval='+mdval);
    }
*/
  }
}
mdoper[terms-1] = '=';
}

function get_rand(max, min) {
  return Math.floor(Math.random() * (((!max) ? 1 : max) - ((!min) ? 0 : min) + 1) + ((!min) ? 0 : min));
}
