//-------------------------------------

//var m_bShowDebug = false;
var m_bShowDebug = true;

//-------------------------------------
// Debug Print function

var DBG =
{
	Print : function(_Text)
	{
		try
		{
			if (m_bShowDebug == true)
			{
				Print(_Text);
			}
		}
		catch (err)
		{
		}
	}
}

//-------------------------------------

function Print(_Text)
{
	try
	{
		_Text = GetDateTime() + ' ' + _Text;

		if (!window.dbgwnd)
		{
			window.dbgwnd = window.open("","debug","status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=1,scrollbars=1,width=600,height=250");
			window.dbgwnd.document.write('<html><head></head><body style="background-color:black"><div id="main" style="color:green;font-size:12px;font-family:Courier New;"></div></body></html>');
		}

		var Console = window.dbgwnd.document.getElementById("main");

		if (Console.innerHTML != "")
		{
			Console.innerHTML = _Text + "<br/>" + Console.innerHTML;
		}
		else
		{
			Console.innerHTML = _Text;
		}
	}
	catch (err)
	{
	}
}

//-------------------------------------

function GetDateTime()
{
	try
	{
		var DT = new Date();
		return (Int2String(DT.getDate(),2) + '/' + Int2String(DT.getMonth() + 1,2) + '/' + DT.getFullYear() + ' ' + Int2String(DT.getHours(),2) + ':' + Int2String(DT.getMinutes(),2) + ':' + Int2String(DT.getSeconds(),2) + '.' + parseInt(((DT.getMilliseconds() % 1000) / 100) % 10));
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (null);
}

//-------------------------------------

function Int2String(_Data,_Pad)
{
	try
	{
		_Data = _Data.toString();
		return (Array(_Pad + 1 - _Data.length).join('0') + _Data);
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (null);
}

//-------------------------------------

function bIsStringValid(_sData)
{
	try
	{
		if ((_sData == null) || (_sData == ''))
		{
			return (false);
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (true);
}

//-------------------------------------
// Very basic check

function bIsEmailAddressValid(_sData)
{
	try
	{
		var asSplit = _sData.split('@',3);
		if (asSplit.length == 2)
		{
			if (bIsStringValid(asSplit[0]) == false)
			{
				return (false);
			}
			if (bIsStringValid(asSplit[1]) == false)
			{
				return (false);
			}
			return (true);
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------
// Very basic check

function bIsTelephoneNumberValid(_sData)
{
	try
	{
		if (_sData.length >= 10)
		{
			for (var i=0;i < _sData.length;i++)
			{
				var sChar = _sData.charAt(i);
				if (isNaN(parseInt(sChar,10)) == true)
				{
					if ((sChar != ' ') && (sChar != '+'))
					{
						return (false);
					}
				}
			}
			return (true);
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------

function bIsEnqiryValid(_sData)
{
	try
	{
		for (var i=0;i < _sData.length;i++)
		{
			var sChar = _sData.charAt(i);
			if (sChar != ' ')
			{
				return (true);
			}
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------

function ValidateSalesForceForm(_this,_DDName)
{
/*
	DBG.Print('first_name = ' + _this.first_name.value);
	DBG.Print('last_name = ' + _this.last_name.value);
	DBG.Print('email = ' + _this.email.value);
	DBG.Print('phone = ' + _this.phone.value);

	var element = document.getElementById(_DDName);
	DBG.Print('region = ' + element.options[element.selectedIndex].value);

	DBG.Print('enquiry = ' + _this.description.value);
*/

	try
	{
		var sErrorMsg = "";

		var DDElement = document.getElementById(_DDName);
		
		if (bIsStringValid(_this.first_name.value) == false)
		{
			sErrorMsg = "Please enter a First Name.";
		}
		else if (bIsStringValid(_this.last_name.value) == false)
		{
			sErrorMsg = "Please enter a Last Name.";
		}
		else if (bIsStringValid(_this.email.value) == false)
		{
			sErrorMsg = "Please enter an Email Address.";
		}
		else if (bIsEmailAddressValid(_this.email.value) == false)
		{
			sErrorMsg = "Please enter a valid Email Address.";
		}
		else if (bIsStringValid(_this.phone.value) == false)
		{
			sErrorMsg = "Please enter a Telephone Number.";
		}
		else if (bIsTelephoneNumberValid(_this.phone.value) == false)
		{
			sErrorMsg = "Please enter a valid Telephone Number.";
		}
		else if (DDElement.options[DDElement.selectedIndex].value == "Region")
		{
			sErrorMsg = "Please select a Region.";
		}
		else if (bIsStringValid(_this.description.value) == false)
		{
			sErrorMsg = "Please enter an Enqiry.";
		}
		else if (bIsEnqiryValid(_this.description.value) == false)
		{
			sErrorMsg = "Please enter a valid Enqiry.";
		}

		if (bIsStringValid(sErrorMsg) == true)
		{
			alert(sErrorMsg);
			return (false);
		}
		return (true);
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------

function ValidateFranchiseForm(_this)
{
/*
	DBG.Print('name = ' + _this.name.value);
	DBG.Print('email = ' + _this.email.value);
	DBG.Print('enquiry = ' + _this.enquiry.value);
*/

	try
	{
		var sErrorMsg = "";

		if (bIsStringValid(_this.name.value) == false)
		{
			sErrorMsg = "Please enter a  Name.";
		}
		else if (bIsStringValid(_this.email.value) == false)
		{
			sErrorMsg = "Please enter an Email Address.";
		}
		else if (bIsEmailAddressValid(_this.email.value) == false)
		{
			sErrorMsg = "Please enter a valid Email Address.";
		}
		else if (bIsStringValid(_this.enquiry.value) == false)
		{
			sErrorMsg = "Please enter an Enqiry.";
		}
		else if (bIsEnqiryValid(_this.enquiry.value) == false)
		{
			sErrorMsg = "Please enter a valid Enqiry.";
		}

		if (bIsStringValid(sErrorMsg) == true)
		{
			alert(sErrorMsg);
			return (false);
		}
		return (true);
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------
//-------------------------------------

function UTF8Encode(_sData)
{
	var sUTF = "";

	try
	{
		var StartIndex = 0;
		var EndIndex = 0;

		_sData += '';

		for (var n = 0; n < _sData.length; n++)
		{
			var sEncoded = null;

			var c1 = _sData.charCodeAt(n);
			if (c1 < 128)
			{
				EndIndex++;
			}
			else if ((c1 > 127) && (c1 < 2048))
			{
				sEncoded = (String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128));
			}
			else
			{
				sEncoded = (String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128));
			}

			if (sEncoded !== null)
			{
				if (EndIndex > StartIndex)
				{
					sUTF += _sData.slice(StartIndex,EndIndex);
				}
				sUTF += sEncoded;
				StartIndex = (n + 1);
				EndIndex = (n + 1);
			}
		} 

		if (EndIndex > StartIndex)
		{
			sUTF += _sData.slice(StartIndex,_sData.length);
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (sUTF);
} 

//-------------------------------------

function UTF8Decode(_sUTF)
{
	var asData = [];

	try
	{
		var i = 0,
		ac = 0,
		c1 = 0,
		c2 = 0,
		c3 = 0;
 
		_sUTF += '';
	 
		while (i < _sUTF.length)
		{
			c1 = _sUTF.charCodeAt(i);
			if (c1 < 128)
			{
				asData[ac++] = String.fromCharCode(c1);
				i++;
			}
			else if ((c1 > 191) && (c1 < 224))
			{
				c2 = _sUTF.charCodeAt(i + 1);
				asData[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else
			{
				c2 = _sUTF.charCodeAt(i + 1);
				c3 = _sUTF.charCodeAt(i + 2);
				asData[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		} 
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (asData.join(''));
} 

//-------------------------------------

function Base64Encode(_sData)
{
	var sEncoded = "";

	try
	{
		if (!_sData)
		{
			return (_sData);
		}

		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
		
		var i = 0,
			ac = 0,
			asData = [];

		_sData = UTF8Encode(_sData + ''); 

		// pack three octets into four hextets
 		do
		{
			var o1 = _sData.charCodeAt(i++);
			var o2 = _sData.charCodeAt(i++);
			var o3 = _sData.charCodeAt(i++); 
			var bits = ((o1 << 16) | (o2 << 8) | o3);
	 
			var h1 = ((bits >> 18) & 0x3f);
			var h2 = ((bits >> 12) & 0x3f);
			var h3 = ((bits >> 6) & 0x3f);
			var h4 = (bits & 0x3f);
	 
			// use hextets to index into b64, and append result to encoded string
			asData[ac++] = (b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4));
		}
		while (i < _sData.length);
	 
		sEncoded = asData.join('');
	 
		switch (_sData.length % 3)
		{
			case 1:
			{
				sEncoded = sEncoded.slice(0, -2) + '==';
				break;
				
			}
			case 2:
			{
				sEncoded = sEncoded.slice(0, -1) + '=';
				break;
			}
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (sEncoded);
} 

//-------------------------------------

function Base64Decode(_sData)
{
	var sDecoded = "";

	try
	{
		if (!_sData)
		{
			return (_sData);
		}

		var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

		var i = 0,
			ac = 0,
			asData = [];
	 
		_sData += '';

		// unpack four hextets into three octets using index points in b64
		do
		{
			var h1 = b64.indexOf(_sData.charAt(i++));
			var h2 = b64.indexOf(_sData.charAt(i++));
			var h3 = b64.indexOf(_sData.charAt(i++));
			var h4 = b64.indexOf(_sData.charAt(i++));
			var bits = ((h1 << 18) | (h2 << 12) | (h3 << 6) | h4);

			var o1 = ((bits >> 16) & 0xff);
			var o2 = ((bits >> 8) & 0xff);
			var o3 = (bits & 0xff);

			if (h3 == 64)
			{
				asData[ac++] = String.fromCharCode(o1);
			}
			else if (h4 == 64)
			{
				asData[ac++] = String.fromCharCode(o1, o2);
			}
			else
			{
				asData[ac++] = String.fromCharCode(o1, o2, o3);
			}
		}
		while (i < _sData.length);

		sDecoded = asData.join('');
		sDecoded = UTF8Decode(sDecoded);
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (sDecoded);
} 

//-------------------------------------
//-------------------------------------

function IsDateValid(_Date)
{
	try
	{
		var TodaysDate = new Date();
		if (_Date >= TodaysDate)
		{
			return (true);
		}
	} 
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------
/*
function bIsStringAlphanumeric(_sData)
{
	try
	{
		if (bIsStringValid(_sData))
		{
			var RegEx = /^[a-z0-9 ]+$/i;
			if (RegEx.test(_sData))
			{
				return (true);
			}
		}
	}
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}
*/
//-------------------------------------

function IsPriceFormatValid(_sPrice)
{
	try
	{
		var RegEx = /^\d+(\.\d\d)?$/;
		if (RegEx.test(_sPrice))
		{
			return (true);
		}
	} 
	catch (err)
	{
		DBG.Print(err);
	}
	return (false);
}

//-------------------------------------
//-------------------------------------

