/** QuoteTool.js - JavaScript functions related to QuoteTool application */

function pullDealers(formName, dealerMenuId)
{
	if ( document[formName] )
	{
		var formElem       = document[formName];
		var requiredFields = new Array();
		
		for ( var i = 2; i < arguments.length; ++i )
		{
			requiredFields.push(arguments[i]);
		}

		if ( verifyFields(formElem, requiredFields) )
		{
			disableFields(dealerMenuId);

			var url  = selectorURL();
			var args = assembleArgs(requiredFields, formElem);
			$('#'+dealerMenuId).load(
				selectorURL(),
				args
			);
		}
	}

	return false;
}

function disableFields(menuId)
{
	$('#'+menuId).children('select').attr('disabled', 'disabled');
	$('#'+menuId).children('option').attr('disabled', 'disabled');
}

function popDealers(currFormName, popupURL, width, height, errMsg)
{
	if ( document[currFormName] )
	{
		var formElem       = document[currFormName];
		var requiredFields = new Array(arguments.length-5);
		
		for ( var i = 5; i < arguments.length; ++i )
		{
			requiredFields[i-5] = arguments[i];
		}

		if ( verifyFields(formElem, requiredFields) )
		{
			var args = assembleArgs(requiredFields, formElem, 1);
			
			for ( var name in args )
			{
				popupURL += name + '=' + args[name] + '&';
			}

			WindowPopup(popupURL, 'width='+width+',height='+height);
		}
		else
		{
			alert(errMsg);
		}
	}
}

function selectorURL() { return location.href; }

function assembleArgs(fields, formElem, escapeArg)
{
	var args = new Object();

	for ( var i = 0; i < fields.length; ++i )
	{
		var fieldname   = fields[i];
		var elem        = formElem[fieldname];
		var value       = fieldname == 'country' ? elem['value'].toUpperCase() : elem['value'];
		args[fieldname] = escapeArg ? escape(value) : value;
	}

	args['page'] = 11;

	return args;
}

function verifyFields(formElem, requiredFields)
{
	var hasFields = true;

	for ( var i = 0; i < requiredFields.length; ++i )
	{
		if ( formElem[requiredFields[i]] )
		{
			var fieldElem = formElem[requiredFields[i]];

			switch ( fieldElem.type )
			{
				case 'select-one'      :
				case 'select-multiple' : hasFields = hasFields && hasSelectSelection(fieldElem);
				                         break;
				case 'hidden'   :
				case 'text'     :
				case 'textarea' : hasFields = hasFields && (fieldElem['value'] != '');
				                  break;
				case 'radio' : hasFields = hasFields && hasRadioSelection(fieldElem);
				               break;
				default: hasFields = false;
				         break;
			}
		}
	}

	return hasFields;
}

function hasSelectSelection(elem)
{
    var hasSelection = false;

    if ( elem.options && elem.options[elem.selectedIndex] )
	{
        var selection = elem.options[elem.selectedIndex];

		hasSelection = selection['value'] != '';
	}

	return hasSelection;
}

function hasRadioSelection(fieldElem)
{
	var hasChoice = false;
	
	for ( var i = 0; i < fieldElem.length; ++i )
	{
		if ( fieldElem[i].checked )
		{
			hasChoice = true;
			
			break;
		}
	}
	
	return hasChoice;
}

function setSelectorLabel(elemId, text)
{
	if ( document.getElementById )
	{
		var elemNode = document.getElementById(elemId);
	
		if ( elemNode )
		{
			elemNode.innerHTML = text;
			elemNode.style.display = text ? 'block' : 'none';
		}
	}
}

function setParentValues(formObj, parentFormObj, menuElemId, labelId)
{
	if ( formObj[menuElemId] )
	{
		var menuElem   = formObj[menuElemId];
		var labelValue = '';
		
		if ( menuElem.type == 'select-one' && menuElem.selectedIndex > 0 )
		{
			var optionElem = menuElem.options[menuElem.selectedIndex];
			
			(parentFormObj[menuElemId])['value'] = optionElem['value'];
			
			labelValue = menuElem.options[menuElem.selectedIndex].text;
		}
		else if ( menuElem.type == 'checkbox' && menuElem.checked )
		{
			(parentFormObj[menuElemId])['value'] = menuElem['value'];
			
			if ( formObj[labelId] )
			{
				var labelElem  = formObj[labelId];
	
				labelValue = labelElem['value'];
			}
		}
		
		opener.setSelectorLabel(labelId, labelValue);
	}
}

function clearSelctorValues(formObj, menuId, labelId)
{
	if ( formObj[menuId] )
	{
		var menuElem = formObj[menuId];
		
		menuElem['value'] = '';
		
		setSelectorLabel(labelId, '');
	}
}


/**
 *  Reports error messages back to us via Image.src
 */
function reportError(errMsg)
{
	var msgImg = new Image();
	
	msgImg.src = errMsg.replace(/[\?\s&]+/g, "_");
}

