var aUniverseResArr = new Array(); var aRefreshInterval = 10; 
var aSpeedArray = new Array();
var aFinalArmadaSpeed = 0;

function describe(aMsg){ window.status = aMsg; return true; };

function validateform(){
  for(var i=0;i<reguiredFlds.length;i++){
    if (document.registerform.elements[reguiredFlds[i]].type=="select-one") {
      if (document.registerform.elements[reguiredFlds[i]].value=="-"){
        alert("You must select a " + reguiredFlds[i]);
        return false;
      };
    }else{
      if (document.registerform.elements[reguiredFlds[i]].value.length==0){
        alert("You must fill in the " + reguiredFlds[i]);
        return false;
      };
    };
  }
  return true;
}

// It returns the ACTUAL position in the screen of a specific element...
function findPos(obj) {
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    } while (obj = obj.offsetParent);
    return [curleft,curtop];
  }
}

function getWindowWidth(){
  minW = 1004;
  if (parseInt(navigator.appVersion, 10)>3) {
   if (navigator.appName=="Netscape") {
    minW = window.innerWidth-16;
   }
   if (navigator.appName.indexOf("Microsoft")!=-1) {
    minW = document.body.offsetWidth-20;
   }
  }
  return minW;
}

function getWindowHeight(){
  minH = 600;
  if (parseInt(navigator.appVersion, 10)>3) {
   if (navigator.appName=="Netscape") {
    minH = window.innerHeight-16;
   }
   if (navigator.appName.indexOf("Microsoft")!=-1) {
    minH = document.body.offsetHeight-20;
   }
  }
  return minH;
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

function doClear(aControlId){ $(aControlId).value = ""; };
function setValue(aControlId, aValue){ $(aControlId).value = aValue; };
function checkEmail(aEmail){ return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(aEmail)); }
function trim(s) {return s.replace(/^\s*(.*?)\s*$/,"$1")}
function StrPos(aSource,aChar){for(var i=0;i<aSource.length;i++) if(aSource.charAt(i)==aChar) return i; return -1;}

function validateNumericInput(e){
  var key = window.event ? e.keyCode : e.which;
  reg = /\d|\./;
  if (key<32) return true;
  var keychar = String.fromCharCode(key);
  return reg.test(keychar);
}

function clearFormElements(frm){
  for(var i=0;i<frm.elements.length;i++){
    el = frm.elements[i];
    switch (el.tagName.toLowerCase()) {
      case 'input'   :
      case 'textarea':  el.value=trim(el.value);
                        break;
    }
  }
}

// Highlight the building...
function doHL(aDiv, aHighlight){
  if(aHighlight==1){
    aDiv.style.opacity='0.6';
    aDiv.style.filter='alpha(opacity = 50)';
  }else{
    aDiv.style.opacity='1';
    aDiv.style.filter='alpha(opacity=100)';
  }
}

// grid Row Up...
function rU(aRow){aRow.className="alternate2"; }

// grid Row Out...
function rO(aRow){aRow.className="alternate"; }

function ValidateInput(){
  if (document.login.nickname.value.length<1){ alert("You need to supply a nickname!"); return false; }
  if (document.login.password.value.length<1){ alert("You need to supply a password!"); return false; }
}

function submitenter(myfield,e)
{
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;
  if (keycode == 13){
    myfield.form.submit();
    return false;
  }else
    return true;
}

function drawResources(){
  for(aRes in aUniverseResArr){
    aStock = aUniverseResArr[aRes][1]; aMax = aUniverseResArr[aRes][2]; aAmount = aUniverseResArr[aRes][3];
    aNewAmount = aStock + (aAmount*aRefreshInterval/3600);
    if (aNewAmount>aMax) aNewAmount = aMax;
    aUniverseResArr[aRes][1] = aNewAmount;
  }
  for(aRes in aUniverseResArr){
    aElem = $('res'+aUniverseResArr[aRes][0]);
    if(aElem) aElem.innerHTML = Math.floor(aUniverseResArr[aRes][1]);
  }
  setTimeout(drawResources, aRefreshInterval*1000);
};

function addRes(aResId, aStock, aMax, aAmount){ aUniverseResArr.push(new Array(aResId, aStock, aMax, aAmount)); }

function validateAmount(aInput, aMax){
  var aNumbers = "0123456789";
  if (aNumbers.search(aInput.value.charAt(aInput.value.length-1)) == -1)
    aInput.value = aInput.value.substr(0,aInput.value.length-1);
  if (aInput.value==""){
    aInput.value = 0;
  }else if (parseInt(aInput.value,10) > aMax)
    aInput.value = aMax;
}

function get_radio_value(aRadio){
  if(!aRadio.length) return aRadio.value;
  for (var i=0; i < aRadio.length; i++)
    if (aRadio[i].checked)
      return aRadio[i].value;
}

function set_radio_value(radioObj, newValue) {
  if(!radioObj) return;
  var radioLength = radioObj.length;
  if(radioLength == undefined) {
    radioObj.checked = (radioObj.value == newValue.toString());
    return;
  }
  for(var i = 0; i < radioLength; i++) {
    radioObj[i].checked = false;
    if(radioObj[i].value == newValue.toString()) {
      radioObj[i].checked = true;
    }
  }
}

function validateMoveOrder(){
  var aResult = true;
  if (document.getElementById("fromstr").value==""){
    alert("You must choose a source colony!");
    aResult = false;
  }else if (document.getElementById("tostr").value==""){
    alert("You must choose a destination colony!");
    aResult = false;
  }
  return aResult;
}

function findRes(aResId){
  for(i=0;i<aArmada.length;i++) 
    if(aArmada[i][0]==aResId) return i;
  return -1;
}

function recalcCargo(aResId,aPlanetCargo,aStarCargo,aSize,aAmount,aPlanetSpeed,aStarSpeed){
  var aCargoIndex = findRes(aResId);
  if(aCargoIndex==-1){
    aArmada.push(new Array(aResId,aPlanetCargo,aStarCargo,aSize,aAmount,aPlanetSpeed,aStarSpeed));
  }else
    aArmada[aCargoIndex][4] = aAmount;

  var aTotalPlanetCargo=0; var aTotalStarCargo=0; var aTotalPlanetSize=0; var aTotalStarSize=0;
  var aMinPlanetSpeed=10000; var aMinStarSpeed=10000;
  for(var i=0;i<aArmada.length;i++) if(aArmada[i][4]>0) {
    pc = aArmada[i][1]; sc=aArmada[i][2]; sz=aArmada[i][3]; am=aArmada[i][4]; ps=aArmada[i][5]; ss=aArmada[i][6]
    if((ps>0)&&(ps<aMinPlanetSpeed)) aMinPlanetSpeed=ps;
    if((ss>0)&&(ss<aMinStarSpeed)) aMinStarSpeed=ss;
    if((pc==0)&&(sc==0)){
      aTotalPlanetSize += sz*am;
      aTotalStarSize += sz*am;
    }
    if((pc!=0)&&(sc!=0)){
      aTotalPlanetCargo += pc*am;
      aTotalStarCargo += sc*am;
    }else{
      if(pc!=0){
        aTotalPlanetCargo += pc*am;
        aTotalStarSize += sz*am;
      }else
        aTotalStarCargo += sc*am;
    }
  }

  if(aTotalStarSize>aTotalStarCargo) {
    if (aMinPlanetSpeed==10000) aMinPlanetSpeed = 0;
    aFinalArmadaSpeed = aMinPlanetSpeed;
    $('edMove').innerHTML = 'Planetary (' + aMinPlanetSpeed + ')';
    $('edMove').style.color = '#CCCCCC';
    $('edCapacity').innerHTML = (Math.round(aTotalPlanetSize*10)/10);
    $('edMaxCapacity').innerHTML = aTotalPlanetCargo;
    if(aTotalPlanetSize>aTotalPlanetCargo) {
      $('edCapacity').style.color = '#FF0000';
    }else
      $('edCapacity').style.color = '#00FF00';
  }else{
    if(aMinStarSpeed==10000) aMinStarSpeed = '0';
    aFinalArmadaSpeed = aMinStarSpeed;
    $('edMove').innerHTML = 'Space ('+aMinStarSpeed + ')';
    $('edMove').style.color = '#0000FF';
    $('edCapacity').innerHTML = (Math.round(aTotalStarSize*10)/10);
    $('edMaxCapacity').innerHTML = aTotalStarCargo;
    $('edCapacity').style.color = '#00FF00';
  }
  getEta($('colonyfrom').value, $('colonyto').value, 'spanEta');
}

function getResources(aResetColonies,aIdFld){
  aArmada = new Array();
  aOnlyUnits=false;
  $('edCapacity').innerHTML = '0'; $('edMaxCapacity').innerHTML = '0'; $('edMove').innerHTML = 'Planetary'; $('edMove').style.color = '#CCCCCC';
  if(aResetColonies==true){
    $('colonyto').value=''; $('tostr').value='';
  }
  if($('type').value!=6){
    if(($('type').value==1)||($('type').value==5)){
      $('hrefToAll').style.display='none'; $('hrefToOwn').style.display='';
    }else{
      $('hrefToOwn').style.display='none'; $('hrefToAll').style.display='';
    }
  }
  if(($('colonyfrom').value=='')||($('colonyfrom').value==0)) return;
  var req = new Ajax('colonyres.php', {
    method: 'get',
    data: { 'id' : $('colonyfrom').value, 'onlyunits':aOnlyUnits, 'recalc':'1' },
    onRequest: function() { $('edDetails').innerHTML = "<span class='highlight'>Loading Resources...</span>"; },
    onSuccess: function(response) { 
      aResHtml = response;
      aIndex = response.indexOf('|');
      if(aIndex>-1){
        aEvalJS = response.substr(0, aIndex);
        aResHtml = response.substr(aIndex+1);
      }
      $('edDetails').innerHTML = aResHtml;
      eval(aEvalJS);
    }
  }).request();
  
}

function findPosX(obj){
  var curleft = 0;
  if (obj.offsetParent){
    while (obj.offsetParent){
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }else if(obj.x)
    curleft += obj.x;
  return curleft;
}

function findPosY(obj){
  var curtop = 0;
  if (obj.offsetParent){
    while (obj.offsetParent){
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }else if(obj.y)
    curtop += obj.y;
  return curtop;
}

function toggleVisible(aId){
  if (document.getElementById(aId).style.display==''){
    document.getElementById(aId).style.display='none';
  }else
    document.getElementById(aId).style.display='';
}

function getFlightTime(aFrom, aTo, aSpeed){
  for(var i=0;i<aSpeedArray.length;i++){
    aSpeedInfo = aSpeedArray[i];
    if((aSpeedInfo[0]==aFrom)&&(aSpeedInfo[1]==aTo)&&(aSpeedInfo[2]==aSpeed))
      return aSpeedInfo[3];
  }
  return -1;
}

function getEtaFromCache(aFrom, aTo, aSpeed, aSpanId){
  clocktime = getFlightTime(aFrom, aTo, aSpeed);
  if (clocktime==-1) return false;

  var hours = Math.floor(clocktime/3600);
  var minutes = Math.floor(clocktime/60)-hours*60;
  var seconds = clocktime - hours*3600 - minutes*60;
  if (minutes <= 9) minutes = "0" + minutes;
  if (seconds <= 9) seconds = "0" + seconds;
  dispTime = hours + ":" + minutes + ":" + seconds;
  $(aSpanId).innerHTML = dispTime;

  getFlightCost(clocktime);

  return true;
}

function getEta(aFrom, aTo, aSpanId){
  if((aFrom=='')||(aTo=='')||(aFrom==0)||(aTo==0)) return;
  if(aFinalArmadaSpeed==0){
    $(aSpanId).innerHTML = ''; return;
  }
  if(!getEtaFromCache(aFrom, aTo, aFinalArmadaSpeed, aSpanId)){
    var req = new Ajax('tooltips/ajaxEta.php', {
      method: 'get',
      data: { 'from' : aFrom, 'to':aTo, 'speed':aFinalArmadaSpeed, 'dungeon':aDungeon },
      onRequest: function() { $(aSpanId).innerHTML = "<span class='highlight'>Calculating...</span>"; },
      onSuccess: function(response) { 
        aSpeedArray.push(new Array(aFrom, aTo, aFinalArmadaSpeed, response)); 
        getEtaFromCache(aFrom, aTo, aFinalArmadaSpeed, aSpanId);
      }
    }).request();
  }
}

function getFlightCost(aFlightTime){
  if(aFlightTime<=0) return;
  aUnitList='';
  for(var i=0;i<aArmada.length;i++){
    if(aUnitList!='') aUnitList += ';';
    aUnitList += aArmada[i][0]+':'+aArmada[i][4];
  }
  if(aUnitList==''){
    $('spanCost').innerHTML = '';
    return;
  }
  if($('type').value!=5) aFlightTime = 2 * aFlightTime; // Only Reinforcements are 2-way trips...
  var req = new Ajax('tooltips/ajaxFlightCost.php', {
    method: 'get',
    data: { 'units' : aUnitList, 'flight' : aFlightTime },
    onRequest: function() { $('spanCost').innerHTML = "<span class='highlight'>Calculating...</span>"; },
    onSuccess: function(response) { $('spanCost').innerHTML = response; }
  }).request();
}

function setMaxUnits(aAmountId, aUnits, aRadioObj, aRadioValue){
  setValue(aAmountId, aUnits);
  set_radio_value(aRadioObj, aRadioValue);
}

function setVal(aId, aLabel, aCount, aClass){ 
  var aHTML=aLabel; 
  if(aCount==null) aCount=0; if(aClass==null) aClass='';
  if(aHTML!=''){
    if(aCount>0) aHTML = aHTML + ' ('+aCount+')'; 
  }else aHTML = aCount;
  if($('lbl'+aId)){
    $('lbl'+aId).innerHTML=aHTML; 
    $('lbl'+aId).className=aClass; 
  }
}
function showElem(aId, aLabel, aClass){
  if(!$('lbl'+aId))return;
  if(aLabel==null) aLabel='';
  if(aClass==null) aClass='';
  if(aLabel!=''){
    $('lbl'+aId).innerHTML = aLabel;
    $('lbl'+aId).className=aClass; 
    $('lbl'+aId).style.display='';
  }else $('lbl'+aId).style.display='none';
}
function refreshMessages(aType) { var req = new Ajax('tooltips/ajaxMenu.php', { method: 'get', data: {'standalone': '1', 'type': aType}, onSuccess: function(response) { if(trim(response)!='') eval(response); } }).request(); }
function doScheduler(aType){ refreshMessages(aType); setTimeout('doScheduler('+aType+')', 15 * 60 * 1000); }

function setAction(aType){
  switch (aType){
    case '1' : $('dvUser').style.display='none';  // Expand
               $('dvInfluence').style.display='none';
               break;
    case '2' : $('dvUser').style.display='none';  // Support
               $('dvInfluence').style.display='';
               break;
    case '3' : $('dvUser').style.display='';      // Attack
               $('dvInfluence').style.display='';
               break;
    case '4' : $('dvUser').style.display='';      // Lend
               $('dvInfluence').style.display='none';
               break;   
  }
}

function setBounty(aType){
  switch (aType){
    case '1' : $('dvBattle').style.display='';  // Battle
               $('dvInfluence').style.display='none';
               break;
    case '2' : $('dvBattle').style.display='none';  // Influence
               $('dvInfluence').style.display='';
               break;
  }
}
