var lastDeviceId = -1;
var cdCount = 0;
var dvdCount = 0;
var userChosenFormat = false;
var skipSuggestionNextLoad = false;

function updateDeviceSelect(deviceId) {
    if(deviceId < 0) {
        alert('You must select a valid media server.');
        setSelectValue($('MediaServer'), lastDeviceId);
        return;
    }
    lastDeviceId = deviceId;
    $('loadingdiv').show();
    $('cost').value = "";
    updateMediaServerImage(deviceList[deviceId]["img"]);

    // show devices/ what
    if(deviceList[deviceId]["cd"] == 1) {
        $('cdMediaSection').show();
    } else {
        $('cdMediaSection').hide();
        cdCount = 0;
    }
    if(deviceList[deviceId]["dvd"] == 1) {
        $('dvdMediaSection').show();
    } else {
        $('dvdMediaSection').hide();
        dvdCount = 0;
    }
    if(deviceList[deviceId]["maxEncode"] > 1) {
        $('formatDualEncode').show();
    } else {
        $('formatDualEncode').hide();
    }

    $('HardDriveSize').options.length = 0;
    $('HardDriveSize').options[0] = new Option('Unsure', '-1');
    var resh = new Ajax.Request('/include/dispatch.php?mobj=mLoadingDevicesInformation&mf=hdsizeByDeviceId&vo=getJSONResults&id=' + deviceId,
        {
            method:'get',
            onSuccess: function(transport, json){
                  var json = transport.responseText.evalJSON();
                  if(json.records.hdGB) {
                      if(!json.records.modelName) {
                          json.records.modelName = "";
                      }
                      $('HardDriveSize').options[1] = new Option(formatGB(json.records.hdGB) + " " + json.records.modelName, json.records.hdGB);
                  }
                  for(var i = 0, j = 1; i < json.records.length; i++, j++) {

                      if(!json.records[i].modelName) {
                          json.records[i].modelName = "";
                      }
                      var lbl = formatGB(json.records[i].hdGB) + " " + json.records[i].modelName;
                      if(json.records[i].additionalCosts != "0.00") {
                        lbl += " +$" + formatNumber(json.records[i].additionalCosts, true) + "";
                      }
                      $('HardDriveSize').options[j] = new Option(lbl, json.records[i].hdGB);
                  }
            },
            onException: function() {
                alert("There was an error on the page, please reload the page and try again.");
            }
            
        }
        );

    $('format').options.length = 0;
    var resf = new Ajax.Request('/include/dispatch.php?mobj=mLoadingDevicesFormat&mf=formatByDeviceId&vo=getJSONResults&id=' + deviceId,
        {
            method:'get',
            onSuccess: function(transport, json){
                  //$('loadingdiv').hide();
                  var json = transport.responseText.evalJSON();
                  if(json.records.format) {
                      $('format').options[0] = new Option(json.records.format);
                  } else {
                      for(var i = 0; i < json.records.length; i++) {
                            $('format').options[i] = new Option(json.records[i].format);
                            if((i + 1) == json.records.length) {
                                $('format').options[i].selected = true;
                            }
                      }
                  }
                  cloneEncoding('format', 'format2');
                  //$('loadingdiv').hide();
            },
            onException: function() {
                alert("There was an error on the page, please reload the page and try again.");
            }

        }
        );

    var resl = new Ajax.Request('/include/dispatch.php?mobj=mLoadingServiceLevels&mf=getServiceLevels&vo=getJSONResults&id=' + deviceId,
        {
            method:'get',
            onSuccess: function(transport, json){
                  var json = transport.responseText.evalJSON();
                  $('loadingdiv').hide();
                  setupServiceLevels(json, deviceId);
            },
            onException: function() {
                alert("There was an error on the page, please reload the page and try again.");
            }

        }
        );
}

function updateCDCount(cds) {
    cdCount = parseInt(cds);
    calculateAll();
}

function updateDVDCount(dvds) {
    dvdCount = parseInt(dvds);
    calculateAll();
}

function calculateCost() {
    calculateSpaceRequired();
    var cost = 0;
    if(cdCount > 0) {
        var serviceLevel = findRadioValue('loadingorder', 'ServiceLevelCD');
        cost += serviceLevel * cdCount;
    }
    if(dvdCount > 0) {
        serviceLevel = findRadioValue('loadingorder', 'ServiceLevelDVD');
        cost += serviceLevel * dvdCount;
    }
    $('cost').value = "$" + formatNumber(cost);
}


// Calculate all
function calculateAll() {
    var qs = '&cds=' + cdCount + '&dvds=' + dvdCount + '&format=' + $('format').getValue() + '&hdSize=' + $('HardDriveSize').getValue();
    qs += "&cdServiceLevel=" + findRadioValue('ServiceLevelCD') + "&dvdServiceLevel=" + findRadioValue('ServiceLevelDVD') +
        "&MediaServer=" + $('MediaServer').value;
    if(deviceList[lastDeviceId]['maxEncode'] > 1) {
        qs += '&format2=' + $('format2').options[$('format2').selectedIndex].text;
    }
    if($('buDVD').checked) {
        qs += '&buDVD=1';
    }
    if($('buOnline').checked) {
        qs += '&buOnline=1';
    }
    if($('buUsb').checked) {
        qs += '&buUsb=1';
    }
    if(!userChosenFormat && !skipSuggestionNextLoad) {
        qs += '&bestFormat=1';
    }
    if(skipSuggestionNextLoad) {
        skipSuggestionNextLoad = false;
    }
    var calcaj = new Ajax.Request('/include/dispatch.php?mobj=mLoadingCalculator&mf=estimateSpace&vo=getJSONResults' + qs,
            {
                method:'get',
                onSuccess: function(transport, json){
                        //alert(transport.responseText);
                    
                      var json = transport.responseText.evalJSON();

                      // Costs & GB display
                      $('requiredGB').value = formatNumber(json.records.requiredGB);
                      $('remainingGB').value = formatNumber(json.records.remainingGB);

                      if(isNumber(json.records.remainingGB) && json.records.remainingGB < 0) {
                            $('hdWarning').show();
                            $('remainingGB').style.color = 'red';
                      } else {
                            $('hdWarning').hide();
                            $('remainingGB').style.color = '';
                      }
                      
                      $('cost').value = "$" + json.records.totalCost;
                      $('buOnlineCost').value = json.records.onlineCost;
                      $('buUsbCost').value = json.records.usbCost;
                      $('buDVDCost').value = json.records.archiveCost;

                      // USB HD's breakdown
                      $('usbHDsBreakdown').innerHTML = "";
                      var toHtml = "<i>Hard Drives Required: ";

                      for(var i = 0; i < json.records.hdsToBackup.length; i++) {
                          toHtml += formatGB(json.records.hdsToBackup[i][0]) + " ($" + formatNumber(json.records.hdsToBackup[i][1]) + "), ";
                      }
                      toHtml += " to backup to USB</i>";
                      $('usbHDsBreakdown').innerHTML = toHtml;

                      // Validation
                      if(json.records.minimumServiceLevel && (cdCount > 0 || dvdCount > 0)) {
                          var reasonText = "The selection of ";
                          if(json.records.error_encoding) {
                              reasonText += "Dual Encoding ";
                          }
                          if(json.records.error_encoding && json.records.error_format) {
                              reasonText += "and ";
                          }
                          if(json.records.error_format) {
                              reasonText += "a higher resolution ";
                          }
                          reasonText += "requires a higher service level.";
                          //alert(reasonText);
                          checkRadioValue('ServiceLevelCD', json.records.minimumServiceLevel);
                      }

                      if(json.records.suggestedFormat) {
                            setSelectValue($('format'), json.records.suggestedFormat);
                            skipSuggestionNextLoad = true;
                            calculateAll();
                      }

                },
                onException: function() {
                    alert("There was an error on the page, please reload the page and try again.");
                }
            }
        );
}

function setupServiceLevels(jobj, deviceId) {
    $('cdCosts').hide();
    $('dvdCosts').hide();
    $('cdCostsTbl').innerHTML = "";
    $('dvdCostsTbl').innerHTML = "";

    var j = 0;
    if(deviceList[deviceId]['cd'] > 0) {
        var cdHtmlCode = "<table class='contentInfo' width='100%' border='0' >";
        var toCheck = 0;
        $('cdCosts').show();

        for(var i = 0; i < jobj.records.cd.length; i++, j++) {
            
            if(jobj.records.cd[i].cost == "0.00") {
                j--;
                continue;
            }


            cdHtmlCode = cdHtmlCode + "<tr class='" + ((j % 2 == 0) ? '' : 'offRow') + "'><td valign='top' width='100'>" +
                    "<input type='radio' name='ServiceLevelCD' onclick='calculateAll()' " + ((i == toCheck) ? 'checked=true' : '') +
                " value='" + jobj.records.cd[i].id + "' /> " + jobj.records.cd[i].label + "</td>" +
                "<td width='300'>" + nl2br(jobj.records.cd[i].description) + "</td>" +
                "<td valign='top'><b>$" + jobj.records.cd[i].cost + " per disc </b></td></tr>";
            
        }
        $('cdCostsTbl').innerHTML = cdHtmlCode + "</table>";
    }
    if(deviceList[deviceId]['dvd'] > 0) {
        var dvdHtmlCode = "<table class='contentInfo' width='100%' border='0' >";
        toCheck = 0;
        $('dvdCosts').show();
        for(i = 0; i < jobj.records.dvd.length; i++, j++) {

            if(jobj.records.dvd[i].cost == "0.00") {
                j--;
                continue;
            }

            dvdHtmlCode = dvdHtmlCode + "<tr class='" + ((j % 2 == 0) ? '' : 'offRow') + "'><td valign='top' width='100'>" +
                "<input type='radio' name='ServiceLevelDVD' onclick='calculateAll()' " + ((i == toCheck) ? 'checked=true' : '') +
                " value='" + jobj.records.dvd[i].id + "' /> " + jobj.records.dvd[i].label + "</td><td width='300'>" +
                nl2br(jobj.records.dvd[i].description) + "</td><td valign='top'><b>$" + jobj.records.dvd[i].cost + " per dvd </b></td></tr>";
        }

        $('dvdCostsTbl').innerHTML = dvdHtmlCode + "</table>";
    }
}

function updateMediaServerImage(imgFile) {
    if(imgFile.length > 1) {
        $('formatimg').src = imgFile;
    } else {
        $('formatimg').src = '/Checkout2/art/begin.jpg';
    }
}

function cloneEncoding(from, to) {
    $(to).options.length = 0;
    $(to).options[0] = new Option('None', -1);
    for(var i = 0; i < $(from).options.length; i++) {
        $(to).options[i + 1] = new Option($(from).options[i].text, $(from).options[i].text);
    }
}