
/*

	Copyright (c) 2010, Ascad Networks. All Rights Reserved.
	For use with ppSD2 only.
	http://www.ppsd2.com/
	http://www.ascadnetworks.com/

*/


var scriptLocation = "/ppSD2";


// ----------------------------------------------------------------
//   Create the ajax object

function createAjaxObject() { 
    //Code for Mozilla 
    if (window.XMLHttpRequest) { 
        return new XMLHttpRequest() 
    } 
    //Code for IE 
        else if (window.ActiveXObject) { 
        return new ActiveXObject("Microsoft.XMLHTTP") 
    } 
    else { 
        alert("Your browser does not support XMLHTTP.") 
    } 
} 

ajaxObj = createAjaxObject();



// ----------------------------------------------------------------
//   Make an ajax call

function ppSD2AjaxCall(action,value,showErrors) { 
  // Display the loadaing div
  document.getElementById("ppsd2_loading").style.display = "block";
  // String
  if (value) {
    SL = scriptLocation + "/functions/ajaxCalls.php?ajaxAction=" + action + "&value=" + value;
  } else {
    str = compileString();
    SL = scriptLocation + "/functions/ajaxCalls.php?ajaxAction=" + action + "&query=" + value + "&" + str;
  }
  // Send the request
  if (showErrors == "1") {
    ajaxObj.onreadystatechange = handleAjaxResponse;
  } else {
    ajaxObj.onreadystatechange = handleAjaxResponseNoErrors;
  }
  // Send the request
  // alert(SL);
  ajaxObj.open("get",SL,true)
  ajaxObj.send(null)
}


// ----------------------------------------------------------------
//   Handle the ajax response: no error displays

function handleAjaxResponseNoErrors() { 
    if (ajaxObj.readyState == 4) {
          document.getElementById('ppsd2_error').style.display = "none";
          // Cut up reply
          var returnedArray = ajaxObj.responseText.split("||");
          // Clear the loading div
          document.getElementById("ppsd2_loading").style.display = "none";
          // alert(ajaxObj.responseText);
          // Success
	  if (returnedArray['0'] == "1") {
        	    
        	    // ----- ----- ----- ----- ----- -----
        	    // Username available?
        	    if (returnedArray['1'] == "check_username") {
        	      if (returnedArray['2'] == "1") {
        	        document.getElementById('username_check').className = "reg_page_notice_error";
        	      } else {
        	        document.getElementById('username_check').className = "reg_page_notice";
        	      }
        	      document.getElementById('username_check').innerHTML = returnedArray['3'];
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Password Strength
        	    else if (returnedArray['1'] == "check_password") {
        	      if (returnedArray['2'] == "1") {
        	        document.getElementById('password_check').className = "reg_page_notice_error";
        	      } else {
        	        document.getElementById('password_check').className = "reg_page_notice";
        	      }
        	      document.getElementById('password_check').innerHTML = returnedArray['3'];
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Password Strength
        	    else if (returnedArray['1'] == "match_passwords") {
        	      if (returnedArray['2'] == "1") {
        	        document.getElementById('repeat_pwd_check').className = "reg_page_notice_error";
        	      } else {
        	        document.getElementById('repeat_pwd_check').className = "reg_page_notice";
        	      }
        	      document.getElementById('repeat_pwd_check').innerHTML = returnedArray['3'];
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code apply
        	    else if (returnedArray['1'] == "savings_code_add") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['5'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['4'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "<b>" + returnedArray['2'] + "</b>: " + returnedArray['3'] + " (<a href=\"#\" onClick=\"ppSD2AjaxCall('remove_code','');\">Remove</a>)";
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code delete
        	    else if (returnedArray['1'] == "savings_code_del") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['3'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['2'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "";
        	    }
	    
	  }
    }
}


// ----------------------------------------------------------------
//   Handle the ajax response: with error display

function handleAjaxResponse() { 
    //a jax is uninitialized 0
    // ajax is loading 1
    // ajax is loaded 2
    // ajax is interactive 3
    if (ajaxObj.readyState == 0) { } 
    else if (ajaxObj.readyState == 1) { }
    else if (ajaxObj.readyState == 2) { }
    else if (ajaxObj.readyState == 3) { } 
    else if (ajaxObj.readyState == 4) {
          // Cut up reply
          var returnedArray = ajaxObj.responseText.split("||");
          // Clear the loading div
          document.getElementById("ppsd2_loading").style.display = "none";
          // alert(ajaxObj.responseText);
          // Success
	  if (returnedArray['0'] == "1") {
        	    
	    document.getElementById('ppsd2_error').style.display = "none";
	    
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code apply
        	    if (returnedArray['1'] == "savings_code_add") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['5'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['4'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "<b>" + returnedArray['2'] + "</b>: " + returnedArray['3'] + " (<a href=\"#\" onClick=\"ppSD2AjaxCall('remove_code','');\">Remove</a>)";
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code delete
        	    else if (returnedArray['1'] == "savings_code_del") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['3'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['2'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "";
        	    }
	    
	  }
	  // Error
	  else {
	    document.getElementById('ppsd2_error_content').innerHTML = returnedArray['1'];
	    document.getElementById('ppsd2_error').style.display = "block";
	  }
    } 
}



// ----------------------------------------------------------------
//   Check password stength

function checkPassword(pwd) { 
	var strength = document.getElementById('password_check');
	var strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g");
	var mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g");
	var enoughRegex = new RegExp("(?=.{6,}).*", "g");
	if (pwd.length==0) {
		strength.innerHTML = 'Input a password';
		document.getElementById('password_check').className = "reg_page_notice_error";
	} else if (false == enoughRegex.test(pwd)) {
		strength.innerHTML = 'Recommendation: Add more characters';
		document.getElementById('password_check').className = "reg_page_notice_error";
	} else if (strongRegex.test(pwd)) {
		strength.innerHTML = 'Strong Password';
		document.getElementById('password_check').className = "reg_page_notice";
	} else if (mediumRegex.test(pwd)) {
		strength.innerHTML = 'Medium Strength (Tip: Add symbols, numbers, lower and upper case letters.)';
		document.getElementById('password_check').className = "reg_page_notice";
	} else { 
		strength.innerHTML = 'Weak Password (Tip: Add more characters.)';
		document.getElementById('password_check').className = "reg_page_notice_error";
	}
}


// ----------------------------------------------------------------
//	Check password match

function checkPasswordMatch() {
	pass = document.getElementById('ppsd2_password').value;
	pass1 = document.getElementById('ppsd2_repeat_pwd').value;
	if (pass != pass1) {
		document.getElementById('repeat_pwd_check').innerHTML = 'Passwords do not match.';
		document.getElementById('repeat_pwd_check').className = "reg_page_notice_error";
	} else {
		document.getElementById('repeat_pwd_check').innerHTML = 'Passwords match.';
		document.getElementById('repeat_pwd_check').className = "reg_page_notice";
	}
}



// ----------------------------------------------------------------
//   Handle the ajax response: with error display

function handleAjaxResponse() { 
    //a jax is uninitialized 0
    // ajax is loading 1
    // ajax is loaded 2
    // ajax is interactive 3
    if (ajaxObj.readyState == 0) { } 
    else if (ajaxObj.readyState == 1) { }
    else if (ajaxObj.readyState == 2) { }
    else if (ajaxObj.readyState == 3) { } 
    else if (ajaxObj.readyState == 4) {
          // Cut up reply
          var returnedArray = ajaxObj.responseText.split("||");
          // Clear the loading div
          document.getElementById("ppsd2_loading").style.display = "none";
          // alert(ajaxObj.responseText);
          // Success
	  if (returnedArray['0'] == "1") {
        	    
	    document.getElementById('ppsd2_error').style.display = "none";
	    
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code apply
        	    if (returnedArray['1'] == "savings_code_add") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['5'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['4'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "<b>" + returnedArray['2'] + "</b>: " + returnedArray['3'] + " (<a href=\"#\" onClick=\"ppSD2AjaxCall('remove_code','');\">Remove</a>)";
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Savings code delete
        	    else if (returnedArray['1'] == "savings_code_del") {
        	      document.getElementById('ppsd2_total').innerHTML = returnedArray['3'];
        	      document.getElementById('ppsd2_savings').innerHTML = returnedArray['2'];
        	      document.getElementById('ppsd2_cart_code').innerHTML = "";
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Username available?
        	    else if (returnedArray['1'] == "check_username") {
        	      document.getElementById('username_check').innerHTML = returnedArray['2'];
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Password Strength
        	    else if (returnedArray['1'] == "check_password") {
        	      document.getElementById('password_check').innerHTML = returnedArray['2'];
        	    }
        	    // ----- ----- ----- ----- ----- -----
        	    // Password Strength
        	    else if (returnedArray['1'] == "match_passwords") {
        	      document.getElementById('repeat_pwd_check').innerHTML = returnedArray['2'];
        	    }
	    
	  }
	  // Error
	  else {
	    document.getElementById('ppsd2_error_content').innerHTML = returnedArray['1'];
	    document.getElementById('ppsd2_error').style.display = "block";
	  }
    } 
}


// ----------------------------------------------------------------
//   Close div

function closeDiv(div) {
  document.getElementById(div).style.display = "none";
  return false;
}


// ----------------------------------------------------------------
//   Compile the string

function compileString() {
  var form = document.getElementById("ppSDForm");
  var str = "";
  var element, i = 0;
  while ((element = form.elements[i++]) != null) {
      var qc = toQueryComponent(element);
      if (qc != "") str += "&" + qc;
  }
  var finalString = str.substring(1);
  return finalString;
}


// ----------------------------------------------------------------
//   Find an element's position

function findPos(element) {
  obj = document.getElementById(element);
  var curleft = curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    }
    while (obj = obj.offsetParent);
    return [curleft,curtop];
  }
}



// ----------------------------------------------------------------
//   Transform form components into a query

function toQueryComponent(input) {
    if (!input.name || input.disabled)
        return "";

    var n = urlencode(input.name);

    switch (input.type) {
    case "text":
    case "password":
    case "submit":
    case "hidden":
        return n + "=" + urlencode(input.value);
    case "textarea":
        // normalize line breaks as CR LF pairs as per RFC 1866
        var v = input.value.replace(/(\r\n)|\r|\n/g, "\r\n");
        return n + "=" + urlencode(v);
    case "checkbox":
    case "radio":
        if (!input.checked)
            return "";
        var v = getRealValue(input);
        if (v === null) v = "1";
        // if (v === null) v = "Y"; <-- Doesn't work in IE
        return n + "=" + urlencode(v);
    case "select-one":
    case "select-multiple":
        var nvp = [];
        var opt, i = 0;
        while ((opt = input.options[i++]) != null) {
            if (opt.selected) {
                var v = getRealValue(opt);
                if (v === null) v = opt.text;
                // older versions of IE do not support Array.push
                nvp[nvp.length] = n + "=" + urlencode(v);
            }
        }
        return nvp.join("&");
    default:
        // input types reset, button, image, and file not implemented
        return "";
    }
}

function urlencode(str) {
    var v;
    try { v = encodeURIComponent(str); } catch (e) { v = escape(str); }
    return v.replace(/%20/g,"+");
}

function getRealValue(input) {
    var attr = input.getAttributeNode("value");
    return (attr && attr.specified) ? input.getAttribute("value") : null;
}
