/**
 * fresh functions
 */

/**
 * JSON to store how we check various page elements.
 */
var inputFields = {

  // form on registering a web user, step one
  "reg_one" : {

    "email" : {

      "type" : "email",
      "description" : "Email Address",
      "confirm" : true,
      "empty" : false

    }

  },

  // form on registering a web user, step one
  "reg_three" : {

    "password" : {

      "type" : "password",
      "description" : "Password",
      "confirm" : true,
      "empty" : false

    }

  },

  // form on play.php for registering a web user
  "webreg" : {

    "mobilename" : {

      "type" : "text",
      "description" : "WPTMobile Nickname",
      "confirm" : false,
      "empty" : false

    },

    "email" : {

      "type" : "email",
      "description" : "Email Address",
      "confirm" : true,
      "empty" : false

    },

    "password" : {

      "type" : "password",
      "description" : "Password",
      "confirm" : true,
      "empty" : false

    }

  },

  // the refer a friend form on the pop up page
  "referafriend" : {

    "yourname" : {

      "type" : "text",
      "description" : "Your Name",
      "confirm" : false,
      "empty" : false

    },

    "friendname" : {

      "type" : "text",
      "description" : "Friend's Name",
      "confirm" : false,
      "empty" : false

    },

    "friendemail" : {

      "type" : "email",
      "description" : "Friend's Email",
      "confirm" : false,
      "empty" : false

    }

  }

};

/**
 * Check input fields.
 */
function checkInput(prefix,form) {

  var errorMsg = "";
  var returnValue = true;

  for (var x in inputFields[form]) {

    var thisElement = document.getElementById(prefix + "_" + x);

    // check to see if we have a confirm field
    if (inputFields[form][x].confirm) {

      var thisElementConfirm = document.getElementById(prefix + "_confirm_" + x);

      if (thisElement.value != thisElementConfirm.value) {

        errorMsg = errorMsg + "The values entered for " + inputFields[form][x].description + " do not match.\n";

        returnValue = false;

      }

    }

    // check to make sure it's not empty
    if (!inputFields[form][x].empty && thisElement.value == "") {

      errorMsg = errorMsg + "You must enter a value for " + inputFields[form][x].description + "\n";

      returnValue = false;

    } else {

      // do any special processing
      switch (inputFields[form][x].type) {

        case "email":

          if (!validEmail(thisElement.value)) {

            returnValue = false;

          }

          break;

        case "password":

          if (thisElement.value.length < 6) {

            errorMsg = errorMsg + "Your password must be at least 6 characters long.\n";

            returnValue = false;

          }

          break;

        default:

          break;

      }

    }

  }

  // display any errors that we've accumulated
  if (errorMsg != "") {

    alert(errorMsg);

  }

  return returnValue;

}

/**
 * Hover over a screenshot, switching it.
 */
function hoverScreenshot(game,number) {

  var js_ssPreview = document.getElementById("screenshot_preview");
  js_ssPreview.src = "graphics/screenshots/" + game + "_ss" + number + ".jpg";

}

/**
 * Switch between featured content on a game page.
 */
function switchFeatured(target) {

  var ov_value = (target == "overview" ? "block" : "none");
  var ss_value = (target == "screenshots" ? "block" : "none");
  var vi_value = (target == "videos" ? "block" : "none");
  var by_value = (target == "buy" ? "block" : "none");
  var pv_value = (target == "buy" || target == "reviews" || target == "videos" ? "none" : "block");
  var rv_value = (target == "reviews" ? "block" : "none");

  var gc = document.getElementById("gamecontent");

  if (target == "reviews") {

    gc.style.height = "1320px";

  } else if (target == "videos") {

    gc.style.height = "800px";

  } else {

    gc.style.height = "500px";

  }

  document.getElementById("game_features").style.display = ov_value;
  document.getElementById("game_screenshots").style.display = ss_value;
  document.getElementById("game_videos").style.display = vi_value;
  document.getElementById("game_buy").style.display = by_value;
  document.getElementById("game_reviews").style.display = rv_value;

  document.getElementById("screenshot_preview_container").style.display = pv_value;
  document.getElementById("screenshot_preview").style.display = pv_value;

}

/**
 * Check to see if an email address is valid (stolen code).
 */
function validEmail(eAddr) {

  var result = false;
  var ndxAt = ndxDot =  0;

  var ndxAt = eAddr.indexOf("@");
  var ndxDot = eAddr.indexOf(".");
  var ndxDot2 = eAddr.lastIndexOf(".");

  if ((ndxDot < 0) || (ndxAt < 0)) {

    alert("Your email address lacks a '.' or '@'.\n\nThe valid format is 'you@domain.suffix.'");

  } else if ( (ndxDot2 - 3) <= ndxAt) {

    alert("You may be missing your domain name.\n\nThe format is 'you@dom.suf'");

  } else {

    result = true;

  }

  return result;

}

/**
 * Do the newsletter signup.
 */
function doEmailSignup() {

  var js_carrier = document.getElementById("register[carrier]");
  var js_mobileNumber = document.getElementById("register[number]");
  var js_email = document.getElementById("register[email]");

  // require valid 10-digit number; remove dashes
  var phoneNumber = js_mobileNumber.value.replace(/-/g,"").match(/[0-9]{10,10}/);

  if (!document.getElementById("ageCheck").checked) {

    alert("You must be over the age of 13 to sign up for updates.");

  } else if (phoneNumber == null) {

    alert("Please enter a valid 10-digit phone number.");

  } else if (js_carrier.value == 0) {

    alert("Please select a carrier.");

  } else {

    if (validEmail(js_email.value)) {

      submitEmail(js_email.value,js_carrier.value,js_mobileNumber.value);

    }

  }

}

/**
 * Do the Refer a Friend.
 */
function doReferFriend() {

  if (checkInput("refer","referafriend")) {

    var js_username = document.getElementById("refer_username");
    var js_yourname = document.getElementById("refer_yourname");
    var js_friendname = document.getElementById("refer_friendname");
    var js_friendemail = document.getElementById("refer_friendemail");

    submitFriend((js_username ? js_username.value : ""),js_yourname.value,js_friendname.value,js_friendemail.value);

  }

}

/**
 * The AJAX object.
 */
var http_request = false;


/**
 * Create the global AJAX object if necessary.
 */
function newAjaxCall() {

  http_request = false;

  if (window.XMLHttpRequest) {
    http_request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
  }

}

/**
 * Make an AJAX call to do a newsletter signup.
 */
function submitEmail(email,carrier,number) {

  newAjaxCall();
  http_request.onreadystatechange = handleSignupResponse;
  http_request.open("GET", "signup.php?action=newsignup&email=" + email + "&carrierid=" + carrier + "&number=" + number, true);
  http_request.send(null);

}

/**
 * Handle the newsletter signup AJAX response.
 */
function handleSignupResponse() {

  // only do something if the request is complete
  if (http_request.readyState == 4) {

    // check for HTTP status code 200
    if (http_request.status == 200) {

      if (http_request.responseText == "error") {

        alert("Error: Could not complete request.");

      } else {


        var js_registerForm = document.getElementById("registerForm");
        var js_registerComplete = document.getElementById("registerComplete");

        // display the confirmation message
        js_registerForm.style.display = "none";
        js_registerComplete.style.display = "block";

      }

    }

  }

}

/**
 * Make an AJAX call to do a refer a friend.
 */
function submitFriend(username,name,friendname,friendemail) {

  // make sure we urlencode things
  var url = "signup.php?action=referafriend&username=" + escape(username) + "&name=" + escape(name) + "&friendname=" + escape(friendname) + "&friendemail=" + escape(friendemail);

  newAjaxCall();
  http_request.onreadystatechange = handleFriendResponse;
  http_request.open("GET", url, true);
  http_request.send(null);

}

/**
 * Handle the Refer a Friend AJAX response.
 */
function handleFriendResponse() {

  // only do something if the request is complete
  if (http_request.readyState == 4) {

    // check for HTTP status code 200
    if (http_request.status == 200) {

      if (http_request.responseText == "error") {

        alert("Error: Could not complete request.");

      } else {

        var js_registerForm = document.getElementById("refer_form");
        var js_registerComplete = document.getElementById("refer_response");

        // display the confirmation message
        js_registerForm.style.display = "none";
        js_registerComplete.style.display = "block";

      }

    }

  }

}

/**
 * Switch between leaderboard pages.
 */
function switchLeaderboard(page) {

  for (var i = 1; i <= 3; i++) {

    document.getElementById("leaderboard_" + i).style.display = (i == page ? "" : "none");

  }

}

/**
 * Opens a centered window.
 */
function centeredWindow(url,name,width,height,scrollbars,resizeable) {

  var xPos = (screen.availWidth / 2) - (width / 2);
  var yPos = (screen.availHeight / 2) - (height / 2);

  var options = "width=" + width + ",height=" + height + ",resizeable=" + resizeable +",scrollbars=" + scrollbars + ",left=" + xPos + ",top=" + yPos;

  window.open(url,name,options);

}

/**
 * Open the Refer-a-Friend.
 */
function openFriendWindow() {

  centeredWindow("friend.php","friendWindow",400,300,0,0);

}

/**
 * Reset the Refer-a-Friend window to allow another referral.
 */
function resetFriendWindow() {

  // empty out the friend's name and email
  document.getElementById("refer_friendname").value = "";
  document.getElementById("refer_friendemail").value = "";

  // switch the display
  document.getElementById("refer_response").style.display = "none";
  document.getElementById("refer_form").style.display = "block";

}

/**
 * Open the Privacy Policy.
 */
function openPrivacyWindow() {

  centeredWindow("legal.php?action=privacy","legalWindow",600,400,1,1);

}

/**
 * Open the Terms of Use.
 */
function openTermsWindow() {

  centeredWindow("legal.php?action=legal","legalWindow",600,400,1,1);

}

