var cPhoneNumberLength	= 7;	  
var reMailAddress 				= /^\s*[\+|A-Z|a-z|0-9|.|_|-]+@[A-Z|a-z|0-9|.|-]+\.[A-Z|a-z]+$/;
//var reMailAddress 			= /^\s*[^\s,@]+@[^\s@]+\.[^\s@]+\s*$/;
var rePassword					= /^\d{4,10}$/;
var reExtension					= /^\d{4,8}$/;
var reExtensionEx				= /^\d{10}$/;
var reAreaCode					= /^\d{3}$/;
var reAreaCodeEx				= /^\d*$/;
var rePhoneNumberEx			= /^\d[\s\d\.\-]*$/;
var reSSN								= /^\d{4}$/;
var reZip								= /^\d{5}$/;

function isDigit(chDigit) {
	return chDigit.match(/^[0-9]$/);
}

function isAlpha(chSymbol) {
	return chSymbol.match(/^[a-zA-Z]$/);
}

function isValidName(strName) {
	if(strName == "") return false;
	return true;
	//return strName.match(/^[a-zA-Z0-9][a-zA-Z0-9\'\-\. ]*\s*$/);
}

function isValidNameEx(strName) {
	if(strName == "") return false;
	//return strName.match(/^[a-zA-Z0-9][a-zA-Z0-9\'\-\. ]*\s*$/);
	return true;
}

function isValidPassword(password, accountNumber, contactNumber, mailboxId, brandId, objErrContainer) {
	var res;
	var ajax = new RCJSAjax("/setup/check_password.asp?password=" + password 
		+ "&a_number=" + encodeURIComponent(accountNumber)
		+ "&c_number=" + encodeURIComponent(contactNumber)
		+ "&mbid=" + mailboxId + "&s=" + brandId,
		{ onsuccess : function (result) { res = RCJSON_parse(result); } },
		false);
	
	ajax.HTTPRequest();
	
	if (res) {
		if (objErrContainer != null)
			objErrContainer.innerHTML = res;
		else
			alert(res);
		return false;
	} else {
		return true;
	}
}

function isValidExtension(strExtension) {
	return reExtension.exec(strExtension);
}

function isValidExtensionEx(strExtension) {
	return reExtensionEx.exec(strExtension);
}

function isValidEMail(strEMail) {
	return reMailAddress.exec(strEMail);
}			

function isValidSSN(strSSN) {
	return reSSN.exec(strSSN);
}	

function isValidZip(strZip) {
	return reZip.exec(strZip);
}

function isValidCountryCode(strCountryCode) {
	return strCountryCode.match(/^\d*$/);
}

function isValidAreaCode(strAreaCode) {
	return strAreaCode.match(/^[2-9]\d{2}$/) && 
				!strAreaCode.match(/^8(00|11|22|33|44|55|66|77|88|99)$/) &&
				!strAreaCode.match(/^(880|881|882|900|911|976)$/);
}

function isValidAreaCodeEx(strAreaCode) {
	return reAreaCodeEx.exec(strAreaCode);
}

function isValidDate(inputDay, inputMonth, inputYear) {
	if ( inputYear.value == "" ) {
		alert("Birth year required");
		inputYear.focus();
		return false;
	}
	if ( !inputYear.value.match(/^\d+$/) || parseInt(inputYear.value,10)<=0 ) {
		alert("Invalid birth year");
		inputYear.focus();
		return false;
	}

	if ( inputMonth.value == "" ) {
		alert("Birth month required");
		inputMonth.focus();
		return false;
	}
	if (inputMonth.value.substr(0, 1) == "0")
		inputMonth.value = inputMonth.value.substr(1);
		
	if ( inputDay.value == "" ) {
		alert("Birth day required");
		inputDay.focus();
		return false;
	}
	if (inputDay.value.substr(0, 1) == "0")
		inputDay.value = inputDay.value.substr(1);
		
	if ( !inputMonth.value.match(/^\d+$/) || parseInt(inputMonth.value,10)<1 || parseInt(inputMonth.value,10)>12){
		alert("Invalid birth month");
		inputMonth.focus();
		return false;
	}
	
	var invalidDay = false;
	
	if ( !inputDay.value.match(/^\d+$/) ) {
		invalidDay = true;
	}
	else {
		var d = parseInt(inputDay.value, 10);
		if (d < 1) 
			invalidDay = true;
		else {
			var maxDay;
			switch (parseInt(inputMonth.value, 10)) {
				case 2:
					if (parseInt(inputYear.value, 10) % 4)
						maxDay = 28;
					else
						maxDay = 29;
					break;							
				case 4: case 6: case 9: case 11:
					maxDay = 30;
					break;
				default:
					maxDay = 31;
			}
			if (d > maxDay)
				invalidDay = true;
		}
	}
			
	if (invalidDay) {
		alert("Invalid birth day");
		inputDay.focus();
		return false;
	}

	var Now = new Date();
	if ((Now.getFullYear() - 1900 - inputYear.value) < 14) {
		alert("Must be 14 or older to register");
		inputMonth.focus();
		return false;
	}
	
	return true;
}

function isValidPhone(strPhoneNumber) {
  var strPosibleSymbols = " -.";
  var len = strPhoneNumber.length;
  var nDigitCount = 0;
	var strNormalizedNumber = "";

  for (var i=0; i < len; i++) {
    var ch = strPhoneNumber.charAt(i).toLowerCase();
		if (i==0 && (ch == '0' || ch == '1'))
			return false;
    if (isDigit(ch)) {
      nDigitCount++;
			strNormalizedNumber += ch;
    } else {
      if (isAlpha(ch)) {
				return false;
	    } else {
        if (-1 == strPosibleSymbols.indexOf(ch))
          return false;
      }
    }
 	}
	return (cPhoneNumberLength == nDigitCount && !strNormalizedNumber.match(/^555/));
}

function isValidPhoneEx(strPhoneNumber) {
	return rePhoneNumberEx.exec(strPhoneNumber);
}

function parseString(strParams, chDelim, nParams) {
  var arParams = new Array(nParams);
  var i;
  for(i=0; i<nParams; arParams[i++] = "");
  for(i=0; "" != strParams; i++){
    var lDelim = strParams.indexOf(chDelim);
    if(-1 == lDelim) lDelim = strParams.length;
    arParams[i] = strParams.substring(0, lDelim)
    strParams = strParams.substring(lDelim+1, strParams.length);
  }
  return arParams;
}

function EncriptString(strPass)
{ 
  var strRes;
  var strBeg = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
  var strEnd = "pasdfghjklzxcvbnm12345qwerJKLZXCVBNMtyuio67890QWERTYUIOPASDFGH";
  var iPos;

  strRes = "";
  for(var i=0; i< strPass.length; i++)
  {
   iPos = strBeg.indexOf(strPass.charAt(i));
   if(iPos == -1)
    strRes += strPass.charAt(i);
   else
    strRes += strEnd.charAt(strBeg.indexOf(strPass.charAt(i)));
  }
  return strRes;
}

function DecriptString(strPass)
{
  var strRes;
  var strEnd = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
  var strBeg = "pasdfghjklzxcvbnm12345qwerJKLZXCVBNMtyuio67890QWERTYUIOPASDFGH";
  var iPos;
  strRes = "";

  for(var i=0; i< strPass.length; i++)
  {
   if(iPos == -1)
    strRes += strPass.charAt(i);
   else
    strRes += strEnd.charAt(strBeg.indexOf(strPass.charAt(i)));
  }
  return strRes;
}

function selectInsert( objSelect, nIndex, strText, strValue ) {
  if (-1 == nIndex) {
    var idx = objSelect.length++;
    objSelect.options[idx].value = strValue;
    objSelect.options[idx].text = strText;
  }
}

function selectRemove( objSelect ) {
	var i;
	var values = new Array(objSelect.length);
	var texts  = new Array(objSelect.length);
	for (i=0; i<objSelect.length; i++) {
		if (!objSelect.options[i].selected) {
			values[i] = objSelect.options[i].value;
			texts[i] = objSelect.options[i].text;
		}
		else {
			values[i] = texts[i] = null;
		}
	}
	objSelect.length = 0;
	for (i=0; i<values.length; i++) {
		if (values[i] != null) {
			var idx = objSelect.length++;
			objSelect.options[idx].value = values[i];
			objSelect.options[idx].text = texts[i];
		}
	}
}				

function selectBSearch( objSelect, strValue ) {
	if (strValue != "") {
		var i = 0, j = objSelect.length;
		while (i <= j) {
			var mid = parseInt((i+j)/2);
			if (objSelect.options[mid].value == strValue)
				return mid;
			else if (objSelect.options[mid].value < strValue)
				i = mid + 1;	
			else
				j = mid - 1;
		}
	}
	return 0;
}

function selectSearch( objSelect, strValue ) {
	if (strValue != "") {
		var i = 0, j = objSelect.length;
		while (i < j) {
			var mid = i;
			if (objSelect.options[mid].value == strValue)
				return mid;

			i = mid + 1;	
		}
	}
	return 0;
}


function jumpToNumber(e, objAreaInput, objNumberInput) {
	var charCode = ((navigator.appName == "Netscape") ? e.which : e.keyCode);
	if ((charCode >= 48 && charCode <= 57 || charCode >= 65 && charCode <= 90 || charCode >= 97 && charCode <= 122)
			&& objAreaInput.value.length == 3)
		objNumberInput.focus();
}

function parsePhoneNumber(phoneNumber, iFormat) {

	var d;
	d = new Date();
	var res;
	var ajax = new RCJSAjax("/setup/check_int_number.asp?anticache=" + d.getTime()+ "&iFormat=" + iFormat + "&cmd=parse&number=" + encodeURIComponent(phoneNumber),
		{
			onsuccess : function (result) {
				res = result;
			}
		},
		false);
	ajax.HTTPRequest();
	if (res) {
		return res;
	} else {
		return phoneNumber;
	}

}

function ajaxParse(phoneNumber) {
	if(phoneNumber.length < 6) return phoneNumber;
	var d;
	d = new Date();
	var res;
	var ajax = new RCJSAjax("/setup/check_int_number.asp?anticache=" + d.getTime() + "&cmd=parse&number=" + encodeURIComponent(phoneNumber),
		{
			onsuccess : function (result) {
				res = result;
			}
		},
		false);
	ajax.HTTPRequest();
	if (res) {
		return res;
	} else {
		return phoneNumber;
	}
}
