﻿function SetCommand(commandType, commandName, commandArgument) 
{
  var controlCommandName = document.getElementById(commandType + "_CommandName");
  var controlCommandArgument = document.getElementById(commandType + "_CommandArgument");
  if (controlCommandName && controlCommandArgument)
  {
    controlCommandName.value = commandName;
    controlCommandArgument.value = commandArgument;
  }
}

function GetSynchronousJSONResponse(url, postData)
{
	var xmlhttp = null;
	if (window.XMLHttpRequest)
		xmlhttp = new XMLHttpRequest();
	else if (window.ActiveXObject)
	{
		if (new ActiveXObject("Microsoft.XMLHTTP"))
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		else
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	
	// To be ensure non-cached version of response
	url = url + "?rnd=" + Math.random();

	xmlhttp.open("POST", url, false); // False means synchronous
	xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
	xmlhttp.send(postData);
	
	var responseText = xmlhttp.responseText;
	
	return responseText;
}

// Declaring valid date character, minimum year and maximum year
var dtCh = "-";
var minYear = 1900;
var maxYear = 2100;

function isInteger(s)
{
	var i;
	
	for (i = 0; i < s.length; i++)
	{
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	
	// All characters are numbers.
	return true;
}

function stripCharsInBag(s, bag)
{
	var i;
	var returnString = "";
	
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	
	return returnString;
}

function daysInFebruary(year)
{
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}

function DaysArray(n)
{
	for (var i = 1; i <= n; i++)
	{
		this[i] = 31
		if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
		if (i == 2) { this[i] = 29 }
	}
	
	return this
}

function isDate(dtStr)
{
	var daysInMonth = DaysArray(12)
	var pos1 = dtStr.indexOf(dtCh)
	var pos2 = dtStr.indexOf(dtCh, pos1 + 1)
	var strDay = dtStr.substring(0, pos1)
	var strMonth = dtStr.substring(pos1 + 1, pos2)
	var strYear = dtStr.substring(pos2 + 1)
	
	strYr = strYear
	
	if (strDay.charAt(0) == "0" && strDay.length > 1) strDay = strDay.substring(1)
	if (strMonth.charAt(0) == "0" && strMonth.length > 1) strMonth = strMonth.substring(1)
	
	for (var i = 1; i <= 3; i++)
		if (strYr.charAt(0) == "0" && strYr.length > 1) strYr = strYr.substring(1)
	
	month = parseInt(strMonth)
	day = parseInt(strDay)
	year = parseInt(strYr)
	
	if (pos1 == -1 || pos2 == -1)
		return false
	
	if (strMonth.length < 1 || month < 1 || month > 12)
		return false

	if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month])
		return false

	if (strYear.length != 4 || year == 0 || year < minYear || year > maxYear)
		return false

	if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false)
		return false

	return true
}
