﻿var ctrlGrp = "";
var locControl = "";
var touchedFields = ",";
function fieldTouched(senderObjId)
{
	if (touchedFields.indexOf("," + senderObjId + ",") == -1)
	{
	    touchedFields += senderObjId + ",";
	}
}

function validateLogin(sender, args) {
    var val1 = getFieldValue(sender.controltovalidate);
    var val2 = getFieldValue(sender.controltovalidate.replace("UserID", "password"));

	if (touchedFields.indexOf("," + sender.controltovalidate + ",") != -1 && touchedFields.indexOf("," + sender.controltovalidate.replace("UserID", "password") + ",") != -1)
	{
		args.IsValid = val1 != "" && val2 != "";

		if (!args.IsValid)
		{
			sender.innerText = "Your Email Address and Password are required";
		}
	}
	
	if (val1 == "")
	{
		getElement(sender.controltovalidate, false).focus();
	}
	else if (val2 == "")
	{
		getElement(sender.controltovalidate.replace("UserID", "password"), false).focus();
	}
	
	return;
}

function validateCCExpirationDate(sender, args) {
	args.IsValid = dateValidation();
	return;
}

function dateValidation() {


	var val1 = document.getElementById("cardExpirationMonth");
	var val2 = document.getElementById("cardExpirationYear") ;
	var dateValidator = document.getElementById("validateExpirationDate");
	var valid = false;
	var now = new Date();
 
    
        
        if (val1.value != "" && val2.value != "") {
        	if (!isNaN(val1.value) && !isNaN(val2.value)) {
        		
        		valid = true;
        	}
        	
        	if (val2.value == now.getFullYear() && val1.value < now.getMonth() + 1) {
        	
        		valid = false;
       		
        	}
        	
        }
        else {
        	
        	
        	valid = false;

        }
        
	   
	  
 
  return valid;
}

function verifyUniqueUserID(sender, args) {
	
		var valid = false;
		var result = "";
	
		var email_field = document.getElementById(sender.controltovalidate);
	
		if (null != email_field) {
			result = AjaxGET("../Scripts/AjaxRequests.aspx", "?id=" + email_field.value + "&action=uniqueuserid", false);

		}
		
		if (result.toLowerCase() == "true")
		    args.IsValid = true;
		else
			args.IsValid = false;
    
    return;
}

function verifyUniqueProfileName(sender, args) {

    var valid = false;
    var result = "";
    var companyid = "";

    var profile_name = document.getElementById(sender.controltovalidate);
    var company_id = document.getElementById("txtCompanyID");

    if (null != company_id)
        companyid = "&companyid=" + company_id.value;
     
    if (null != profile_name) {
        result = AjaxGET("../Scripts/AjaxRequests.aspx", "?action=uniqueprofilename" + companyid + "&profilename=" + profile_name.value, false);
    }
 
    if (result.toLowerCase() == "true") {
        args.IsValid = true;
        valid = true;
    }
    else {
        args.IsValid = false;
        valid = false;

        sender.innerText = "This profile name is already in use, please choose another";
    }

    return valid;
}


function addAdditionalValidation(sender, args) {
 
    args.IsValid = validateAddAdditionalFields(4);
   
     return;
}

function isTermsChecked(sender, args) {

    args.IsValid = false;

    args.IsValid = validateTermsChecked();
    
    return;
}

function validateTermsChecked() {
    var valid = false;
    var input_fields = document.getElementsByTagName("input");
    var myField = "";

    for (var i = 0; i < input_fields.length; i++) {

        if (input_fields[i].id.indexOf("enrollAcceptTerms") != -1) {
            valid = input_fields[i].checked;
        }
    }

    var spans = document.getElementsByTagName("span");

    for (var k = 0; k < spans.length; k++) {
        if (null != spans[k]) {
            if (spans[k].id.indexOf("validateAcceptTerms") != -1) {
                if (!valid) 
                    spans[k].style.display = "block";
                else
                    spans[k].style.display = "none";
            }
        }
    }

    return valid;
}

function validateCompanyScope() {

  var input_fields = document.getElementsByTagName("input");
  var checked = false;

  for (var i = 0; i < input_fields.length; i++) {
      if (input_fields[i].id.indexOf("CompanyScope") != -1) {
          //var input_fields = document.getElementsByTagName("input");

         // for (var i = 0; i < input_fields.length; i++) {
         //     alert(input_fields[i].id);
              if (input_fields[i].checked)
                  checked = true;
         // }
      }
  }

  var spans = document.getElementsByTagName("span");
 
  for (var k = 0; k < spans.length; k++) {
      if (null != spans[k]) {

          if (spans[k].id.indexOf("validateCompanyScopeCustom") != -1) {
              if (!checked)
                  spans[k].style.display = "inline";
              else
                  spans[k].style.display = "none";
          }
      }
  }
  
  return checked;
}

function validateAddAdditionalFields(minRequired) {

    var keywordsField = document.getElementById("AddAdditionalCompanyKeywordsDisplay");
    var valid = false;

    if ('undefined' == minRequired || null == minRequired)
        minRequired = 4;
   
    if (null != keywordsField) 
    {
        var fields = keywordsField.getElementsByTagName("span");
        var displayed_field = document.getElementById("CompanyKeywordsEntry");               
        
        if (fields.length >= minRequired) {
            valid = true;
        }
        else
            valid = false;
        
    }
    else 
        valid = false;

    var spans = document.getElementsByTagName("span");
    var req_span = "";

    for (var k = 0; k < spans.length; k++) {
        if (null != spans[k]) {

            if (spans[k].id.indexOf("validateCompanyKeywordsCustom") != -1) {
                if (!valid)
                    spans[k].style.display = "inline";
                else
                    spans[k].style.display = "none";

            }
            else if (spans[k].id.indexOf("validateCompanyKeywords") != -1) {
                req_span = spans[k];
            }
        }
    }

    if (valid)
        ValidatorEnable(req_span, false);
    else
        ValidatorEnable(req_span, true);

    return valid;
}

function paymentNameValidation(sender, args) {

    if (touchedFields.indexOf(sender.controltovalidate) != -1 && touchedFields.indexOf(sender.controltovalidate.replace("Last", "First")) != -1) {
        var val1 = document.getElementById(sender.controltovalidate);
        var val2 = document.getElementById(sender.controltovalidate.replace("Last", "First"));

        args.IsValid = false;

        if (val1.value != "" && val2.value != "") {
           args.IsValid = true;
        }
    }

    return;
}

function nameValidation(sender, args) {
   
    args.IsValid = nameValidate("", true);

    return;
}

function nameValidate(field, bIgnoreTouch) {
  
    var first_name_valid = false;
    var last_name_valid = false;
    var last_name_touched = false;
    var first_name_touched = false;

    var input_fields = document.getElementsByTagName("input");

    for (var i = 0; i < input_fields.length; i++) {

        if (input_fields[i].id.indexOf("LastName") != -1) {
            if (input_fields[i].value.length > 0)
                last_name_valid = true;

            if (touchedFields.indexOf(input_fields[i].id) != -1)
                last_name_touched = true;

        }
        
        if (input_fields[i].id.indexOf("FirstName") != -1) {
            if (input_fields[i].value.length > 0)
                first_name_valid = true;

            if (touchedFields.indexOf(input_fields[i].id) != -1)
                first_name_touched = true;
        }

        var valid = last_name_valid && first_name_valid;
    }

    if ((first_name_touched && last_name_touched) || bIgnoreTouch) {
        var spans = document.getElementsByTagName("span");

        for (var k = 0; k < spans.length; k++) {
            if (null != spans[k]) {
                if (spans[k].id.indexOf("validateName") != -1 || spans[k].id.indexOf("validateUserLastName") != -1) {
                    if (!valid)
                        spans[k].style.display = "inline";
                    else
                        spans[k].style.display = "none";
                }
            }
        }

        return valid;
    }
    else {
        return true;
    }
}

function validateNumber(sender, args) {
    args.IsValid = false;
    
    var num = document.getElementById(sender.controltovalidate);
    var bIsInt = isInteger(num.value);

    if (bIsInt)
        args.IsValid = true;
    else
        alert("Please enter a valid number");

    return;
}

function validateTheAddress(sender, args) {

    args.IsValid = addressValidate("");

    return;
}

function validateConfirmEmail(sender, args) {
    args.IsValid = doesEmailMatch("", "");

    return;
}

function doesEmailMatch(compare_field, email_field) {

    if (email_field == "")
        email_field = "UserEmail";
    
    if(compare_field == "")
        compare_field = "UserEmailConfirm";
  
    var input_fields = document.getElementsByTagName("input");
    var email = "";
    var email_confirm = "";
    var valid = true;
    
    for (var i = 0; i < input_fields.length; i++) {
        if (input_fields[i].id.indexOf(compare_field) != -1)
            email_confirm = input_fields[i].value;
        else if (input_fields[i].id.indexOf(email_field) != -1)
            email = input_fields[i].value;
    }
    
    if (email != "" && email_confirm != "") {
        if (email.toLowerCase() == email_confirm.toLowerCase())
            valid = true;
        else
            valid = false;
    }

    var spans = document.getElementsByTagName("span");

    for (var k = 0; k < spans.length; k++) {
        if (null != spans[k]) {
            if (spans[k].id.indexOf("validateEmailCompare") != -1) {
                if (!valid)
                    spans[k].style.display = "inline";
                else
                    spans[k].style.display = "none";
            }
        }
    }

    return valid;
}

function addressValidate(field) {
   
    var input_fields = document.getElementsByTagName("input");
    var spans = document.getElementsByTagName("span");
    var focused_field = null;

    try { focused_field = document.activeElement.id; } catch (e) { };

    var validate_address;
    
    for (var i = 0; i < spans.length; i++) {
        if (spans[i].id.indexOf("validateCompanyAddress") != -1)
            validate_address = spans[i];
    }

    var address_valid = false;
    var city_valid = false;
    var zip_valid = false;
  
    for (var i = 0; i < input_fields.length; i++) {
        if (input_fields[i].id.indexOf("CompanyAddress") != -1 && input_fields[i].id.indexOf("CompanyAddress2") == -1  && input_fields[i].id.indexOf("CompanyAddressType") == -1) {
            if (input_fields[i].value.length > 0)
                address_valid = true;
        }
        if (input_fields[i].id.indexOf("CompanyCity") != -1) {
            if (input_fields[i].value.length > 0)
                city_valid = true;
        }

        if (input_fields[i].id.indexOf("CompanyZip") != -1) {
            if (input_fields[i].value.length > 0)
                zip_valid = true;
        }
    }

    var bNotAnAddressField = true;
    if (null != focused_field)
        bNotAnAddressField = focused_field.indexOf("CompanyAddress") == -1 && focused_field.indexOf("CompanyAddress2") == -1 && focused_field.indexOf("CompanyCity") == -1 && focused_field.indexOf("CompanyState") == -1 && focused_field.indexOf("CompanyZip") == -1;

    var spans = document.getElementsByTagName("span");

    for (var k = 0; k < spans.length; k++) {
        if (null != spans[k]) {
            if (spans[k].id.indexOf("validateAddress") != -1) {
                if ((address_valid != true || city_valid != true || zip_valid != true) && bNotAnAddressField)
                    spans[k].style.display = "inline";
                else {
                    spans[k].style.display = "none";
                    break;
                }
            }
        }
    }

    return address_valid && city_valid && zip_valid;
}

function isEntered(sender, args) {
	args.IsValid = true;
//	var boolFocus = false;
	var boolSingle = true;

	setControlString(sender);
	if (sender.AdditionalControlsToValidate != "")
	{
		boolSingle = false;
	}

	while (ctrlGrp != "")
	{
		getControlString();
		if (getFieldValue(locControl) == "" && (touchedFields.indexOf("," + locControl + ",") != -1 || boolSingle == true))
		{
			args.IsValid = false;
			setFieldColor(locControl, false);
			
//			if(!boolFocus && getElement(locControl).type != undefined && sender.AdditionalControlsToValidate != "")
//			{
//				getElement(locControl).focus();
//				boolFocus = true;
//			}
		}
		else
		{
			setFieldColor(locControl, true);
		}
	}

	return;
}

function isEnteredCond(sender, args) 
{
	args.IsValid = true;

	if (!document.getElementById("enrollInvoiceType_0").checked)
	{
		if (args.Value == "") 
		{
			args.IsValid = false;
		}
	}

	return;
}



//look here, up there and below at setting focus
//This will need modified for non-required fields (if blank and not required, validate)
function doesMatch(sender, args)
{
	args.IsValid = true;
	var compareVal = getFieldValue(sender.controltovalidate);

	setControlString(sender);
	while (ctrlGrp != "")
	{
		getControlString();
		
		if (getFieldValue(locControl) == "")
		{
			args.IsValid = true;
			return;
		}
		else if(compareVal != getFieldValue(locControl))
		{
			args.IsValid = false;
			ctrlGrp = "";
		}
	}
	
	if (args.IsValid)
	{
		if(!echeck(compareVal))
		{
			args.IsValid = false;
		}
	}

	setControlString(sender);
	while (ctrlGrp != "")
	{
		getControlString();

		setFieldColor(locControl, args.IsValid);
	}
	
	return;
}


function isValidPhone(sender, args)
{
	args.IsValid = true;

	setControlString(sender);
	while (ctrlGrp != "")
	{
		getControlString();

		if (getFieldValue(locControl) != "") 
		{
			var bGood = true;
			if (locControl.substring(locControl.length - 3, locControl.length) != "Ext")
			{
				if(!checkInternationalPhone(getFieldValue(locControl)))
				{
					bGood = false;
				}
			}
			else if(isInteger(getFieldValue(locControl)) == false)
			{
				bGood = false;
			}
			
			if (!bGood) 
			{
				args.IsValid = false;
				setFieldColor(locControl, false);
			}
			else 
			{
				setFieldColor(locControl, true);
			}
		}
	}

	return;
}


function setControlString(sender)
{
	ctrlGrp = sender.controltovalidate;
	if (sender.AdditionalControlsToValidate != "")
	{
		ctrlGrp += "," + sender.AdditionalControlsToValidate.replace(/ /g, "");
	}
}


function getControlString()
{
	if (ctrlGrp.indexOf(",") == -1)
	{
		locControl = ctrlGrp;
		ctrlGrp = "";
	}
	else
	{
		locControl = ctrlGrp.substring(0, ctrlGrp.indexOf(","));
		ctrlGrp = ctrlGrp.substring(ctrlGrp.indexOf(",") + 1, ctrlGrp.length);
	}
}


function setFieldColor(currentFieldID, blnIsValid)
{
	var currentField = getElement(currentFieldID, false);

	var bgColor = "#FFFFFF";
	if(currentField.type == undefined && currentField.length != undefined)
	{
		bgColor = "";
	}
	
	if (!blnIsValid)
	{
		bgColor = "#B4F9FD"
	}

	if (currentField.type != 'radio' && currentField.type != 'checkbox' && currentField.type != undefined) 
	{
		currentField.style.background = bgColor;
	}
	else 
	{
		if (currentField.length == undefined) 
		{
			//currentField.style.background = bgColor;
		}
		else 
		{
			for (i = 0; i < currentField.length; i++) 
			{
				currentField[i].style.background = bgColor;
			}
		}
	}
}


//This will need updated for select boxes
function getFieldValue(currentFieldID)
{
	var currentField = getElement(currentFieldID, false);
	
	if (currentField.type != 'radio' && currentField.type != 'checkbox' && currentField.type != undefined)
	{
		return trim(currentField.value, " ");
	}
	else
	{
		if (currentField.length == undefined) 
		{
			return trim(currentField.value, " ");
		}
		else
		{
			var returnValue = "";
			for (i = 0; i < currentField.length; i++)
			{
				if(currentField[i].checked == true)
				{
					returnValue += currentField[i].value + ", ";
				}
			}

			if (returnValue != "")
			{
				returnValue = returnValue.substring(0, returnValue.length - 2);
			}

			return returnValue;
		}
	}
}


function getElement(currentFieldID, preIterate)
{
	var returnField;
	
    if(document.all)
    {
        returnField = document.all[currentFieldID];
		if(preIterate && document.all[currentFieldID.replace(/_/g, "$")])
	    {
	    	returnField = document.all[currentFieldID.replace(/_/g, "$")];
	    }
    }
    else 
    {
        returnField = document.getElementById(currentFieldID);
        if(preIterate && document.getElementsByName(currentFieldID.replace(/_/g, "$")))
	    {
    		returnField = document.getElementsByName(currentFieldID.replace(/_/g, "$"));
	    }
    }

    if (!preIterate && returnField.type == undefined)
	{
		returnField = getElement(currentFieldID, true);
	}

    return returnField;
}


//Functionalize common functions between this + epulse in some way
function echeck(str) 
{
	var emailExp = new RegExp(/^([a-zA-Z0-9\-\._]+)@(([a-zA-Z0-9\-_]+\.)+)([a-z]{2,3})$/);
	if (str.match(emailExp))
	{
		return true;
	}
	else
	{
		return false;
	}
}


function checkInternationalPhone(strPhone) {
	var validWorldPhoneChars = "()- +";
	var minDigitsInIPhoneNumber = 10;
	var bracket = 3;

	strPhone = strPhone.replace(/ /g, "");
	if (strPhone.indexOf("+") > 1) return false;
	if (strPhone.indexOf("-") != -1) 
	{
		bracket = bracket + 1;
		if (strPhone.substring(strPhone.indexOf("-") + 1, strPhone.length).length != 4) return false;
	}
	
	if (strPhone.indexOf("(") != -1)
	{
		if(strPhone.indexOf("(") > bracket) return false;
		var brchr = strPhone.indexOf("(");
		if (strPhone.charAt(brchr + 4) != ")") return false;
		if (strPhone.substring(strPhone.indexOf("(") + 1, strPhone.indexOf(")")).length != 3) return false;
		
		if(strPhone.indexOf("-") != -1)
		{
			if (strPhone.substring(strPhone.indexOf(")") + 1, strPhone.indexOf("-")).length != 3) return false;
		}
	}
	else if (strPhone.indexOf(")") != -1) return false;

	s = stripCharsInBag(strPhone, validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}


function isInteger(s) {
	var i;
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}

	return true;
}


function stripCharsInBag(s, bag) {
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	
	return returnString;
}


function trim(str, chars) 
{
	return ltrim(rtrim(str, chars), chars);
}


function ltrim(str, chars) 
{
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}


function rtrim(str, chars) 
{
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
