/*************************************************************
/* Tests the URL in typed in the Web Address part of URL field
/*************************************************************/
function TestUrl(textBoxId)
{
	var textBox = document.getElementById(textBoxId);
	
	var theUrl = TrimWhiteSpaces(textBox.value);
	
	if (theUrl != null && theUrl.length > 0)
	{
		window.open(theUrl, '_blank');
	}
}

/********************************************************
/* Checks or unchecks the checboxes in multi choice field
/********************************************************/
function SetAllCheckBoxes(fieldName, checkValue, cbCount)
{
	for (var i=0; i<cbCount; i++)
	{
		document.getElementById(fieldName + '_' + i).checked = checkValue;
	}
	
	var fillIn = document.getElementById(fieldName + '#FillInChoiceCB');
	if (fillIn != null)
	{
		fillIn.checked = checkValue;
	}
}

/***************************************************
/* The function to delete an attachment from a list
/***************************************************/
function SetDeletedAttachment(prefix, fileName)
{
	var confirmed = false;
	
	if (confirm('Are you sure you want to delete ' + fileName + '?'))
	{
		//document.getElementById(prefix+'DeletedAttachmentName').value = fileName;
		confirmed = true;
	}
	
	return confirmed;
}

/**************************************
/* The methods for emailing capability
/**************************************/
var userListFormId = null;

function AddAllUsers(emailToClientId, userEmailListClientId)
{
	var userList = document.getElementById(userEmailListClientId);
	var emailTo = document.getElementById(emailToClientId);
	
	var i;
	
	for (i=0; i<userList.options.length; i++)
	{
	    if (!CheckExistence(emailTo, userList.options(i).value)) {
		    if (emailTo.value.length > 0)
		    {
			    emailTo.value += ', ';
		    }
    		
		    emailTo.value += userList.options(i).value;;
		}
	}
}

function AppendEmail(emailToClientId, userEmailListClientId)
{
	var userList = document.getElementById(userEmailListClientId);
	var emailTo = document.getElementById(emailToClientId);
	
	if (!CheckExistence(emailTo, userList.options(userList.selectedIndex).value)) {
	    if (emailTo.value.length > 0)
	    {
		    emailTo.value += ', ';
	    }
    	
	    emailTo.value += userList.options(userList.selectedIndex).value;
	}
}

function CheckExistence(emailTo, value) 
{
    var strings = new Array();
    strings = emailTo.value.split(",");
    for (i=0; i<strings.length; i++) 
    {
        if (trim(strings[i], '') == trim(value, '')) 
        {
            return true;
        }
    }
    return false;

}

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"), "");
}
/******************************************************
/* The following are methods to handle multiple upload
/******************************************************/
var multipleUpload=false;

function GetTreeColor()
{
	var bkColor="";
	if(null != document.all("onetidNavBar"))
	{
		bkColor = document.all.onetidNavBar.currentStyle.backgroundColor;
	}

	if(bkColor=="")
	{
		numStyleSheets = document.styleSheets.length;
		for(i=numStyleSheets-1; i>=0; i--)
		{
			numRules = document.styleSheets(i).rules.length;
			for(ruleIndex=numRules-1; ruleIndex>=0; ruleIndex--)
			{
			if(document.styleSheets[i].rules.item(ruleIndex).selectorText==".ms-uploadcontrol")
				uploadRule = document.styleSheets[i].rules.item(ruleIndex);
			}
		}
		if(uploadRule)
			bkColor = uploadRule.style.backgroundColor;
	}
	return (bkColor);
}
					
function EnsureUploadCtl()
{
	return browseris.ie5up && !browseris.mac && null != document.getElementById("idUploadCtl");
}

function SetupMultipleUpload()
{
	if (EnsureUploadCtl())
	{
		treeColor = GetTreeColor();
		document.all.idUploadCtl.SetTreeViewColor(treeColor);
	}
}	

function SetOverwriteExistingFiles(checkBoxId)
{
    var putopts = document.getElementById('putopts');
    var overwriteMultipleFiles = document.getElementById(checkBoxId);
    
    putopts.value = overwriteMultipleFiles.checked ? "true" : "false";
}

/***********************************************************************************************
/* The variables and methods to keep track and validate the recurrence field in the events list
/***********************************************************************************************/
var overwriteFileProperties = true;

function ValidateWAForm()
{
	return (typeof(ValidateRecurrenceField) != 'function' || ValidateRecurrenceField());	
}


function DoValidateRecurrenceField(isRepeatingEventCBID, 
								startDateDatePicker, 
								endDateDatePicker, 
								endByRBID,
								endAfterOccurencesRBID,
								numberOfOccurrencesTBID,
								recurrenceTypeRBLID, 
								dailyPatternOneRBID,
								dailyPatternOneDayTBID,
								weeklyPatternWeekFrequencyTBID,
								weeklyPatternDaysCBLID,
								monthlyPatternOneRBID,
								monthlyPatternOneDayTBID, 
								monthlyPatternOneMonthFrequencyTBID, 
								monthlyPatternTwoRBID, 
								monthlyPatternTwoMonthFrequencyTBID,
								yearlyPatternOneRBID, 
								yearlyPatternOneMonthDDLID, 
								yearlyPatternOneDayTBID)
{
	var isRepeatingEventCB = document.getElementById(isRepeatingEventCBID);
				
	if (isRepeatingEventCB == null || !isRepeatingEventCB.checked)
	{
		return true;
	}

	var dailyRecurrenceRB = document.getElementById(recurrenceTypeRBLID + '_0');
	var weeklyRecurrenceRB = document.getElementById(recurrenceTypeRBLID + '_1');
	var monthlyRecurrenceRB = document.getElementById(recurrenceTypeRBLID + '_2');
	var yearlyRecurrenceRB = document.getElementById(recurrenceTypeRBLID + '_3');
	
	if (dailyRecurrenceRB.checked)
	{
		var dailyPatternOneRB = document.getElementById(dailyPatternOneRBID);
		
		if (dailyPatternOneRB.checked)
		{
			if (!VerifyFieldValueRange(dailyPatternOneDayTBID, 
								1, 
								255, 
								'The number of days between recurrences of this event must be between 1 and 255',
								'The number of days between recurrences of this event must be between 1 and 255'))
			{
				return false;
			}
		}
	}
	else if (weeklyRecurrenceRB.checked)
	{
		if (!VerifyFieldValueRange(weeklyPatternWeekFrequencyTBID, 
							1, 
							255, 
							'The number of weeks between recurrences of this event must be between 1 and 255',
							'The number of weeks between recurrences of this event must be between 1 and 255'))
		{
			return false;
		}

		if ((!document.getElementById(weeklyPatternDaysCBLID+'_0').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_1').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_2').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_3').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_4').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_5').checked) &&
			(!document.getElementById(weeklyPatternDaysCBLID+'_6').checked))
		{
			alert('You must specify a non-blank value for the day(s) of the week on which the event occurs.');
			document.getElementById(weeklyPatternDaysCBLID+'_0').focus();
			return false;
		}
	}
	else if (monthlyRecurrenceRB.checked)
	{
		var monthlyPatternOneRB = document.getElementById(monthlyPatternOneRBID);
		
		if (monthlyPatternOneRB.checked)
		{
			if (!VerifyFieldValueRange(monthlyPatternOneDayTBID, 
								1, 
								31, 
								'The date each month that this event occurs must be between 1 and 31',
								'The date each month that this event occurs must be between 1 and 31'))
			{
				return false;
			}
			
			if (!VerifyFieldValueRange(monthlyPatternOneMonthFrequencyTBID, 
								1, 
								12, 
								'The number of months between recurrences must be between 1 and 12.',
								'The number of months between recurrences must be between 1 and 12.'))
			{
				return false;
			}
		}
		else
		{
			if (!VerifyFieldValueRange(monthlyPatternTwoMonthFrequencyTBID, 
								1, 
								12, 
								'The number of months between recurrences must be between 1 and 12.',
								'The number of months between recurrences must be between 1 and 12.'))
			{
				return false;
			}			
		}
	}
	else if (yearlyRecurrenceRB.checked)
	{
		var yearlyPatternOneRB = document.getElementById(yearlyPatternOneRBID);
		
		if (yearlyPatternOneRB.checked)
		{
			var maxValue = 31;
			
			var selectedMonth = document.getElementById(yearlyPatternOneMonthDDLID).value;
			
			if (selectedMonth == 2)
			{
				maxValue = 29;
			}
			else if (selectedMonth == 4 ||
					 selectedMonth == 6 ||
					 selectedMonth == 9 ||
					 selectedMonth == 11)
			{
				maxValue = 30;
			}
			
			if (!VerifyFieldValueRange(yearlyPatternOneDayTBID, 
							1, 
							maxValue, 
							'The day of the selected month must be between 1 and ' + maxValue,
							'The day of the selected month must be between 1 and ' + maxValue))
			{
				return false;
			}		 
		}
	}
	
	
	// Make sure the number of occurences is filled in
	var endAfterOccurencesRB = document.getElementById(endAfterOccurencesRBID);	
	
	if (endAfterOccurencesRB.checked)
	{
		if (!VerifyFieldValueRange(numberOfOccurrencesTBID, 
							1, 
							999, 
							'The number of times this event recurs must be between 1 and 999.',
							'The number of times this event recurs must be between 1 and 999.'))
		{
			return false;
		}
	}				
	
	// Make sure the start date is before the end date	
	var endByRB = document.getElementById(endByRBID);					
		
	if (endByRB.checked)
	{			
		var startDateVal = startDateDatePicker.GetDate();
		
		if (startDateVal.getYear() == 1)
		{
			alert('Please specify the start date for the event');
			return false;
		}
		
		var endDateVal = endDateDatePicker.GetDate();

		if (endDateVal.getYear() == 1)
		{
			alert('Please specify the end date for the event when you select the "End by" option');
			return false;
		}									
		
		if (startDateVal > endDateVal)
		{		
			alert('The start date and time are after the end date and time');
			return false;
		}			
	}
		
	return true;	
}

function VerifyFieldValueRange(ctrlId, minValue, maxValue, emptyValueMsg, rangeErrorMsg)
{
	var ctrlToValidate = document.getElementById(ctrlId);
	var valueToValidate = ctrlToValidate.value;
	
	var isRecurrenceFieldValid = true;
	
	var trimmedVal = null;
	
	if (valueToValidate != null)
	{
		trimmedVal = TrimWhiteSpaces(valueToValidate);	
	}
	
	if (trimmedVal == null || trimmedVal.length == 0)
	{
		alert(emptyValueMsg);
		isRecurrenceFieldValid = false;
	}
	else
	{
		var intVal = parseInt(trimmedVal);
		
		if (!IsNumeric(trimmedVal) || intVal < minValue || intVal > maxValue)
		{
			alert(rangeErrorMsg);
			isRecurrenceFieldValid = false;
		}		
	}
			
	if (!isRecurrenceFieldValid)
	{
		ctrlToValidate.focus();
	}	
	
	return isRecurrenceFieldValid;
}

function IsNumeric(sText)
{
   var validChars = "0123456789";
   var isNumber = true;
   var c;
 
   for (i = 0; i < sText.length && isNumber == true; i++) 
   { 
      c = sText.charAt(i); 
      if (validChars.indexOf(c) == -1) 
      {
         isNumber = false;
      }
   }
   
   return isNumber;   
}

/**************************************************************
/* The function to set the focus to the first input on the form
/**************************************************************/
function SetFirstWAFocusRichText(sender, args)
{
   window.setTimeout(function() {sender.setFocus();}, 1000);
}

function SetFirstWAFocusChoice(controlID)
{
    var firstInput = eval(controlID);
    inputID = firstInput.InputID;
    var comboInput = document.getElementById(inputID);
    SetFocus(comboInput, true);
}

function SetFirstWAFocusDateTime(controlID)
{
    var firstInput = eval(controlID);
    var comboInput = firstInput.GetTextBox();
    SetFocus(comboInput, true);
}

function SetFirstWAFocus(controlID)
{
    var firstInput = document.getElementById(controlID);
    SetFocus(firstInput, false);
}

var controlLostInputForFirstTime = true;

function SetFocus(ctrl, text) 
{
    if (ctrl != null && ctrl.focus != null)
    {
        try {
            ctrl.focus();
            if (text == true) {
                if (ctrl.createTextRange)
                {
                    var range = ctrl.createTextRange();
                    range.moveStart("character", 0);
                    range.moveEnd("character", ctrl.value.length);
                    range.select();
                }
                else if (ctrl.setSelectionRange)
                {
                    ctrl.setSelectionRange(0, ctrl.value.length);
                }
            }
        }
        catch (err) {
        }				   
    }
}

/**************************************************************
/* The function to show and hide the refresh form message
/**************************************************************/
function RefreshFormStart(ajaxPanel, eventArgs)
{	
	SetRefreshMessageVisibility(true);
}

function RefreshFormEnd(ajaxPanel, eventArgs)
{
	SetRefreshMessageVisibility(false);
}

/********************************************************************
/* The function to add the items to lookup field with multiple values
/********************************************************************/
function AddItemToLookupValues(lookupOptionsID, lookupValuesID, hiddenLookupValuesID, allowMultipleValues)
{
	var lookupOptions = document.getElementById(lookupOptionsID);
	var lookupValues = document.getElementById(lookupValuesID);
	var selectedIndex = lookupOptions.selectedIndex;
	var selectedValue = lookupOptions.options[selectedIndex].value;

	var i = 0;
	
	if (!allowMultipleValues)
	{
		if (lookupValues.options.length > 0)
		{
			alert('You are only allowed to enter one item');
			return;
		}
	}
	
	for (i=0; i<lookupValues.options.length; i++)
	{
		if (lookupValues.options(i).value == selectedValue)
		{
			alert('This item was already added');
			return;
		}
	}
	
	var newOption = document.createElement("OPTION");
	lookupValues.options.add(newOption);
	newOption.text = lookupOptions.options[selectedIndex].text;
	newOption.value = selectedValue;	
	
	SetLookupValuesToHiddenField(lookupValues, hiddenLookupValuesID);
}

function DeleteLookupValues(lookupValuesID, hiddenLookupValuesID)
{
	var lookupValues = document.getElementById(lookupValuesID);
	
	var i;
	
	for (i = lookupValues.options.length-1; i>=0; i--)
	{
		if (lookupValues.options[i].selected)
		{
			lookupValues.remove(lookupValues.options[i].index);
		}
	}
	
	SetLookupValuesToHiddenField(lookupValues, hiddenLookupValuesID);
}

function SetLookupValuesToHiddenField(lookupValues, hiddenLookupValuesID)
{
	var hiddenLookupValues = document.getElementById(hiddenLookupValuesID);
	
	var value = '';
	
	var i = 0;
	
	for (i=0; i<lookupValues.options.length; i++)
	{
		if (value.length > 0)
		{
			value = value + ',';
		}
		value = value + lookupValues.options(i).value;
	}
		
	hiddenLookupValues.value = value;
}

function FreezeScreen(FreezePaneOn) {
    var myWidth = 0, myHeight = 0;
    if (typeof (window.innerWidth) == 'number') {
        //Non-IE
        myWidth = window.innerWidth;
        myHeight = window.innerHeight;
    } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
        //IE 6+ in 'standards compliant mode'
        myWidth = document.documentElement.clientWidth;
        myHeight = document.documentElement.clientHeight;
    } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
        //IE 4 compatible
        myWidth = document.body.clientWidth;
        myHeight = document.body.clientHeight;
    }

    scroll(0, 0);
    var freezePane = document.getElementById(FreezePaneOn);
    if (freezePane != null) {
        var parentElement = freezePane;

        // Reparent the Freeze screen on the document body to 
        // avoid relative or absolute re-positioning of parent frames in SP2010.
        while (true) {
            parentElement = parentElement.parentNode;
            if (parentElement == null || parentElement.nodeType == 1) break;
        }
        if (parentElement != null) {
            parentElement.removeChild(freezePane);
            document.body.appendChild(freezePane);

            freezePane.style.position = "absolute";
            freezePane.style.visibility = 'visible';
            freezePane.style.display = 'block';
            freezePane.style.width = myWidth + "px";
            freezePane.style.height = myHeight +"px";            
            freezePane.style.top = '0px';
            freezePane.style.left = '0px';
        }
    }
}
