var MAXIMUM_WAITING_TIME = 10000; // milliseconds

function createXMLHttpRequest() {
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
	try { return new XMLHttpRequest(); } catch(e) {}
	alert("XMLHttpRequest not supported");
	return null;
}

function deleteComment(commentid){
	document.getElementById(commentid).parentNode.removeChild(document.getElementById(commentid));

    var http = createXMLHttpRequest();
  	http.open("GET", "deletecomment.php?commentid=" + escape(commentid) + "&dummy=" + (new Date()).getTime(), true);
    var requestTimer = setTimeout(
    						function() {
    							http.abort();
    							// inform user?
    						}, 	
    						MAXIMUM_WAITING_TIME);      
    http.onreadystatechange = function() {	
        if (http.readyState != 4) { return; }
    	clearTimeout(requestTimer);
	    if (http.status != 200) { 
	    	return;
	    }	
    
		if (!http.responseText.match("FAILURE") && http.responseText != ""){	
			
		}
		else {
			alert("Could not delete comment: " + http.responseText);	
		}	
	};
    http.send(null);
}

function checkSignUp(myform){
	if (myform.firstname.value.length == 0) {
		document.getElementById('signuperror').innerHTML = "Please add first name.<br>";
		document.getElementById('signuperror').style.display = "block";
		return false;
	}
	if (myform.lastname.value.length == 0) {
		document.getElementById('signuperror').innerHTML = "Please add last name.<br>";
		document.getElementById('signuperror').style.display = "block";
		return false;
	}
	if (myform.email.value.length == 0) {
		document.getElementById('signuperror').innerHTML = "Please add e-mail.<br>";
		document.getElementById('signuperror').style.display = "block";
		return false;
	}
	var numberCheck = true;
	new Ajax.Request('/AJAX_checknumber.php',
	  {
	  	parameters: $('number').serialize(true),
	    asynchronous:false,
	    onSuccess: function(transport){
	      var response = transport.responseText || "no response text";
	      //alert("Success! \n\n" + response);
	      if (response == "SUCCESS") {
	      	numberCheck = false;
	      	//alert(numberCheck);
	      }
	      //alert(numberCheck);
	    },
	    onFailure: function(){ alert('Something went wrong...') }
	  });
	//alert(numberCheck);
	
	if (numberCheck) {
		document.getElementById('signuperror').innerHTML = "Please Insert the Correct Number";
		document.getElementById('signuperror').style.display = "block";
		return false;
	}
	
	return true;
}


function sendComment(myform){
	
	// validate form items
	if (myform.commenterfirstname.value.length == 0) {
		document.getElementById('commenterror').innerHTML = "Please add first name.<br>";
		document.getElementById('commenterror').style.display = "block";
		return false;
	}
	
	if (myform.commenterlastname.value.length == 0) {
		document.getElementById('commenterror').innerHTML = "Please add last name.<br>";
		document.getElementById('commenterror').style.display = "block";
		return false;
	}
	
	if (myform.email.value.length == 0) {
		document.getElementById('commenterror').innerHTML = "Please add e-mail.<br>";
		document.getElementById('commenterror').style.display = "block";
		return false;
	}
	
	if (myform.comment.value.length == 0) {
		document.getElementById('commenterror').innerHTML = "Please add comment.<br>";
		document.getElementById('commenterror').style.display = "block";
		return false;
	}
	
	// do something to indicate sent
	//document.getElementById(commentid).parentNode.removeChild(document.getElementById(commentid));
	//var message = document.getElementById('response' + commentid).value;
	document.getElementById('sendarea').innerHTML = "<p><i>your response:</i><br> " + myform.comment.value + "</p>";
	
	new Ajax.Request('/AJAX_addcomment.php', {
		method: 'post',
  		parameters: $('sendcommentform').serialize(true),
  		onSuccess: function(transport, json){
      		//alert(json ? Object.inspect(json) : "no JSON object");	
    	}
  	});
	return false;
}

function sendEmail(myform){
	
	// validate form items
	if (myform.recipients.value.length == 0) {
		document.getElementById('emailerror').innerHTML = "Please add e-mail.<br>";
		document.getElementById('emailerror').style.display = "block";
		return false;
	}
	
	// do something to indicate sent
	//document.getElementById(commentid).parentNode.removeChild(document.getElementById(commentid));
	//var message = document.getElementById('response' + commentid).value;
	document.getElementById('emailsendarea').innerHTML = "<p><i>Sent E-mail</i></p>";
	
	new Ajax.Request('AJAX_sendemailfriends.php', {
		method: 'post',
  		parameters: $('sendemail').serialize(true),
  		onSuccess: function(transport, json){
      		//alert(json ? Object.inspect(json) : "no JSON object");	
    	}
  	});
	return false;
}


function validateEdit(myform){
	document.getElementById('editaccounterror').style.display = "none";
	var status = true;
	var error = "";
	
	if (myform.firstname.value.length == 0) {
		status = false;
		error = error + "Please add your first name.<br>";
	}

	if (myform.lastname.value.length == 0) {
		status = false;
		error = error + "Please add your first name.<br>";
	}
	
	if (myform.storename.value.length == 0) {
		status = false;
		error = error + "Please add store name.<br>";
	}

	if (myform.email.value.length == 0) {
		status = false;
		error = error + "Please add e-mail.<br>";
	}

	if (myform.phone.value.length == 0) {
		status = false;
		error = error + "Please add Phone #.<br>";
	}
		
	if (myform.address.value.length == 0) {
		status = false;
		error = error + "Please add address.<br>";
	}

	if (myform.city.value.length == 0) {
		status = false;
		error = error + "Please add city.<br>";
	}
	if (myform.state.value.length == 0) {
		status = false;
		error = error + "Please add state.<br>";
	}

	if (myform.zip.value.length == 0) {
		status = false;
		error = error + "Please add zip.<br>";
	}

	if (status == false) {
		document.getElementById('editaccounterror').style.display = "block";
		document.getElementById('editaccounterror').innerHTML = error;
	}
	return status;
}

function validatePassword(myform){
	document.getElementById('validatepassworderror').style.display = "none";
	var status = true;
	var error = "";
	
	if (myform.password1.value.length == 0) {
		status = false;
		error = error + "Please add a password.<br>";
	}

	if (myform.password2.value.length == 0) {
		status = false;
		error = error + "Please add a confirmation password.<br>";
	}
	
	if (myform.password2.value != myform.password1.value) {
		status = false;
		error = error + "Passwords do not match.<br>";
	}


	if (status == false) {
		document.getElementById('validatepassworderror').style.display = "block";
		document.getElementById('validatepassworderror').innerHTML = error;
	}
	return status;
}

function validateEditBilling(myform){
	document.getElementById('editbillingerror').style.display = "none";
	var status = true;
	var error = "";
	
	// remove spaces and dashes in credit card
	myform.ccnumber.value = myform.ccnumber.value.replace(/ /g,"")
	myform.ccnumber.value = myform.ccnumber.value.replace(/-/g,"")
	
	if (!isValidCreditCard(myform.ccnumber.value, myform.cctype.value)){
		status = false;
		error = error + "Credit card # invalid.<br>";
	}
	
	if (myform.ccnumber.value.length == 0) {
		status = false;
		error = error + "Please add Credit Card #.<br>";
	}


	if (myform.ccexpiration.value.length == 0) {
		status = false;
		error = error + "Please add Credit Card Expiration.<br>";
	}

	if (myform.ccfirstname.value.length == 0) {
		status = false;
		error = error + "Please add First Name.<br>";
	}

	if (myform.cclastname.value.length == 0) {
		status = false;
		error = error + "Please add Last Name.<br>";
	}
		
	if (myform.ccaddress.value.length == 0) {
		status = false;
		error = error + "Please add address.<br>";
	}
	if (myform.cccity.value.length == 0) {
		status = false;
		error = error + "Please add city.<br>";
	}
	if (myform.ccstate.value.length == 0) {
		status = false;
		error = error + "Please add state.<br>";
	}	
	if (myform.cczip.value.length == 0) {
		status = false;
		error = error + "Please add address.<br>";
	}	
	if (status == false) {
		document.getElementById('editbillingerror').style.display = "block";
		document.getElementById('editbillingerror').innerHTML = error;
	}
	return status;
}
function validateSignUpUser(myform){
	document.getElementById('signupusererror').style.display = "none";
	var status = true;
	var error = "";
	
	if (myform.title.value.length == 0) {
		status = false;
		error = error + "Please add title.<br>";
	}

	if (myform.firstname.value.length == 0) {
		status = false;
		error = error + "Please add fist name.<br>";
	}
	if (myform.lastname.value.length == 0) {
		status = false;
		error = error + "Please add last name.<br>";
	}
	if (myform.email.value.length == 0) {
		status = false;
		error = error + "Please add e-mail.<br>";
	}

	if (myform.phone.value.length == 0) {
		status = false;
		error = error + "Please add Phone #.<br>";
	}
		
	if (myform.street.value.length == 0) {
		status = false;
		error = error + "Please add street.<br>";
	}
	
	if (myform.city.value.length == 0) {
		status = false;
		error = error + "Please add city.<br>";
	}		
	
	if (myform.zip.value.length == 0) {
		status = false;
		error = error + "Please add zip.<br>";
	}
	
	if (myform.username.value.length == 0) {
		status = false;
		error = error + "Please add username.<br>";
	}
	
	if (myform.password.value.length == 0) {
		status = false;
		error = error + "Please add password.<br>";
	}
	if (myform.password2.value.length == 0) {
		status = false;
		error = error + "Please add verify password.<br>";
	}
	if (myform.password.value != myform.password2.value) {
		status = false;
		error = error + "Passwords do not match.<br>";
	}
	if (status == false) {
		document.getElementById('signupusererror').style.display = "block";
		document.getElementById('signupusererror').innerHTML = error;
	}
	return status;
}

function validateSignUpBilling(myform){
	document.getElementById('signupbillingerror').style.display = "none";
	var status = true;
	var error = "";
	
	// remove spaces and dashes in credit card
	myform.ccnumber.value = myform.ccnumber.value.replace(/ /g,"")
	myform.ccnumber.value = myform.ccnumber.value.replace(/-/g,"")
	

	
	//alert(myform.ccnumber.value);
	if (myform.ccnumber.value.length > 0) {
		// if they entered it - check if it's valid.
		if (!isValidCreditCard(myform.ccnumber.value, myform.cctype.value)){
			status = false;
			error = error + "Credit card # invalid.<br>";
		}
		/*
		// if they entered it - check expiration.
		if (myform.ccexpiration.value.length == 0) {
			status = false;
			error = error + "Please add Credit Card Expiration.<br>";
		}
		*/
	}



	if (myform.ccfirstname.value.length == 0) {
		status = false;
		error = error + "Please add First Name.<br>";
	}

	if (myform.cclastname.value.length == 0) {
		status = false;
		error = error + "Please add Last Name.<br>";
	}	
	if (myform.ccstreet.value.length == 0) {
		status = false;
		error = error + "Please add street.<br>";
	}
	
	if (myform.cccity.value.length == 0) {
		status = false;
		error = error + "Please add city.<br>";
	}		
	
	if (myform.ccstate.value.length == 0) {
		status = false;
		error = error + "Please add state.<br>";
	}
	
	if (myform.cczip.value.length == 0) {
		status = false;
		error = error + "Please add zip.<br>";
	}

	if (status == false) {
		document.getElementById('signupbillingerror').style.display = "block";
		document.getElementById('signupbillingerror').innerHTML = error;
	}
	return status;
}

function isValidCreditCard(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;
        
      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;
 
       case "discover":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "americanexpress":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}
