RegisterPage = {

  readyToGo : false,
  alert : function(str) {
    if (typeof(Grouply) != "undefined") {
      Grouply.alert(str);
    } else {
      alert(str);
    }
  },

  serializeForm : function(F){
    if(typeof F=="string"){
      F=(document.getElementById(F)||document.forms[F])
    }

    var G,E,H,J,K="",M=false;
    for(var L=0; L<F.elements.length; L++){
      G=F.elements[L];
      J=F.elements[L].disabled;
      E=F.elements[L].name;
      H=F.elements[L].value;
      if(!J&&E){
        switch(G.type){
          case"radio":
          case"checkbox":
            if(G.checked){
              K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&"
            }
          break;
          case"file":
          case undefined:
          case"reset":
          case"button":
            break;
          case"submit":
            if(M==false){
              K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";
              M=true;
            }
            break;
          case"select-one":
          case"select-multiple":
          default:
            K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";
            break;
        }
      }
    }
    K=K.substr(0,K.length-1);
    return K;
  },  
  iframeloadform : function(div, formid, callback, loadScripts, noIndicator) {
    if (typeof(div) == "string") {
      div = document.getElementById(div);
    }
    if (typeof(formid) == "string") {
      formid = document.getElementById(formid);
    }
    formid.target = div.id; // shd be name, but they are the same.
    if (callback) {
      div.onload = callback;
    }
    formid.submit();
  },
  ajaxloadform : function(div, formid, callback, loadScripts, noIndicator) {
    if (typeof(div) == "string") {
      div = document.getElementById(div);
    }
    if (div.tagName.toLowerCase() == "iframe") {
      RegisterPage.iframeloadform(div, formid, callback, loadScripts, noIndicator);
    } else {
      if (typeof(formid) == "string") {
        formid = document.getElementById(formid);
      }
      var url = formid.action;
      var params = RegisterPage.serializeForm(formid);
      if (typeof(Grouply) != "undefined") {
        Grouply.ajaxload(div, url, params, callback, loadScripts, noIndicator);
      } else {
        RegisterPage.ajaxload(div, url, params, callback, loadScripts, noIndicator);
      }
    }
  },
  ajaxload : function (div, url, params, callback, loadScripts, noIndicator) {
    if (typeof(Grouply) != "undefined") {
      Grouply.ajaxload(div, url, params, callback, loadScripts, noIndicator);
    } else {
      RegisterPage.ajaxcallback = callback;
      RegisterPage.ajaxdiv = div;
      params += "&";
      if (window.XMLHttpRequest) {
        // Firefox, Opera, Safari
        ajaxRequest = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        // Internet Explorer
        ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      RegisterPage.ajaxRequest = ajaxRequest;
      ajaxRequest.open("POST", url, true);
      ajaxRequest.onreadystatechange = RegisterPage.ajaxreadystate;
      ajaxRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      ajaxRequest.send(params);
    }
  },

  ajaxreadystate : function() {
    if (RegisterPage.ajaxRequest.readyState == 4) {
      if (RegisterPage.ajaxRequest.status == 200) {
        var el = RegisterPage.ajaxdiv;
        if (typeof(el) == "string") {
          el = document.getElementById(el);
        }
        if (el) {
          el.innerHTML = RegisterPage.ajaxRequest.responseText;
        }
        if (RegisterPage.ajaxcallback) {
          RegisterPage.ajaxcallback();
        }
      }
    }
  },

  toggleSameId : function(el) {
    var el1 = document.getElementById("sameIdTable");

    if (el && el1) {
      var show = el.checked ? "none" : "block";
      el1.style.display = show;
    }
    
    var el2 = document.getElementById("provIdTable");
    if (el2) {
      el2.style.display = "block";
    }
  },

  submitRegister : function() {

    RegisterPage.readyToGo = true;
    var formObj = document.getElementById('register_form');
    var email = formObj.email.value;
    var sitebase = formObj.phpsitebase.value;
    if (email.indexOf(sitebase) != -1 || email.indexOf('grouply.com') != -1 || email.indexOf('groupful.com') != -1) {
      RegisterPage.alert("Please provide a valid, non-Grouply email address. ");
      return;
    }

    var username = formObj.username.value;
    if ( (username.indexOf('@') != -1) || (username.indexOf('%40') != -1) ) {
      RegisterPage.alert("Invalid Grouply ID. Only the following characters are allowed: A-Z, a-z, 0-9, plus(+), dash(-), dot(.), underscore(_). ");
      return;
    }

    var pusername = formObj.pusername.value;
    var ppassword = formObj.ppassword.value;
    var provider = formObj.group_prov.value;

    if (ppassword.length == 0 && pusername.length != 0) {
      RegisterPage.alert("Please enter your " + provider + " password");
      return;
    }

    if (ppassword.length != 0 && pusername.length == 0) {
      RegisterPage.alert("Please enter your "+ provider +" ID");
      return;
    }
    
    if (formObj.same_id) {
      if (ppassword.length == 0 && pusername.length == 0 && formObj.same_id.checked) {
        formObj.same_id.checked = false;
        RegisterPage.toggleSameId(formObj.same_id);
        formObj.username.focus();
        return;
      }
    }

    // Hide button, show progress bar.
    var btndiv = document.getElementById("continuebuttondiv");
    var pbardiv = document.getElementById("progressbardiv");

    if (btndiv && pbardiv) {
      btndiv.style.display = "none";
      pbardiv.style.display = "block";
      //Grouply.reRenderComponent("progress_bar");
      //var pb = Grouply.get("progress_bar");
      //pb.wait();
    }
    // submit to register_confirm.php
    RegisterPage.ajaxloadform('register_msg', formObj,
                      RegisterPage.completeRegistration,
                      false, true);

  },

  completeRegistration : function() {
    var register_failed_comp = document.getElementById('register_failed_msg');
    var register_error_comp = document.getElementById('register_error_msg');
    var register_succeed_comp = document.getElementById('register_succeed_msg');

    // if register fails, either perl script fails or perl returned some error message
    if ((register_failed_comp != null) || (register_error_comp != null) || (register_succeed_comp == null)) {
      if (register_failed_comp != null) {
        document.getElementById('registration_content').style.display = 'none';
      }

      if (register_succeed_comp == null && register_failed_comp == null && register_error_comp == null) {
        document.getElementById('registration_content').style.display = 'none';
        document.getElementById('register_msg').innerHTML = "<span id='register_failed_msg' style='color: red; font: bold 12px arial;'>"
          + "Registration failed. Please contact us at <a class='linkBlue12norm' href='mailto:support@grouply.com'>"
          + "support@grouply.com</a>.</span>";
      }

      document.getElementById('register_msg').style.display = 'block';

      // Hide progress bar, show button.
      var btndiv = document.getElementById("continuebuttondiv");
      var pbardiv = document.getElementById("progressbardiv");

      if (btndiv && pbardiv) {
        btndiv.style.display = "block";
        pbardiv.style.display = "none";
      }

      // If the user didn't fill in yahoo name & passwd, open up step 3 for them.
      var formObj = document.getElementById('register_form');
      var pusername = formObj.pusername.value;
      var ppassword = formObj.ppassword.value;

      if (pusername.length == 0 && ppassword.length == 0 && formObj.same_id) {
        formObj.same_id.checked = false;
        RegisterPage.toggleSameId(formObj.same_id);
      }
    } else {
      var username;
      var password;
      var r;
      var vt;
      var formObj = document.getElementById('register_form');
      if (formObj.same_id && formObj.same_id.checked) {
        username = formObj.pusername.value;
        password = formObj.ppassword.value;
      } else {
        username = formObj.username.value;
        password = formObj.password.value;
      }
      r = formObj.r.value;
      vt = formObj.vt_id.value;
      
      var lformObj = document.getElementById('login_form');
      lformObj.username.value = username;
      lformObj.password.value = password;
      lformObj.r.value = r;
      lformObj.vt.value = vt;
      
      RegisterPage.readyToGo = true;

      lformObj.submit();
    }
  },

  // remove the '@yahoo.com' part if there is any
  getUserNameWithoutEmail : function (username) {
    var indexEmail = username.indexOf('%40');
    if (indexEmail != -1) {
      username = username.substring(0, indexEmail);
    }
    return username;
  },

  hintel : null,
  focusel : null,
  blurel : null,

  focus : function(el) {
    RegisterPage.focusel = el;
    if (typeof(Ext) != "undefined") {
      Ext.get(el).addClass('focused');
    }
    hintel = document.getElementById("hint_" + el.name);
    if (hintel) {
      if (RegisterPage.hintel) {
        RegisterPage.hintel.style.visibility = "hidden";
      }
      RegisterPage.hintel = hintel;
      hintel.style.visibility = "visible";
    }
  },
  blur : function(el) {
    RegisterPage.blurel = el;
    if (typeof(Ext) != "undefined") {
      Ext.get(el).removeClass('focused');
    }
  },

  loaded : function() {
    document.getElementById("firstname").focus();
    RegisterPage.changeProvider(document.getElementById("group_prov"));
    RegisterPage.toggleSameId(document.getElementById("same_id"));
  },

  changeProvider : function (prov_el) {
    if (prov_el) {
      var els = RegisterPage.getSpans("provider");
      var val = prov_el.value;
      if (val == "Grouply") {
        return;
      }

      for (var i = 0; i < els.length; i++) {
        els[i].innerHTML = val;
      }

      var nval = val == "Yahoo" ? "Google" : "Yahoo";
      els = RegisterPage.getSpans("not_provider");
      for (var i = 0; i < els.length; i++) {
        els[i].innerHTML = nval;
      }
    }
  },

  getSpans : function (name) {
    // getElementsByName does not work on IE!
    var els = document.getElementsByName(name);
    if (els.length) {
      return els;
    }
    els = document.getElementsByTagName("span");
    var a = [];
    for (var i = 0; i < els.length; i++) {
      if (els[i].name == name) {
        a.push(els[i]);
      }
    }
    return a;
  },
  
  exitquestchange : function() {
    var el = document.getElementById("exitquestform");
    var el2 = document.getElementById("exitquestcomments");
    if (el && el2) {
      var vv = -1;
      for (var i = 0; i < el.elements.length && vv == -1; i++) {
        if (el.elements[i].name == "reason_nc" && el.elements[i].checked) {
          vv = el.elements[i].value;
        }
      }        
      el2.style.display = vv == "0" ? "inline" : "none";
    }
  },
  
  savequest : function() {
    RegisterPage.ajaxloadform('exitquest', "exitquestform",
                      RegisterPage.savequestdone,
                      false, true);
  },
  
  savequestdone : function() {
    var el = document.getElementById("exitquest_reason");
    if (el) {
      switch(+el.value) {
        case 4: RegisterPage.navigate("login"); break;
        case 5: RegisterPage.navigate("http://blog.grouply.com/tour"); break;
      }
    }
  },
  
  registerNoPassword : function() {
    RegisterPage.ajaxloadform('exitquest', "exitquestform",
                      RegisterPage.registerNoPasswordDone,
                      false, true);
  },
  
  registerNoPasswordDone : function() {
    document.getElementById("exitquest").style.display = "none";
    document.getElementById("registration_content").style.display = "block";
    document.getElementById("page_body_right").style.visibility = "visible";
      document.getElementById("register_headline").style.visibility = "visible";
    var formObj = document.getElementById('register_form');
    formObj.pusername.value = "";
    formObj.ppassword.value = "";
    if (formObj.same_id) {
      formObj.same_id.checked = false;
      RegisterPage.toggleSameId(formObj.same_id);
      var el2 = document.getElementById("provIdTable");
      if (el2) {
        el2.style.display = "none";
      }
    }
    formObj.username.focus();
  },
  
  unloaded : function() {
    if (!RegisterPage.readyToGo) {
      var w = window.open("exitquest.php", "exitquest", "menubar=0,toolbar=0,location=0,directories=0,scrollbars=0,resizable=0,width=500,height=400");
      if (w && w.moveTo) {
        w.moveTo(100,100);
      }
    }
  },
  
  beforeunloaded : function() {
    if (!RegisterPage.readyToGo) {
      RegisterPage.readyToGo = true;
      document.getElementById("exitquest").style.display = "block";
      document.getElementById("registration_content").style.display = "none";
      document.getElementById("page_body_right").style.visibility = "hidden";
      document.getElementById("register_headline").style.visibility = "hidden";
      document.getElementById("exitquestbutton").focus();
      return 'PLEASE press "Cancel" to leave us some feedback.';
    }
  },
  
  navigate : function(url) {
    RegisterPage.readyToGo = true;
    document.location.href = url;
  }


};

window.onload = RegisterPage.loaded;
window.onbeforeunload = RegisterPage.beforeunloaded;
