//################################################################################//
//###########	   displays a message box to confirm the action		   ###########//
//################################################################################//
function confirmAction(message)
{
	if (confirm(message)==true)
		return true;
	else
		return false;
}

//################################################################################//
//###########			client side validation functions			   ###########//
//################################################################################//

//checkboxSelectedValidator
function checkboxSelectedValidator(checkbox_ToCheck, validatorID, isGroup)
{
	//if isGroup => checkbox array
	if(isGroup == "True")
	{
		var index = 0;
		while(document.getElementById(checkbox_ToCheck+index) != null)
		{
			if(document.getElementById(checkbox_ToCheck+index).checked)
			{
				document.getElementById(validatorID).style.display = 'none';
				return true;
			}	
			
			index++;
		}
		
		//if nothing selected
		document.getElementById(validatorID).style.display = '';
		return false;		
	}
	//just one checkbox
	else
	{
		if(document.getElementById(checkbox_ToCheck).checked)
		{
			document.getElementById(validatorID).style.display = 'none';
			return true;
		}
		else
		{
			document.getElementById(validatorID).style.display = '';
			return false;
		}	
	}
}

//requiredFieldValidator
function requiredFieldValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//requiredFieldValidator
function requiredFieldValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//regularExpressionValidator
function regularExpressionValidator(fieldID_ToCheck, expression, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	regex = new RegExp(""+xreplace(""+xreplace(expression,"[-bs-]","\\"), "[-q-]", "'"));
	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test.match(regex))
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	else
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
}

//intExpressionValidator
function intExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test))
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}
//intPositiveExpressionValidator
function intPositiveExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test) || parseInt(test)< 0)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//intPositiveOrNoLimitExpressionValidator
function intPositiveOrNoLimitExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test) || parseInt(test)< -1)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//intPositiveOrNoLimitExpressionValidator
function intPositiveOrNoLimitExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test) || parseInt(test)< -1)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//intPositiveOrNoLimitExpressionValidator
function intPositiveOrNoLimitExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test) || parseInt(test)< -1)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//intPositiveOrNoLimitExpressionValidator
function intPositiveOrNoLimitExpressionValidator(fieldID_ToCheck, validatorID)
{
	if(document.getElementById(fieldID_ToCheck).value == "")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	//validate value	
	var test = document.getElementById(fieldID_ToCheck).value;
	
	if(test != parseInt(test) || parseInt(test)< -1)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(fieldID_ToCheck).value = parseInt(test);
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//compareValidator
function compareValidator(fieldID1_ToCheck, fieldID2_ToCheck, validatorID)
{
	if(document.getElementById(fieldID1_ToCheck).value != document.getElementById(fieldID2_ToCheck).value)
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

function IntValueIsInCommaSeparatedString(stringInput, intValue)
{
	var stringArray = stringInput.split(",");
	for(var i=0;i<stringArray.length;i++)
	{
		if(parseInt(stringArray[i]) == intValue)
		{
			return true;
		}
	}

	// value not found
	return false;
}

function IntValueIsInSemiColumnSeparatedString(stringInput, intValue)
{
	var stringArray = stringInput.split(";");
	for(var i=0;i<stringArray.length;i++)
	{
		if(parseInt(stringArray[i]) == intValue)
		{
			return true;
		}
	}

	// value not found
	return false;
}

function GetIntValueFromCommaSeparatedString(stringInput, index)
{
	var stringArray = stringInput.split(",");
	
	return parseInt(stringArray[index]);
}

function GetStringValueFromCommaSeparatedString(stringInput, index)
{
	var stringArray = stringInput.split(",");
	
	return stringArray[index];
}

//CALsValidator
function CALsValidator(fieldID,validatorID,resellerFieldID,accountFieldID,maxHomeLicenses,maxProfLicenses,usedHomeLicenses,usedProfLicenses,accountWithNoCals, noHome, noProf, noCALs, currentUserProfile)
{
	var selectedAccount = document.getElementById(accountFieldID).selectedIndex;
	
	if (IntValueIsInCommaSeparatedString(accountWithNoCals, selectedAccount))
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	// need to check the licenses - if there is a license update
	var selectedLicense = document.getElementById(fieldID).value; // 0 professional - 1 home
	if (selectedLicense == currentUserProfile)
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	var selectedParent = 0;
	if (document.getElementById(resellerFieldID) != null)
		selectedParent = document.getElementById(resellerFieldID).selectedIndex;

	var maxHLicense = GetIntValueFromCommaSeparatedString(maxHomeLicenses, selectedParent);
	var maxPLicense = GetIntValueFromCommaSeparatedString(maxProfLicenses, selectedParent);
	var usedHLicense = GetIntValueFromCommaSeparatedString(usedHomeLicenses, selectedParent);
	var usedPLicense = GetIntValueFromCommaSeparatedString(usedProfLicenses, selectedParent);
	
	var Havailable = true;
	var PAvailable = true;
	if (maxHLicense >= 0)
	{
		Havailable = ((maxHLicense - usedHLicense) > 0);
	}
	if (maxPLicense >= 0)
	{
		PAvailable = ((maxPLicense - usedPLicense) > 0);
	}

	var valid = false;
	var errorMsg = noCALs;
	
	// check for selected license
	// 0 is professional CAL
	// 1 is home CAL
	if (selectedLicense == 0)
	{
		if (PAvailable)
		{
			valid = true;
		}
		else
		{
			if (Havailable)
			{
				errorMsg = noProf;
			}
		}
	}
	
	if (selectedLicense == 1)
	{
		if (Havailable)
		{
			valid = true;
		}
		else
		{
			if (PAvailable)
			{
				errorMsg = noHome;
			}
		}	
	}
	
	if (valid)
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	else
	{
		document.getElementById(validatorID).innerHTML = errorMsg;
		document.getElementById(validatorID).style.display = '';
		return false;
	}
}

function GetSelectedAccountSizeMb(accountFieldID)
{
	var accountsElement = document.getElementById(accountFieldID);
	var selectedOptionText = accountsElement.options[accountsElement.selectedIndex].text;
	
	var GBIndex = selectedOptionText.indexOf("GB");
	var sizeIndex = selectedOptionText.indexOf(" ");
	if(sizeIndex >= 0)
	{
		var accountSize = parseInt(selectedOptionText.substring(0, sizeIndex));
		if (GBIndex > 0)
			accountSize = accountSize * 1000;

		return accountSize;
	}
	else
		return -1;
}

function GetSelectedLocation(locationFieldID)
{
	var locationElement = document.getElementById(locationFieldID);
	var selectedOptionValue = locationElement.options[locationElement.selectedIndex].attributes["value"].value;
	
	return parseInt(selectedOptionValue);
}

//StorageValidator
function StorageValidator(fieldID, validatorID, resellerFieldID, maxStorage, assignedStorage, currentUserSize)
{
	var selectedSize = GetSelectedAccountSizeMb(fieldID);
	var currentIntSize = parseInt(currentUserSize);
	
	if (currentIntSize == selectedSize)
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}

	var selectedParent = 0;
	if (document.getElementById(resellerFieldID) != null)
		selectedParent = document.getElementById(resellerFieldID).selectedIndex;

	var maxStorage = GetIntValueFromCommaSeparatedString(maxStorage, selectedParent) * 1000;
	
	if (maxStorage < 0)
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	else
	{
		if (selectedSize < 0)
		{
			document.getElementById(validatorID).style.display = '';
			return false;
		}
	}
	
	var assignedStorage = GetIntValueFromCommaSeparatedString(assignedStorage, selectedParent);
	var storageAvailable = maxStorage - assignedStorage;
	if (currentIntSize > 0)
		storageAvailable = storageAvailable + currentIntSize;
		
	if (storageAvailable >= selectedSize)
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	else
	{
		document.getElementById(validatorID).style.display = '';
		return false;
	}
}

//StorageValidator
function UnlimitedAccountValidator(fieldID, profileFieldID, validatorID)
{
	var selectedSize = GetSelectedAccountSizeMb(fieldID);
	if (selectedSize == -1)
	{
		// unlimited account
		// is it home profile?
		var selectedProfile = document.getElementById(profileFieldID).value; // 0 professional - 1 home
		if (selectedProfile != 1)
		{
			document.getElementById(validatorID).style.display = '';
			return false;
		}
		else
		{
			document.getElementById(validatorID).style.display = 'none';
			return true;
		}
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

function DependentFieldValidator(fieldID, validatorID, dependentFieldID)
{
	var email = document.getElementById(dependentFieldID);
	var check = document.getElementById(fieldID);
	if(check.checked)
	{
		if(trim(email.value) == "")
		{
			document.getElementById(validatorID).style.display = '';
			return false;
		}
		else
		{
			document.getElementById(validatorID).style.display = 'none';
			return true;
		}
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
//StateValidator
function StateValidator(fieldID, validatorID, countryFieldID)
{
	var country = document.getElementById(countryFieldID);
	var state = document.getElementById(fieldID);
	if(country.options[country.selectedIndex].text.toUpperCase() == 'UNITED STATES')
	{
		if(state.options[state.selectedIndex].value == '-1')
		{
			document.getElementById(validatorID).style.display = '';
			return false;
		}
		else
		{
			document.getElementById(validatorID).style.display = 'none';
			return true;
		}
	}
	else
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
}

//OwnerValidator
function OwnerValidator(fieldID, validatorID, resellerFieldID, resellerLocation)
{
	if (resellerLocation == "-1")
	{
		document.getElementById(validatorID).style.display = 'none';
		return true;
	}
	
	var selectedParent = 0;
	if (document.getElementById(resellerFieldID) != null)
		selectedParent = document.getElementById(resellerFieldID).selectedIndex;

	var selectedLocation = GetSelectedLocation(fieldID);
	var parentLocations = GetStringValueFromCommaSeparatedString(resellerLocation, selectedParent)
	if (parentLocations == "-1" || IntValueIsInSemiColumnSeparatedString(parentLocations, selectedLocation))
	{
			document.getElementById(validatorID).style.display = 'none';
			return true;
	}
	else
	{
			document.getElementById(validatorID).style.display = '';
			return false;
	}
}

//create a form validation group (add an element to this group)
function createForm(evalStatement,groupName)
{
	var statement = "";
		
	statement += "try";
	statement += "{";
	statement +=	groupName+"+=\"[-st-]"+evalStatement+"\"";
	statement += "}";
	statement += "catch(ex)";
	statement += "{";
	statement +=	groupName+"=\""+evalStatement+"\"";
	statement += "}";
	
	eval(statement);
}

//validate form client side
function submitClientValidation(groupName)
{
	var success = true;
	var validation_array = eval(groupName+'.split("[-st-]")');

	for(var i=0; i < validation_array.length;i++)
	{
		if(validation_array[i]+"" != "undefined")
		{
			if(!eval(validation_array[i]) && validation_array[i] != null)
				success = false;
		}
	}
	return success;
}