/* JSLib */
function JSLib(){}

/* JSLib.DEBUG */
JSLib.DEBUG=function(){};
JSLib.DEBUG.EnumProperties=function(obj)
{
	var arr = new Array();
	var i;
	for( i in obj )
	{
		arr.push( i );
	}
	
	arr.sort();
	var div = document.createElement( "div" )
	div.innerHTML =  arr.join( "<br>" );
	div.style.position = 'absolute';
	div.style.zIndex = 1000;
	div.style.top = 50;
	div.style.left = 50;
	div.style.backgroundColor = '#cecece';
	div.style.border = 'solid 1px black';
	div.style.overflow = 'scroll';
	div.style.width = 300;
	div.style.height = 500;
	document.body.appendChild( div );
}

/* JSLib.BROWSER */
JSLib.BROWSER=function(){};
JSLib.BROWSER.GetObject=function(elementID)
{
		if (document.all)
		{
			return document.all(elementID);
		}
		else
		{
			return document.getElementById(elementID);
		}
}

JSLib.BROWSER.ChangeText=function(element, text)
{
	if(document.all)
	{
		JSLib.BROWSER.GetObject(element).innerText = text;
	}
	else
	{
		JSLib.BROWSER.GetObject(element).textContent = text;
	}
}

/* JSLib.POPUP */
JSLib.POPUP=function(){};
JSLib.POPUP.Window=function(url,width,height,name)
{
	var l = (screen.width)?(screen.width-width)/2:100;
	var t = (screen.height)?(screen.height-height)/2:100;
	window.open(url,name,'height='+height+',width='+width+',top='+t+',left='+l+',scrollbars=no,modal=yes');
}
JSLib.POPUP.WindowResizable=function(url,width,height,name)
{
	var l = (screen.width)?(screen.width-width)/2:100;
	var t = (screen.height)?(screen.height-height)/2:100;
	window.open(url,name,'height='+height+',width='+width+',top='+t+',left='+l+',scrollbars=no,modal=yes,resizable=yes');
}

/* JSLib.FLASH */
JSLib.FLASH=function(){};
JSLib.FLASH.RunFlContent=function()
{
	JSLib.FLASH.AddExtension(arguments, "movie", ".swf");
	JSLib.FLASH.AddExtension(arguments, "src", ".swf");

	var codebase = JSLib.FLASH.GetCodebase("http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=", "7,0,0,0", arguments);
	
	JSLib.FLASH.GenerateObj(	"JSLib.FLASH.RunFlContent()",
								false,
								"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
								codebase,
								"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash",
								"application/x-shockwave-flash",
								arguments
							);
}

JSLib.FLASH.RunFlContentX=function()
{
	JSLib.FLASH.AddExtension(arguments, "movie", ".swf");
	JSLib.FLASH.AddExtension(arguments, "src", ".swf");

	var codebase = JSLib.FLASH.GetCodebase("http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=", "7,0,0,0", arguments);
	
	JSLib.FLASH.GenerateObj(	"JSLib.FLASH.RunFlContentX()",
								true,
								"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
								codebase,
								"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash",
								"application/x-shockwave-flash",
								arguments
							);	
}

JSLib.FLASH.RunSWContent=function()
{
	JSLib.FLASH.AddExtension(arguments, "src", ".dcr");

	var codebase = JSLib.FLASH.GetCodebase("http://fpdownload.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=", "8,5,0,0", arguments);
	
	JSLib.FLASH.GenerateObj(	"JSLib.FLASH.RunSWContent()",
								false,
								"clsid:166B1BCA-3F9C-11CF-8075-444553540000",
								codebase,
								"http://www.macromedia.com/shockwave/download/",
								null,
								arguments
							);
}
	
JSLib.FLASH.RunSWContentX=function()
{
	JSLib.FLASH.AddExtension(arguments, "src", ".dcr");
	
	var codebase = JSLib.FLASH.GetCodebase("http://fpdownload.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=", "8,5,0,0", arguments);
	
	JSLib.FLASH.GenerateObj(	"JSLib.FLASH.RunSWContentX()",
								true,
								"clsid:166B1BCA-3F9C-11CF-8075-444553540000",
								codebase,
								"http://www.macromedia.com/shockwave/download/",
								null,
								arguments
							);
}

JSLib.FLASH.AddExtension=function(args, paramName, extension)
{
	var currArg, paramVal, queryStr, endStr;
	
	for (var i=0; i < args.length; i=i+2)
	{
		currArg = args[i].toLowerCase();
		
		if (currArg == paramName.toLowerCase() && args.length > i+1)
		{
			paramVal = args[i+1];
			queryStr = "";
			
			var indQueryStr = args[i+1].indexOf('?');
			
			if (indQueryStr != -1)
			{
				paramVal = args[i+1].substring(0, indQueryStr);
				queryStr = args[i+1].substr(indQueryStr);
			}
			
			endStr = "";
			
			if (paramVal.length > extension.length)
			{
				endStr = paramVal.substr(paramVal.length - extension.length);
			}
			
			if (endStr.toLowerCase() != extension.toLowerCase())
			{
				args[i+1] = paramVal + extension + queryStr;
			}
		}
	}
}

JSLib.FLASH.GetCodebase=function(baseURL, defaultVersion, args)
{
	var codebase = baseURL + defaultVersion;
	
	for (var i=0; i < args.length; i=i+2)
	{
		currArg = args[i].toLowerCase();    
		
		if (currArg == "codebase" && args.length > i+1)
		{
			if (args[i+1].indexOf("http://") == 0)
			{
				codebase = args[i+1];
			}
			else
			{
				codebase = baseURL + args[i+1];
			}
		}
	}
	
	return codebase;	
}

JSLib.FLASH.GenerateObj=function(callingFn, useXHTML, classid, codebase, pluginsPage, mimeType, args)
{
	if (!JSLib.FLASH.CheckArgs(args,callingFn))
	{
		return;
	}

	var tagStr = '';
	var currArg = '';
	var closer = (useXHTML) ? '/>' : '>';
	var srcFound = false;
	var embedStr = '<embed';
	var paramStr = '';
	var embedNameAttr = '';
	var objStr = '<object classid="' + classid + '" codebase="' + codebase + '"';
	var MSG_SrcRequired = "The %s function requires that a movie src be passed in as one of the arguments.";

	for (var i=0; i < args.length; i=i+2)
	{
		currArg = args[i].toLowerCase();    

		if (currArg == "src")
		{
			if (callingFn.indexOf("RunSW") != -1)
			{
				paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';
				embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
				srcFound = true;
			}
			else if (!srcFound)
			{
				paramStr += '<param name="movie" value="' + args[i+1] + '"' + closer + '\n'; 
				embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
				srcFound = true;
			}
		}
		else if (currArg == "movie")
		{
			if (!srcFound)
			{
				paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';
				embedStr += ' src="' + args[i+1] + '"';
				srcFound = true;
			}
		}
		else if (	currArg == "width" ||
					currArg == "height" ||
					currArg == "align" ||
					currArg == "vspace" ||
					currArg == "hspace" ||
					currArg == "class" ||
					currArg == "title" ||
					currArg == "accesskey" ||
					currArg == "tabindex"
				)
		{
		
			objStr += ' ' + args[i] + '="' + args[i+1] + '"';
			embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
		}
		else if (currArg == "id")
		{
			objStr += ' ' + args[i] + '="' + args[i+1] + '"';
			
			if (embedNameAttr == "")
			{
				embedNameAttr = ' name="' + args[i+1] + '"';
			}
		}
		else if (currArg == "name")
		{
			objStr += ' ' + args[i] + '="' + args[i+1] + '"';
			embedNameAttr = ' ' + args[i] + '="' + args[i+1] + '"';
		}
		else if (currArg == "codebase")
		{
		}
		else
		{
			paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';
			embedStr += ' ' + args[i] + '="' + args[i+1] + '"';
		}
	}
	
	if (!srcFound)
	{
		alert(JSLib.FLASH.Sprintf(MSG_SrcRequired,callingFn));
		return;
	}
	
	if (embedNameAttr)
	{
		embedStr += embedNameAttr;
	}
	
	if (pluginsPage)
	{
		embedStr += ' pluginspage="' + pluginsPage + '"';
	}
	
	if (mimeType)
	{
		embedStr += ' type="' + mimeType + '"';
	}
	
	objStr += '>\n';
	embedStr += '></embed>\n';
	
	tagStr = objStr + paramStr + embedStr + "</object>\n";
	
	document.write(tagStr);
}

JSLib.FLASH.Sprintf=function(str)
{
	for (var i=1; i < arguments.length; i++)
	{
		str = str.replace(/%s/,arguments[i]);
	}
	
	return str;
}

JSLib.FLASH.CheckArgs=function(args,callingFn)
{
	var retVal = true;
	var MSG_EvenArgs = 'The %s function requires an even number of arguments.' + '\nArguments should be in the form "atttributeName","attributeValue",...';
	
	if (parseFloat(args.length/2) != parseInt(args.length/2))
	{
		alert(sprintf(MSG_EvenArgs,callingFn));
		retVal = false;
	}
	
	return retVal;
}

/* JSLib.IMAGEMANIP */
JSLib.IMAGEMANIP=function(){};
JSLib.IMAGEMANIP.SwapImageForHyperlink=function(elementID, image)
{
	var object = JSLib.BROWSER.GetObject(elementID);
	
	object.firstChild.src = image;
}

/* JSLib.VALIDATOR */
JSLib.VALIDATOR=function(){};
JSLib.VALIDATOR.MultipleFieldsValidatorEvaluateIsValid=function(val)
{
    controltovalidateIDs = val.controlstovalidate.split(',');
    switch(val.type)
    {
		case 'TEXTBOX':
			switch (val.condition)
			{
				case 'OR':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						
						if (ValidatorTrim(ValidatorGetValue(controlID)) != '')
						{
							return true;
						} 
					}
					
					return false;
					
					break;
				case 'XOR':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						
						if (controltovalidateIDIndex == '0')
						{
							var previousResult = !(ValidatorTrim(ValidatorGetValue(controlID)) == '');
							continue;
						}
						
						var currentResult = !(ValidatorTrim(ValidatorGetValue(controlID)) == '');
						
						if (currentResult != previousResult)
						{
							return true;
						}
						
						previousResult != currentResult;
					}
					
					return false;
					
					break;
				case 'AND':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						
						if (ValidatorTrim(ValidatorGetValue(controlID)) == '')
						{
							return false;
						} 
					}
					
					return true;
					
					break;
			}
			
			break;
		case 'RADIOBUTTON':
			switch (val.condition)
			{
				case 'OR':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						var control = document.getElementById(controlID);
						
						if (control.checked != false)
						{
							return true;
						} 
					}
					
					return false;
					
					break;
				case 'XOR':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						var control = document.getElementById(controlID);
						
						if (controltovalidateIDIndex == '0')
						{
							var previousResult = !control.checked == false;
							continue;
						}
						
						var currentResult = !control.checked == false;
						
						if (currentResult != previousResult)
						{
							return true;
						}
						
						previousResult != currentResult;
					}
					
					return false;
					
					break;
				case 'AND':
					for(var controltovalidateIDIndex in controltovalidateIDs)
					{
						var controlID = controltovalidateIDs[controltovalidateIDIndex];
						var control = document.getElementById(controlID);
						
						if (control.checked == false)
						{
							return false;
						} 
					}
					
					return true;
					
					break;
			}
			
			break;
	}
	
    return false;
}

/* JSLib.MORTGAGE */
JSLib.MORTGAGE=function(){};
JSLib.MORTGAGE.CalculateMortgage=function(price, down, loan)
{
	var tbPrice = JSLib.BROWSER.GetObject(price);
	var tbDown = JSLib.BROWSER.GetObject(down);
	var tbLoan = JSLib.BROWSER.GetObject(loan);
	
	if (isNaN(tbPrice.value) || tbPrice.value < 0.00)
	{
		tbPrice.value = "0.00";
	}
	
	if (isNaN(tbDown.value) || tbDown.value < 0.00)
	{
		tbDown.value = "0.00";
	}
	
	if ((tbPrice.value == 0.00 && tbDown.value == 0.00) || tbPrice.value - tbDown.value < 0.00)
	{
		tbLoan.value = "0.00";
	}
	else
	{
		tbLoan.value = (tbPrice.value - tbDown.value).toFixed(2);
	}
}

JSLib.MORTGAGE.ValidateMortgage=function(price, down, interest, submit)
{
	var tbPrice = JSLib.BROWSER.GetObject(price);
	var tbDown = JSLib.BROWSER.GetObject(down);
	var tbInterest = JSLib.BROWSER.GetObject(interest);
	var btnSubmit = JSLib.BROWSER.GetObject(submit);
	
	if (parseFloat(tbPrice.value) - parseFloat(tbDown.value) > 0.0 && parseFloat(tbInterest.value) > 0.0)
	{
		btnSubmit.disabled = false;
	}
	else
	{
		btnSubmit.disabled = true;
	}
}

/* JSLib.IMAGES */
JSLib.IMAGES=function(){};
JSLib.IMAGES.PopupImageWindow=function(img)
{
    var html =  '<html><head><title></title></head>' +
                '<body style="margin:0px0px;text-align:center;">' +
                '<IMG SRC="' + img + '" BORDER="0" NAME="image" ' +
                'onload="window.resizeTo(document.image. width,(document.image.height))">' +
                '</body></html>';
    
    popup = window.open('','image','toolbar=0,location=0,directories=0,menuBar=0,scrollbars=0,resizable=0');
    popup.document.open();
    popup.document.write(html);
    popup.document.focus();
    popup.document.close();
} 
