var row_mouseover_color = '';
var row_onclick_color = '#ffa';
var cell_onclick_color = '#600';
var actionbar_opened = false;
var x = 0; var y = 0;

addLoadEvent(clear_actionbar);
addLoadEvent(clear_table);
addLoadEvent(set_pagination_options);
addLoadEvent(show_dob);

function trim(str) { return str.replace(/^\s*|\s*$/g,""); }
function strip_tags(str){ return str.replace(/<\/?[^>]+>/gi, ""); }
function get_target(e){ e = e || window.event; return e.target || e.srcElement; }

function format_tel(telephone_no, country_code) { // eg '0396822665', 'AU'
  telephone_no = telephone_no.replace(/[^0-9]/g, ''); // strip all non-numeric characters
  var prefix = countrycode[country_code].toString(); // the country code telephone prefix

  if(telephone_no.substring(0, prefix.length) == prefix) { telephone_no = telephone_no.substring(prefix.length); } // strip country code if supplied
  if(telephone_no.substring(0, 1) == '0') { telephone_no = telephone_no.substring(1); } // strip leading area code zero if supplied

  return '+' + prefix + '.' + telephone_no;
}
    
function get_form(formID) {
  for(i=0; i < document.forms.length; i++) { if(document.forms[i].id == formID) { return document.forms[i]; } }
  return false;
}

function clear_actionbar() {
  if(document.getElementById('tbl_actions')) {
    var tds = document.getElementById('tbl_actions').getElementsByTagName('td');
    for(i=0; i < tds.length; i++) {
      var radio = tds[i].getElementsByTagName('input')[0];
      var label = tds[i].getElementsByTagName('label')[0];
      if(label != null && radio != null) {
        if(label.className == 'active') {
          radio.disabled = false; radio.checked = false;
        } else {
          enable_action(radio, label, false);
        }
      }
    }
  }
  return false;
}

function clear_table() {
  if(document.getElementById('tbl_myaccount')) {
    var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
    for(i=0; i < trs.length; i++) { trs[i].getElementsByTagName("td")[0].getElementsByTagName("input")[0].checked = false; }
  }
  if(document.getElementById('show_rows')) { document.getElementById('show_rows').options[0].selected = true; }
  return false;
}

function set_pagination_options() {
  if(document.getElementById('current_start') && document.getElementById('current_end') && document.getElementById('total_records')) {
    if(document.getElementById('current_start').innerHTML > 1) { disable_navigation('prev', true); }
    if(document.getElementById('current_end').innerHTML < document.getElementById('total_records').innerHTML) { disable_navigation('next', true); }
  }
  return false;
}

function check_all(form) {
  for(i=0; i < form.elements.length; i++) { // loop each form element
    if(form.elements[i].type == 'checkbox' && form.elements[i].name != 'checkall') {
      form.elements[i].checked = (form.checkall.checked) ? true : false;
    }
  }
  select_all_rows();
 if(!actionbar_opened) { show_actionbar(); }
  return true;
}

function select_all_rows() {
  var checkall = document.getElementById('checkall').checked;              
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    for(j=0; j < tds.length; j++) { tds[j].style.backgroundColor = (checkall) ? row_onclick_color : ''; }
  }
}

function select_row(row, e) {              
  var td = row.getElementsByTagName("td");
  var checkbox = row.getElementsByTagName("input")[0];

 
  if(get_target(e).className == 'domain') { return false; }
  
  if(get_target(e).name != 'domain' && get_target(e).name != 'invoice' && get_target(e).name != 'order') { checkbox.checked = (checkbox.checked) ? false : true; }
    
  for(i=0; i < td.length; i++) { td[i].style.backgroundColor = (checkbox.checked) ? row_onclick_color : ''; }
 


  if(document.getElementById('actionbar').style.display == 'none'){
     show_actionbar();
  }
  
//  if(!actionbar_opened) { /*show_actionbar();*/ }
  set_actions();
  return true;
}

function select_card(row, e) {              
  var td = row.getElementsByTagName("td");
  var radio = row.getElementsByTagName("input")[0];

  select_all_rows();
  
  if(get_target(e).name != 'eccsid') { radio.checked = (radio.checked) ? false : true; }
  for(i=0; i < td.length; i++) { td[i].style.backgroundColor = (radio.checked) ? row_onclick_color : '#fff'; }

  if(!actionbar_opened) { show_actionbar(); }
  set_actions();
  
  return true;
}

function show_package(pid) {
  var img = document.getElementById('iid_' + pid);
  var tbl_orderitems = document.getElementById('tbl_orderitems');
  var theads = tbl_orderitems.getElementsByTagName("thead");
  var tbodies = tbl_orderitems.getElementsByTagName("tbody");
  var thead = theads[0]; var tbody = tbodies[0];
  var trs = tbody.getElementsByTagName("tr");
  
  if(img.title == 'Show details') {
    img.src = '/gfx/myaccount/icon_minus.gif';
    img.title = 'Hide details';
    for(i=0; i < trs.length; i++) { if(trs[i].className == 'pid_' + pid + ' packagedata') { trs[i].style.display = '' } }
  } else {
    img.src = '/gfx/myaccount/icon_plus.gif';
    img.title = 'Show details';
    for(i=0; i < trs.length; i++) { if(trs[i].className == 'pid_' + pid + ' packagedata') { trs[i].style.display = 'none' } }
  }   
  return false;
}

function set_help(text) {
  document.getElementById('help-text').innerHTML = text + ' &gt;&gt; <input type="button" onclick="action_submit(this.form);" value="Go"/>';
  return false;
}

function enable_action(radio, label, state) {
  if(state) {
    radio.disabled = false; label.className = 'active';
  } else {
    radio.disabled = true; label.className = ''; radio.checked = false;
  }
}

function get_active_tab() {
  var tab_lis = document.getElementById('tabsC').getElementsByTagName('li');
  for(i=0; i < tab_lis.length; i++) {
    if(tab_lis[i].getElementsByTagName('a')[0].className == 'active') { return tab_lis[i].id.substring(6); }
  }
  return false;
}

function get_action() {
  var radios = document.getElementById('tbl_actions').getElementsByTagName('input');
  
  for(i=0; i < radios.length; i++) { if(radios[i].checked) { return radios[i].id; } }
  return false;
}

function get_selected() {
  var selected = new Array();
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    if(tds[0].getElementsByTagName("input")[0].checked) {
      selected.push(tds[0].getElementsByTagName("input")[0].value);      
    }
  }
  return selected;
}

function get_registrykey(domain) {
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    if(tds[0].getElementsByTagName("input")[0].value == domain) {
      return strip_tags(tds[1].getElementsByTagName("span")[0].innerHTML);
    }
  }
  return false;
}


function get_expirydate(domain) {
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    if(tds[0].getElementsByTagName("input")[0].value == domain) {
    return(strip_tags(tds[3].innerHTML));
    }
  }
  return false;
}



function get_privatereg_period(domain) {
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    if(tds[0].getElementsByTagName("input")[0].value == domain) {
      return strip_tags(tds[4].getElementsByTagName("span")[0].innerHTML);
    }
  }
  return false;
}




function set_actions() {              
  
  var active_tab = get_active_tab();
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  var selected = new Array(); var row = new Array();    
    
  // alert(active_tab);
  // work out what rows have been selected 
  for(i=0; i < trs.length; i++) {
    var tds = trs[i].getElementsByTagName("td");
    if(tds[0].getElementsByTagName("input")[0].checked) {
            //alert("I value ["+ i + "] Checked [" + tds[0].getElementsByTagName("input")[0].checked+"]");
      switch(active_tab) {
        case "domains":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          //alert("row[id]->" + tds[0].getElementsByTagName("input")[0].id.substring(3));
          row['domain'] = tds[1].innerHTML;
          dnsStatus = document.getElementById("dns-"+row['id']).value;
          //alert("DNS Status ["+ dnsStatus + "]");
          //row['space'] = tds[2].innerHTML;
          //row['registrykey'] = tds[3].innerHTML;
          row['domainstatus'] = tds[2].innerHTML;
          row['expiry'] = tds[3].innerHTML;
          row['regstatus'] = strip_tags(tds[4].innerHTML);
          row['lockstatus'] = strip_tags(tds[5].innerHTML);
          //alert("row[lockstatus]->" + strip_tags(tds[5].innerHTML) + ", \n" +tds[5].innerHTML);
          //DNS status
          row['dnsstatus'] = dnsStatus;
          row['renewable'] = strip_tags(tds[0].className);
          row['operations'] = strip_tags(tds[2].className);
          row['privatereg'] = strip_tags(tds[4].innerHTML);
          selected.push(row);
          break;
        case "service":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          row['service'] = tds[1].innerHTML;
          row['domain'] = tds[2].innerHTML;
          row['status'] = tds[3].innerHTML;
          row['expiry'] = tds[4].innerHTML;
          //row['serviceid'] = tds[5].innerHTML;
          selected.push(row);
          break;
        case "orders":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          row['orderid'] = tds[1].innerHTML;
          row['date'] = tds[2].innerHTML;
          row['status'] = tds[3].innerHTML;
          selected.push(row);
          break;
        case "invoices":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          row['invoiceid'] = tds[1].innerHTML;
          row['date'] = tds[2].innerHTML;
          row['amount'] = tds[3].innerHTML;
          row['status'] = tds[4].innerHTML;
          selected.push(row);
          break;
        case "eccs_cc":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          row['cardtype'] = tds[1].innerHTML;
          row['cardnumber'] = tds[2].innerHTML;
          row['expirydate'] = tds[3].innerHTML;
          row['cardholdername'] = tds[4].innerHTML;
          selected.push(row);
          break;
        case "eccs_bank":
          row['id'] = tds[0].getElementsByTagName("input")[0].id.substring(3);
          row['accounttype'] = tds[1].innerHTML;
          row['accountbsb'] = tds[2].innerHTML;
          row['accountno'] = tds[3].innerHTML;
          row['accountname'] = tds[4].innerHTML;
          selected.push(row);
          break;
      }
    } else {
            if(document.getElementById("manage-dns")) {
                //alert("UNCHECK Changing the id of the manage");
                document.getElementById("manage-dns").id = "dns";
            }
        }
  }
  
  // loop actions and enable/disabled as applicable
  tds = document.getElementById('tbl_actions').getElementsByTagName('td');
  var all_actions_null = true;
  
  for(i=0; i < tds.length; i++) {
    var radio = tds[i].getElementsByTagName('input')[0];
    var label = tds[i].getElementsByTagName('label')[0];
    
    if(radio != null && label != null) {
            
      switch(active_tab) {
        case "domains":
          switch(radio.id) {
            case "add": // always active
              if(radio.checked) { enable_action(radio, label, true); }
              break;
            case "view":
              if(selected.length == 1 && (selected[0]['domainstatus'] == 'Registered' || selected[0]['domainstatus'] == 'Expired')) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "cancel":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'Locked' && selected[0]['domainstatus'] == 'Registered' && selected[0]['operations'].match(/(\[cancellation\])/g)) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;              
            case "lock":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'N/A' && selected[0]['domainstatus'] != 'Expired') { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;             
            case "authinfo":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'Locked' && selected[0]['domainstatus'] == 'Registered' && selected[0]['operations'].match(/(\[authinfo\])/g)) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;            
            case "update":
              if(selected.length == 1 && (selected[0]['domainstatus'] == 'Registered' || selected[0]['domainstatus'] == 'Expired') && selected[0]['operations'].match(/(\[dotnamecontactmodification\]|\[contactmodification\])/g)) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "owner":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'Locked' && selected[0]['domainstatus'] == 'Registered' && selected[0]['operations'].match(/(\[changeowner\])/g)) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;         
            case "nameserver-add":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'Locked' && selected[0]['domainstatus'] == 'Registered' && selected[0]['operations'].match(/(\[nameserver\])/g)) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
                        case "nameserver-update":
              if(selected.length == 1 && selected[0]['lockstatus'] != 'Locked' && selected[0]['domainstatus'] == 'Registered' && selected[0]['operations'].match(/(\[redelegation\])/g)) {
                                //Redelegate if the dns Status is inactive or cancelled. 
                                if(selected[0]['dnsstatus'] == 'INACTIVE' || selected[0]['dnsstatus'] == 'CANCELLED') {
                                    enable_action(radio, label, true);
                                } else {
                                    enable_action(radio, label, false);
                                }
                            } else { 
                                enable_action(radio, label, false); 
                            }
              break;
            case "dns": //nameserver-update"
                            var flag = true;
                            //New changes for DNS project. Label and the help_text changes based on the domain name's dnsStatus
                            //If the DNS is inactive, disable the manage dns. Reason - we can;t enable DNS from this page as information regarding NS and attached services is not available.
              if(selected.length == 1 && selected[0]['domainstatus'] == 'Registered') {
                                if(selected[0]['dnsstatus'] == 'INACTIVE' || selected[0]['dnsstatus'] == 'CANCELLED') {
                                    //document.getElementById('dnsLabel').innerHTML = "Enable DNS";
                                    //document.getElementById('dns').onclick = function() { set_help('Enable DNS for selected domain');}
                                    flag = false;
                                } else if(selected[0]['dnsstatus'] == 'INSTALLING') {
                                    document.getElementById('dnsLabel').innerHTML = "Manage DNS (Installing)";
                                    flag = false;
                                    document.getElementById('dns').onclick = function() { 
                                        //set_help('Manage DNS for selected domain');
                                    }
                                }   else {
                                    document.getElementById('dnsLabel').innerHTML = "Manage DNS";
                                    document.getElementById('dns').onclick = function() {set_help('Manage DNS for selected domain');}
                                    //Change the ID otherwise get_Action() will set the action to DNS T&C's page
                                    document.getElementById('dns').id = "manage-dns";                       
                                }
                                enable_action(radio, label, flag);
                            } else {
                                enable_action(radio, label, false);                                                                     
                            }   
              break;                        
            case "email":
              if(selected.length == 1 && selected[0]['space'] == '.name' && selected[0]['domainstatus'] == 'Registered') { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "renew":
                //console.log(selected[0]['operations']);               
              if(selected.length == 1 && (selected[0]['domainstatus'] == 'Registered' || selected[0]['domainstatus'] == 'Expired') && selected[0]['renewable'] == 'True' && selected[0]['operations'].match(/(\[renewal\]|\[renewalsau\])/g)) {
                  enable_action(radio, label, true);                  
              }              
              else { 
           
            //  console.log(selected[0]['domainstatus']);
                //console.log(  selected[0]['operations'].match(/(\[renewal\]|\[renewalsau\])/g));
                  enable_action(radio, label, false);              
              }
              break;
            case "privatereg":
               var PRmatch = /^\d+Protect\syour\sprivacy$/;
                            if((selected.length == 1) && selected[0]['privatereg'].match(PRmatch) && (selected[0]['domainstatus'] != 'Expired')){
                                //console.log('privatereg');
                                enable_action(radio, label, true);
                            } else {                
                                enable_action(radio, label, false);
                            }
                            break;
          }
          break;
        case "service":
          switch(radio.id) {
            case "view":
              if(selected.length == 1 && selected[0]['serviceid'] != '0') { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "cancel":
              if(selected.length == 1 && selected[0]['status'] == 'Active') { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break; 
          }
          break;     
        case "orders":
          switch(radio.id) {
            case "view":
              if(selected.length == 1) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
                        case "retrieve":
              if((selected.length == 1) && (selected[0]['status'] == 'Abandoned')) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
          }
          break;     
        case "invoices":
          switch(radio.id) {
            case "view":
              if(selected.length == 1) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "print":
              if(selected.length > 0) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
          }
          break;      
        case "eccs_cc":
          switch(radio.id) {
            case "add": // always active
              if(radio.checked) { enable_action(radio, label, true); }
              break;
            case "edit":
              if(selected.length > 0) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "delete":
              if(selected.length > 0) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
          }
          break;
        case "eccs_bank":
          switch(radio.id) {
            case "add": // always active
              if(radio.checked) { enable_action(radio, label, true); }
              break;
            case "edit":
              if(selected.length > 0) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
            case "delete":
              if(selected.length > 0) { enable_action(radio, label, true); } else { enable_action(radio, label, false); }
              break;
          }
          break;      
      }
      
      if(radio.checked) { all_actions_null = false; }
      
    }    
  }
  
  if(all_actions_null) { document.getElementById('help-text').innerHTML = ''; } // remove help text
  
  return false;
}

function action_submit(form) {
  var active_tab = get_active_tab();
  var action = get_action();
  var login = document.getElementById('frm_myaccount').className;
    
  switch(active_tab) {
        
    case "domains":
      switch(action) {
        case "add":
          form.action = "/cc/myaccount/adddomainname/index";
          break;
        case "view":
          form.action = "/cc/myaccount/domains/view?domainname=" + get_selected()[0] + "&registrykey=" + get_registrykey(get_selected()[0]) + "&encrypted=true";
          break;
        case "cancel":
          form.action = "/cc/myaccount/domain-maintenance?function=canceldomain&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "lock":
          form.action = "/cc/myaccount/domain-maintenance?function=lock&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "authinfo":
          form.action = "/cc/myaccount/domain-maintenance?function=authinfo&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "update":
          form.action = "/cc/myaccount/domain-maintenance?function=update&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "owner":
          form.action = "/cc/myaccount/domain-maintenance?function=owner&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "nameserver-add":
          form.action = "/cc/myaccount/domain-maintenance?function=nameserver-add&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "dns":
          form.action =  "/cc/myaccount/dns/details?domainname=" + get_selected()[0];
          break;
                case "manage-dns":
          //form.action = "/myaccount/dns?domainName=" + get_selected()[0] + "&myAccount=" + document.getElementById('usernamefield').value;
                    form.action = "/cc/myaccount/dns/redelegate-actionbar?domainName=" + get_selected()[0] + "&myAccount=" + document.getElementById('usernamefield').value;
          break;
        case "nameserver-update":
          form.action = "/cc/myaccount/domain-maintenance?function=nameserver-update&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "email":
          form.action = "/cc/myaccount/domain-maintenance?function=email&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "renew":
          form.action = "/cc/myaccount/domain-maintenance?function=renew&domain=" + get_selected()[0] + "&key=" + get_registrykey(get_selected()[0]);
          break;
        case "privatereg":
                    form.action =  "/cc/order/privateregistration/index?domainname=" + get_selected()[0] + "&registrykey=" + get_registrykey(get_selected()[0])  +"&encrypted=true&prodid=PrivateRegistration%20" + get_privatereg_period(get_selected()[0]) + "Yr";
                    break;              
      }
      break;
    case "service":
      switch(action) {
        case "view":
          form.action = "/cc/myaccount/services/view?login=" + login + "&serviceid=" + get_selected()[0];
          break;
        case "cancel":
          form.action = "/cc/myaccount/services/cancel?login=" + login + "&serviceid=" + get_selected()[0];
          break;
      }
      break;
    case "orders":
      switch(action) {
        case "view":
          form.action = "/cc/myaccount/orders/view?orderid=" + get_selected()[0];
          break;
                case "retrieve":
          form.action = "/cc/order/retrieveorder?orderid=" + get_selected()[0];
          break;
      }
      break;
    case "invoices":
      switch(action) {
        case "view":
          form.action = "/cc/myaccount/invoices/view?invoiceid=" + get_selected()[0];
          break;
        case "print":
          print_data('invoice', get_selected());
          return false;
          break;
      }
      break;
    case "eccs_cc":
    case "eccs_bank":
      break;
  }
    
  form.submit();
}

function print_data(template, ids) {
  switch(template) {
    case "invoice":
      for(i=0; i < ids.length; i++) {
        //alert(ids[i]);        
        var handle = window.open('/cc/myaccount/invoices/print?invoiceid=' + ids[i], 'invoiceid_' + ids[i], '');
        handle.document.close();
      }      
      break;
  }
  return false;
}


function switch_sub_tab(groupID, tabID) {
  var group = document.getElementById(groupID);
  var divs =  group.getElementsByTagName('div');
  
  for(i=0; i < divs.length; i++) {
    if(divs[i].className == 'tab_data') {
      divs[i].style.display = (divs[i].id.substring(0, 8) == tabID) ? 'block' : 'none';
    } else if(divs[i].className == 'sub_tabs') {
      var tabs = divs[i].getElementsByTagName('a');
      for(j=0; j < tabs.length; j++) {
        tabs[j].className = (tabs[j].id == tabID && tabs[j].className != 'active') ? tabs[j].className + ' active' : 'tab';
      }
    }
  }
}

function show_actionbar() {
  if(document.getElementById('actionbar-handle').title == 'Show Actions') {
    document.getElementById('actionbar').style.display = 'block';
    document.getElementById('actionbar-handle').title = 'Hide Actions';
    document.getElementById('actionbar-handlebar-anchor').style.backgroundImage = "url('/gfx/myaccount/tab_action_left_up.gif')";
    document.getElementById('actionbar-handlebar-text').innerHTML = 'Hide Actions';
    actionbar_opened = true;
  } else {
    document.getElementById('actionbar').style.display = 'none';
    document.getElementById('actionbar-handle').title = 'Show Actions';
    document.getElementById('actionbar-handlebar-anchor').style.backgroundImage = "url('/gfx/myaccount/tab_action_left_down.gif')";
    document.getElementById('actionbar-handlebar-text').innerHTML = 'Show Actions';
  }
  return false;
}

function disable_navigation(elementID, state) { // state is boolean (true = on, false = off)
  var element = document.getElementById(elementID);
  var title = (elementID == 'next') ? 'Next' : 'Previous';
  if(state) {
    element.title = 'View ' + title + ' Records';
    element.style.color = '#036';
    element.style.textDecoration = 'underline';
    element.onmouseover = function() { element.style.textDecoration = 'none'; }
    element.onmouseout = function() { element.style.textDecoration = 'underline'; }
  } else {
    element.title = 'No More Records';
    element.style.color = '#999';
    element.style.textDecoration = 'none';
    element.onmouseover = null;
    element.onmouseout = null;
  }
}


function get_myaccount_count(cancelled) {
  var count = 0;
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");
  for(i=0; i < trs.length; i++) {
   var tds = trs[i].getElementsByTagName("td");
   if((strip_tags(tds[2].innerHTML) == "Registered") || ((strip_tags(tds[2].innerHTML) == "Expiring"))){
    count++;
   } 
  if(((strip_tags(tds[2].innerHTML) == "Cancelled") || (strip_tags(tds[2].innerHTML) == "Expired")) && (cancelled)){
    count++;
   } 
  }
  return count;
}


function show_records(direction) {
  var trs = document.getElementById('tbl_myaccount').getElementsByTagName('tbody')[0].getElementsByTagName("tr");

  //var total_records = parseInt(document.getElementById('total_records').innerHTML);
  var total_records = get_myaccount_count(true);
  var current_start = parseInt(document.getElementById('current_start').innerHTML) - 1; // 40
  var current_end = parseInt(document.getElementById('current_end').innerHTML); // 45
  var size = parseInt(document.getElementById('show_rows').value);
  
  // alert(size); return;
  
  // var size = current_end - current_start; if(size < 10) { size = 10; }
  
  if(direction == 'next') {
    var new_start = current_start + size;
    var new_end = new_start + size;
    
    if(current_end == total_records || new_end >= total_records) { disable_navigation('next', false); if(current_end == total_records) return; }                
    disable_navigation('prev', true);
  
  } else if(direction == 'prev') {
    var new_start = current_start - size;
    var new_end = new_start + size;
    
    if(current_start == 0 || new_start == 0) { disable_navigation('prev', false); if(current_start == 0) return; }
    disable_navigation('next', true);
                  
  } else { // show_rows was selected
    var new_start = 0;
    var new_end = new_start + size;
    disable_navigation('prev', false);
    
    if(new_end >= total_records) { disable_navigation('next', false); } else { disable_navigation('next', true); }
  }
  
  for(i=0; i < trs.length; i++) {
    trs[i].style.display = (i >= new_start && i < new_end) ? '' : 'none';
  }
  
  document.getElementById('current_start').innerHTML = new_start + 1;
  document.getElementById('current_end').innerHTML = (new_end >= total_records) ? total_records : new_end;              
}

function hasClass(ele,cls) {
    return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function search_records(keyword) {
  var count = 0;
  var current_start = parseInt(document.getElementById('current_start').innerHTML) - 1;
  var current_end = parseInt(document.getElementById('current_end').innerHTML);  
  var tbl_myaccount = document.getElementById('tbl_myaccount');
  var tbodies = tbl_myaccount.getElementsByTagName("tbody");
  var tbody = tbodies[0];
  var html = "";
    
  if(trim(keyword) == '') { alert('Please enter search criteria'); return false; }
  keyword = keyword.toLowerCase();
          
  var trs = tbody.getElementsByTagName("tr");
  
  for(i=0; i < trs.length; i++) { // loop each table row
    var tds = trs[i].getElementsByTagName("td");
    var row_match = false;
    for(j=0; j < tds.length; j++) { // loop each table cell
      var innerText = tds[j].innerHTML;
      if (innerText.indexOf('class="domain"') != -1) {        
          var link = tds[j].getElementsByTagName("a");
          html = strip_tags(link[0].innerHTML.toLowerCase());         
      } else {
          html = strip_tags(tds[j].innerHTML.toLowerCase());
      }
      if(html.indexOf(keyword) != -1) { 
        row_match = true; 
        count++; 
        break; 
      }
    }
    if (!row_match) { 
       trs[i].style.display = 'none';
    } else {
       trs[i].style.display = '';   
    }
  }
  
  if(count == 0) {
    for(i=0; i < trs.length; i++) { trs[i].style.display = (i >= current_start && i < current_end) ? '' : 'none'; }
    alert('No records found matching "' + keyword + '"');
  } else {
    document.getElementById('search_results').innerHTML = 'Found ' + count + ' row(s) matching keyword: <strong>' + keyword + ' </strong>&nbsp; | &nbsp;<a href="javascript:clear_results();">clear results<a>';
    document.getElementById('span_controls').style.display = 'none';
  }
  return false;
}

function clear_results(){
  document.getElementById('search_results').innerHTML = '';
  document.getElementById('span_controls').style.display = 'inline';  
  show_records();
}

function in_array(needle, haystack) {
  for(var i=0; i < haystack.length; i++) {
    if(haystack[i] == needle) { return true; }
  }
  return false;
}

function generate_csv(tableID, skipcols) {
  var output = '';
  var trs = document.getElementById(tableID).getElementsByTagName('tr');  
  
  
  
  for(i=0; i < trs.length; i++) { // loop each table row
    var tds = (trs[i].getElementsByTagName("th").length != 0) ? trs[i].getElementsByTagName("th") : trs[i].getElementsByTagName("td");
    for(j=0; j < tds.length; j++) { // loop each table cell
      if(in_array(j, skipcols)) { /* skip data */ } else {
        output += strip_tags(tds[j].innerHTML); output += (j == (tds.length - 1)) ? '<br/>' : ',';
      }
    }
  }
  
  var handle = window.open('','csv_output','');
  handle.document.writeln("<html><head><title>Download .CSV</title></head><body>" + output + "</body></html>");
  handle.document.close();

  return true;  
}
            
function validateChangePass(form) {
  if(form.currentpass.value == '') {  alert("Please provide your old password"); form.currentpass.focus(); return false; }
    
    if(form.newpass1.value == '') {  alert("Please provide your new password"); form.newpass1.focus(); return false; }
  if(form.currentpass.value == form.newpass1.value) {  alert("The new password must not be the same as the old password"); form.newpass1.focus(); return false; }   
    if(form.newpass1.value.length < 6 || form.newpass1.value.length >20) {  alert("Your new password must be between 6 and 20 characters long"); form.newpass1.focus(); return false; }
  if(form.newpass1.value.indexOf(' ') > -1) {  alert("Your new password must not contain spaces"); form.newpass1.focus(); return false; }       
    
    if(form.newpass2.value == '') {  alert("Please verify your new password"); form.newpass2.focus(); return false; }   
  if(form.newpass2.value != form.newpass1.value) { alert("The new passwords are not the same. Please ensure that the passwords match."); form.newpass1.focus(); return false; }

  if(form.newhint.value == '') {  alert("Please provide a password hint"); form.newhint.focus(); return false; }
  if(form.newhint.value == form.newpass1.value) {  alert("The new password hint cannot be the same as the new password"); form.newhint.focus(); return false; }
  if(form.newhint.value == 'hint' || form.newhint.value == 'HINT') {  alert("The new password hint cannot be 'hint' or 'HINT'"); form.newhint.focus(); return false; }
    return true;    
}

function validatelogin(form) {
  if(trim(form.username.value) == "") { alert("Please enter your My Account Username"); form.username.focus(); return false; }
  if(trim(form.password.value) == "") { alert("Please enter your My Account Password"); form.password.focus(); return false; }  
  if(!form.username.value.match(/^.{6,20}$/)) { alert("Please enter a valid My Account Username"); form.username.focus(); return false; }
  if(!form.password.value.match(/^.{6,20}$/)) { alert("Please enter a valid My Account Password"); form.password.focus(); return false; }

  form.submit.disabled = true; 
    form.submit.value = 'Please wait...';
  return true;
}

function getAccountType(accounttype) {
  if(accounttype.type == 'hidden') {
    acctype = accounttype.value;
  } else {
    acctype = (accounttype[0].checked) ? accounttype[0].value : accounttype[1].value;
    if(!accounttype[0].checked && !accounttype[1].checked) { accounttype[1].checked = true; }
  }
  return acctype;
}

function validatecreate(form) {

  var date = new Date();
  var accounttype = getAccountType(form.accounttype);
    
  
  // transform email addresses to lowercase
  
  form.email.value = form.email.value.toLowerCase();
  form.altemail.value = form.altemail.value.toLowerCase();
  
  // check required fields were completed  
  if(accounttype == "") { form.accounttype[0].focus(); highlight('tr_accounttype'); alert("Please complete the 'Account Type' field"); return false; }
  if(accounttype == "20" && trim(form.orgname.value) == "") { form.orgname.focus(); highlight('tr_orgname'); alert("Please complete the 'Organisation Name' field"); return false;}
  
  //title is optional if(trim(form.title.value) == "") { form.title.focus(); highlight('tr_name'); alert("Please complete the 'Title' field"); return false; }
  if(trim(form.fname.value) == "") { form.fname.focus(); highlight('tr_name'); alert("Please complete the 'First Name' field"); return false; }
  if(trim(form.sname.value) == "") { form.sname.focus(); highlight('tr_name'); alert("Please complete the 'Last Name' field"); return false; }  
  
  if(accounttype == "10") { // personal account
    if(trim(form.dobday.value) == "") { form.dobday.focus(); highlight('tr_dob'); alert("Please complete the 'Date of Birth: Day' field"); return false; }
    if(trim(form.dobmonth.value) == "") { form.dobmonth.focus(); highlight('tr_dob'); alert("Please complete the 'Date of Birth: Month' field"); return false; }
    if(trim(form.dobyear.value) == "") { form.dobyear.focus(); highlight('tr_dob'); alert("Please complete the 'Date of Birth: Year' field"); return false; }
    if(!isValidDate(form.dobday.value, form.dobmonth.value, form.dobyear.value) || isRidiculousAge(form.dobyear.value)) { form.dobday.focus(); highlight('tr_dob'); alert("Please enter a valid Date of Birth"); return false; }
    if(!isAtleast18(form.dobday.value, form.dobmonth.value, form.dobyear.value)) { form.dobday.focus(); highlight('tr_dob'); alert("You must be at least 18 years old to create an account"); return false; }
  }
  
  if(trim(form.country.value) == "") { form.country.focus(); highlight('tr_country'); alert("Please complete the 'Country' field"); return false; }
  if(trim(form.address1.value) == "") { form.address1.focus(); highlight('tr_address1'); alert("Please complete the 'Address' field"); return false; }
  if(trim(form.suburb.value) == "") { form.suburb.focus(); highlight('tr_suburb'); alert("Please complete the 'Suburb' field"); return false; }
  if(trim(form.state.value) == "") { form.state.focus(); highlight('tr_state'); alert("Please complete the 'State' field"); return false; }
  if(trim(form.postcode.value) == "") { form.postcode.focus(); highlight('tr_postcode'); alert("Please complete the 'Postcode' field"); return false; }  
  if(trim(form.phone.value) == "") { form.phone.focus(); highlight('tr_phone'); alert("Please complete the 'Telephone No' field"); return false; }              

  // format telephone numbers
  form.phone.value = format_tel(form.phone.value, form.country.value);
  if(!form.phone.value.match(/^[0-9.+]{2,17}$/)) { form.phone.focus(); highlight('tr_phone'); alert("Telephone No must be between 2 and 17 digits long"); return false; }
  if(trim(form.fax.value) != "") { form.fax.value = format_tel(form.fax.value, form.country.value); }
  if(trim(form.mobile.value) != "") { form.mobile.value = format_tel(form.mobile.value, form.country.value); }
  
  if(trim(form.email.value) == "") { form.email.focus(); highlight('tr_email'); alert("Please complete the 'Email Address' field"); return false; }
  if(!isValidEmail(form.email.value)) { form.email.focus(); highlight('tr_email'); alert("Please enter a valid Email Address"); return false; }
  if(trim(form.altemail.value) != "" && !isValidEmail(form.altemail.value)) { form.altemail.focus(); highlight('tr_altemail'); alert("Please enter a valid Alternative Email Address"); return false; }
  
  if(form.submit.value == 'Create Account') {
    if(trim(form.username.value) == "") { form.username.focus(); highlight('tr_username'); alert("Please complete the 'Username' field"); return false; }
    if(!form.username.value.match(/^[a-zA-Z0-9]{6,20}$/)) { form.username.focus(); highlight('tr_username'); alert("Username must be alphanumeric and between 6 and 20 characters long"); return false; }
    if(form.myAccountStatusId.value == '50' && form.username.value.toLowerCase() == form.id.value.toLowerCase()) { form.username.focus(); highlight('tr_username'); alert("Username cannot be the same as your Activation ID"); return false; }    
    if(trim(form.password.value) == "") { form.password.focus(); highlight('tr_password'); alert("Please complete the 'Password' field"); return false; }
    if(!form.password.value.match(/^.{6,20}$/)) { form.password.focus(); highlight('tr_password'); alert("Password must be between 6 and 20 characters long"); return false; }
    if(form.password.value.toLowerCase() == form.username.value.toLowerCase()) { form.password.focus(); highlight('tr_password'); alert("Password cannot be the same as your Username"); return false; }
    if(form.password.value.toLowerCase() == form.code.value.toLowerCase()) { form.password.focus(); highlight('tr_password'); alert("Password cannot be the same as your Activation Code"); return false; }
    if(trim(form.password2.value) == "") { form.password2.focus(); highlight('tr_password2'); alert("Please complete the 'Verify Password' field"); return false; }
    if(form.password.value != form.password2.value) { form.password2.focus(); highlight('tr_password2'); alert("Verify Password must match the Password"); return false; }
    // if(trim(form.passwordhint.value) == "") { form.passwordhint.focus(); highlight('tr_passwordhint'); alert("Please complete the 'Password Hint' field"); return false; }
    // if(form.passwordhint.value.match(/^[Hh][Ii][Nn][Tt]$/)) { form.passwordhint.focus(); highlight('tr_passwordhint'); alert("Password Hint is invalid"); return false; }
    // if(form.password.value == form.passwordhint.value) { form.passwordhint.focus(); highlight('tr_passwordhint'); alert("Password Hint cannot be the same as password"); return false; }
  }
    
  if(trim(form.challengeq.value) == "") { form.challengeq.focus(); highlight('tr_challengeq'); alert("Please complete the 'Challenge Question' field"); return false; }
  if(trim(form.challengea.value) == "") { form.challengea.focus(); highlight('tr_challengea'); alert("Please complete the 'Challenge Answer' field"); return false; }  
  
  if(form.submit.value == 'Create Account') {
    if(!form.tandc.checked) { form.tandc.focus(); highlight('tr_tandc'); alert("Please agree to the Terms and Conditions"); return false; }
  }

  return true;
}

function updateState(countrycode) {
  var state = document.getElementById('state');
  var value = (state.type == 'text') ? state.value : state.options[state.selectedIndex].text;
  
  if(havestate[countrycode]) { // display as select box          
    document.getElementById('td_state').removeChild(state);
    var newField = document.createElement('select');
    newField.id = 'state'; newField.name = 'state';
    
    var sarray = window['statearray' + countrycode];
    for(var i in sarray) {          
      var newOption = document.createElement('option');
      newOption.value = i;
      newOption.text = sarray[i];
      if(sarray[i] == value || i == value) newOption.selected = true;
      newField.options.add(newOption);
    }
        newField.value = value;
  } else { // display as input box
    document.getElementById('td_state').removeChild(state);
    var newField = document.createElement('input');    
    newField.type = 'text'; newField.id = 'state'; newField.name = 'state'; newField.size = 30; newField.maxLength = 30; newField.value = value;    
    newField.onchange = function() { unhighlight('tr_state'); };
    
  }
  document.getElementById('td_state').appendChild(newField);
  return true;
}

function display_myaccount_rows(value) {    // 10 = Personal | 20 = Business
  if(document.getElementById('tr_orgname')) { document.getElementById('tr_orgname').style.display = (value == 10 || value == 8001) ? 'none' : ''; }
  if(document.getElementById('tr_businessidnumber')) { document.getElementById('tr_businessidnumber').style.display = (value == 10  || value == 8001) ? 'none' : ''; }
  if(document.getElementById('tr_dob')) { document.getElementById('tr_dob').style.display = (value == 20  || value == 8000) ? 'none' : ''; }
  if(document.getElementById('tr_position')) { document.getElementById('tr_position').style.display = (value == 10  || value == 8001) ? 'none' : ''; }
}

function show_dob() { if(document.getElementById('accounttype10') && document.getElementById('accounttype10').checked) { display_myaccount_rows(10) } }

function display_profile(accounttype) {
  var accounttype = getAccountType(accounttype);
  if(accounttype == "20") {
    if(document.getElementById('tr_websiteurl')) { document.getElementById('tr_websiteurl').style.display = (document.getElementById('tr_websiteurl').style.display == '') ? 'none' : ''; }
    if(document.getElementById('tr_businesstype')) { document.getElementById('tr_businesstype').style.display = (document.getElementById('tr_businesstype').style.display == '') ? 'none' : ''; }
    if(document.getElementById('tr_industry')) { document.getElementById('tr_industry').style.display = (document.getElementById('tr_industry').style.display == '') ? 'none' : ''; }
    if(document.getElementById('tr_employees')) { document.getElementById('tr_employees').style.display = (document.getElementById('tr_employees').style.display == '') ? 'none' : ''; }
    if(document.getElementById('tr_manageclients')) { document.getElementById('tr_manageclients').style.display = (document.getElementById('tr_manageclients').style.display == '') ? 'none' : ''; }
  } else {
    if(document.getElementById('tr_manageclients')) { document.getElementById('tr_manageclients').style.display = (document.getElementById('tr_manageclients').style.display == '') ? 'none' : ''; }
  }
  
}

function display_help(event, value) {
    
  var e = (window.event) ? window.event : event;
    
  if(document.getElementById('help-info')) {
    document.body.removeChild(document.getElementById('help-info')); return false
  } else {
    var div = document.createElement('div'); div.id = 'help-info';
    
    if(e.pageX) {
      x = e.pageX; y = e.pageY;
    } else if(e.clientX) {
      x = e.clientX + document.body.scrollLeft; y = e.clientY + document.body.scrollTop;
    }
    
    div.style.top = (y+10) + 'px'; div.style.left = (x-230) + 'px';
    
    if(value == 'businessidnumber') {
      div.innerHTML = '<h4>Why am I being asked for this?</h4><p>This information is required by some domain name registries like auDA. Providing your ABN (Australian Business Number) now will make purchasing .au domain names easier.</p><p>Don\'t worry if you don\'t have an ABN, you can supply other information later.</p>';
    } else if(value == 'challengeq') {
      div.innerHTML = '<h4>What\'s this?</h4><p>The answer you provide to the challenge question may be used by Melbourne IT\'s Customer Service staff to confirm your identity should you forget or misplace your login details.</p>';
    }
    
    document.body.appendChild(div);
  }
}

function highlight(div) { document.getElementById(div).style.backgroundColor = '#fdd'; }
function unhighlight(div) { document.getElementById(div).style.backgroundColor = ''; }

function containsBadChars(s, badChars) { 
  for(i = 0; i < badChars.length; i++) { 
    if(s.indexOf(badChars.charAt(i)) > -1) { 
      return true; 
    } 
  } 
  return false; 
} 

