//Java Script functions common to all sections of partner portal

// Valid values for variables
var whitespace = " \t\n\r";
var numericString = "0123456789";
var alphaString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var alphaNumericString = alphaString+numericString;
var validAddressLine = alphaNumericString+"-.,'#*@/& ";
var validAuthAnswer = alphaNumericString+"-.,()?'#*@&\\ ";
var validCanonicalName = alphaNumericString+"-.";
var validCity = alphaNumericString+"-.,' ";
var validCompanyName = alphaNumericString+"-.,()\\@%!' ";
var validCountryCode = alphaString;
var validCustomerID = numericString;
var validDomainName = alphaNumericString+"-.";
var invalidDomainName = "~!@#$%^&*()_+=|\\[]{}\"':;?/,<>\t"; // invalid characters in a domain name
var validEmail = alphaNumericString+"!%&=\\'+_.-@";
var validExchange = alphaNumericString+"-.";
var validFax = alphaNumericString+",.+()/-* ";
var validName = alphaNumericString+"*-.,()\\@'& ";
var validNewLoginName = alphaNumericString+".-@";
var validNewPassword = alphaNumericString+"-_!@#$%^&*()";
var validNicHandle = alphaNumericString+"-* ";
var validOrderID = numericString;
var validPartnerID = numericString;
var validPartnerPassword = alphaNumericString+"-_!@#$%^&*()";
var validPassword = alphaNumericString+"-_!@#$%^&*()";
var validPhone = alphaNumericString+",.+()/- ";
var validUSPostalCode = numericString+"-";
var validNonUSPostalCode = alphaNumericString+"-()/+ ";
var validPreference = numericString;
var validProductID = alphaNumericString+".";
var validPurchasePeriod = numericString;
var validRecordName = alphaNumericString+"-.";
var validReferenceNumber = numericString;
var validState = alphaNumericString+"-.,' ";
var validTLD = alphaString;
var validUserID = numericString;
// end of variables



//validate address line
function isValidAddressLine(value)
{
	return isValidValue(value,validAddressLine,1,41);
}

//validate Verification Answer
function isValidAuthAnswer(value)
{
	return isValidValue(value,validAuthAnswer,1,160);
}

//validate Canonical name
function isValidCanonicalName(value)
{
	return isValidValue(value,validCanonicalName,4,128);
}

//validate City
function isValidCity(value)
{
	return isValidValue(value,validCity,0,30);
}

//validate Company Name
function isValidCompanyName(value)
{
	return isValidValue(value,validCompanyName,1,50);
}

//validate country code
function isValidCountryCode(value)
{
	return isValidValue(value,validCountryCode,2,5);
}

//validate customer id
function isValidCustomerID(value)
{
	return isValidValue(value,validCustomerID,1,10);
}

//validate domain names
function isValidDomainName(value)
{
  	//if no dot
	if (value.indexOf('.') == -1)
		return false;
  var length = value.trim().length;
	if ( length < 4 || length > 67 )
		return false;

	return !checkInvalidity(value,invalidDomainName);
}

//validate Email
function isValidEmail (value)
{
	if(value == "")
		return false;
	if(isValidValue(value,validEmail,6,128))
	{
    // there must be >= 1 character before @, so we
    // start looking at character position 1
    // (i.e. second character)
    var i = 1;
    var sLength = value.length;

    // look for @
    while ((i < sLength) && (value.charAt(i) != "@"))
    {
			i++
    }

    if ((i >= sLength) || (value.charAt(i) != "@"))
		{
			return false;
		}

		//look for . from second position after @
    else i += 2;

    // look for .
    while ((i < sLength) && (value.charAt(i) != "."))
    {
			i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (value.charAt(i) != "."))
		{
			return false;
		}
    else
			return true;
	}

	return false;

}


//validate Exchange ( for advanced DNS )
function isValidExchange(value)
{
	return isValidValue(value,validExchange,4,128);
}

//validate Fax
function isValidFax(value)
{
	return isValidValue(value,validFax,1,25);
}

//validate Name ( First name, Middle name, Last name )
function isValidName(value)
{
	return isValidValue(value,validName,1,30);
}

//validate NewLoginName
function isValidNewLoginName(value)
{
	return isValidValue(value,validNewLoginName,8,32);
}

//validate NewPassword
function isValidNewPassword(value)
{
	return isValidValue(value,validNewPassword,4,8);
}

//validate NicHandle
function isValidNicHandle(value)
{
	return isValidValue(value,validNicHandle,1,32);
}

//validate OrderID
function isValidOrderID(value)
{
	return isValidValue(value,validOrderID,1,10);
}

//validate PartnerID
function isValidPartnerID(value)
{
	return isValidValue(value,validPartnerID,1,10);
}

//validate PartnerPassword
function isValidPartnerPassword(value)
{
	return isValidValue(value,validPartnerPassword,4,8);
}

//validate Phone
function isValidPhone(value)
{
	return isValidValue(value,validPhone,1,25);
}


//validate USPostalCode
function isValidUSPostalCode(value)
{
	if(! isValidValue(value,validUSPostalCode,1,10))
	{
		alert("Please enter only numeric characters plus hyphen (' - ') for the Postal Code");
		return false;
	}
	var length = value.length;
	if(length != 5 && length != 10 && length != 9)
	{
		alert("Please enter valid number of characters for the Postal Code. The valid formats are 12345, 123456789 and 12345-6789");
		return false;
	}
	if((length == 5 || length == 9 ) && !isNumber(value) )
	{
		alert("Please enter valid number of characters for the Postal Code. The valid formats are 12345, 123456789 and 12345-6789");
		return false;
	}
	if(length == 10 && (value.indexOf('-') != 5  || value.lastIndexOf('-') != 5))
	{
		alert("Please enter valid format for the Postal Code. The valid formats are 12345, 123456789 and 12345-6789");
		return false;
	}
	return true;
}

//validate NonUSPostalCode
function isValidNonUSPostalCode(value)
{
	return isValidValue(value,validNonUSPostalCode,'','');
}

//validate NonUSPostalCode
function isValidNonUSPostalCode(value)
{
	return isValidValue(value,validNonUSPostalCode,'','');
}

//validate Preference
function isValidPreference(value)
{
	return isValidValue(value,validPreference,'','');
}

//validate referenceNumber
function isValidReferenceNumber(value)
{
	return isValidValue(value,validReferenceNumber,1,10);
}

//validate ProductID
function isValidProductID(value)
{
	return isValidValue(value,validProductID,1,30);
}

//validate PurchasePeriod
function isValidPurchasePeriod(value)
{
	return isValidValue(value,validPurchasePeriod,1,10);
}

//validate PurchasePeriod
function isValidState(value)
{
	return isValidValue(value,validState,0,40);
}

//validate tld
function isValidTLD(value)
{
	return isValidValue(value,validTLD,'','');
}

//validate userID
function isValidUserID(value)
{
	return isValidValue(value,validUserID,1,10);
}

//check the value is valid
function isValidValue(value,validString,minLength,maxLength)
{
	value = value.trim();
  var length = value.length;
  if(minLength != "" && maxLength != "")
	{
		if(length < minLength || length > maxLength)
			return false;
  }
	if(checkValidity(value,validString))
		return true;
	return false;
}

//validate the input value - compare each char in input string with each char from valid string
function checkValidity(value,validString)
{
	var returnValue = true;
	for (var i=0;  i<value.length;  i++)
  {
  	ch = value.charAt(i);
    for (j = 0; j < validString.length;j++)
    	if (ch == validString.charAt(j))
      	break;
      if (j == validString.length)
      {
      	// invalid char found
				returnValue = false;
        break;
      }
	}
	return returnValue;
}


//Check for is number
function isNumber(val)
{
	if(val == "")
		return false;
	if(checkValidity(val,numericString))
		return true;
	return false;
}

// check if an invalid char from invaludString is in the value
// returns true if found invalid character, false otherwise
function checkInvalidity(value,invalidString)
{
	var returnValue = false;
	for (var i = 0;  i < value.length;  i++)
	{
		ch = value.charAt(i);
		if (invalidString.indexOf(ch) != -1)
		{
			// found an invalid char, so return true
			return true;
		}
	} // for
	return returnValue;
}

//validate Email

//validate alpha numerics
function isAlphaNumeric(val)
{
	if(val == "")
		return false;
	if(checkValidity(val,alphaNumericString))
		return true;
	return false;
}

//trim string
function trimString (str)
{
		str = this != window? this : str;
		return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

String.prototype.trim = trimString;

//trim all the text and hidden fields on the form
function trimFormFields(theForm)
{
	for(var i=0; i<theForm.elements.length; i++)
	{
		if(theForm.elements[i].type == "text" || theForm.elements[i].type == "hidden")
			theForm.elements[i].value = theForm.elements[i].value.trim();
	}
}


//this function should be used with text box objects only
function setFocusAndSelectAndReturnFalse(obj)
{
	obj.focus();
	obj.select();
	return false;
}

//this is to select the radio buttons when the corresponding text box gets the focus
function checkSelection(field,value)
{
  for (var i=0; i < field.length; i++ )
  {
    if (field[i].value == value) {
      field[i].checked = true;
    }
  }
}

//to open customer info in new window - remove it after adding a commonmethod for all sections
function openInNewWindow(url)
{
	 newWindow = window.open(url,'newWin','toolbar=no,status=yes,scrollbars=no,location=no,menubar=no,width=740,height=250');
	 newWindow.focus();
	 newWindow.opener = self;
}

//need to remove this method after clean-up of every section
function trimSpaces (str)
{
		return str.trim();
}

//need to remove this method after clean-up of every section
function trimSpacesInFormFields(theForm)
{
	for(var i=0; i<theForm.elements.length; i++)
	{
		if(theForm.elements[i].type == "text" || theForm.elements[i].type == "hidden")
			theForm.elements[i].value = theForm.elements[i].value.trim();
	}
}

//for select all on page
function selectAllCheckBoxesOnForm(theForm)
{
	for(var i=0; i<theForm.elements.length; i++)
	{
		if(theForm.elements[i].type == "checkbox")
			theForm.elements[i].checked = true;
	}
}

//for validating a single form field
function validateFormField(field, fieldName)
{
	fieldValue = field.value.trim();
	if(fieldValue == "")
	{
		alert("Please enter the value for "+fieldName);
		return false;
	}
	return true;
}
