
//CONTROL TYPE CONSTANTS
var CONTROL_TYPE_TEXTBOX = "text";
var CONTROL_TYPE_COMBO = "select-one";
var CONTROL_TYPE_LIST = "select-multiple";
var CONTROL_TYPE_TEXTAREA = "textarea";
var CONTROL_TYPE_PASSWORD = "password";
var CONTROL_TYPE_RADIO = "radio";
var CONTROL_TYPE_CHECKBOX = "checkbox";
var CONTROL_TYPE_BUTTON = "button";
var CONTROL_TYPE_FILE = "file";
var CONTROL_TYPE_HIDDEN = "hidden";

var blnIsAppletObj = false;

function comboTest(objDoc, objForm, objCombo)
{
	alert("hello");
	var oOption = new Option("x", "xx");
	objDoc.Campaign.Country.options[0] = oOption;
}

function bindObject (objForm , objData, blnToUI, blnIsApplet)
{
	var strElementName;

	if (objData.innerType == EB_APPLET_OBJECT)
	{
		blnIsAppletObj = true;
	}
	else
	{
		blnIsAppletObj = false;
	}


	if (blnIsAppletObj)
	{
		//enumerate the controls on the form

		for (var i=0; i < objForm.elements.length; i++)
		{
			strElementName = objForm.elements[i].name;
			if (strElementName == "")
			{
				;
			}
			else
			{
				if (objData.innerChild.hasProperty(strElementName))
				{
					//alert(strElementName + ":" + objData.innerChild.getPropertyWrite(strElementName));
					if (objData.innerChild.getPropertyWrite(strElementName) != true)
					{
						objForm.elements[i].disabled = true;
					}

					bindValueToControl(objForm.elements[i], strElementName,  objData, blnToUI);
				}
			}
		}
	}
	else
	{

		//enumerate the properties of the object
		for (objProperty in objData.innerChild.fields)
		{
			var objElement;
			objElement = objForm.elements[objProperty];

			//if there is a control on the form with the same name as the object property
			//then bind the control to the object
			if (objElement)
			{

				if (objData.innerChild.fields[objProperty].EBWrite)
				{
					if (objData.innerChild.canUpdate)
					{						
						if (objData.innerChild.ISNEW == "0" && (objData.innerChild.fields[objProperty].EBWrite == "0"  || objData.innerChild.canUpdate == "0"))
						{
							if (String(objElement.type).toUpperCase() == String(CONTROL_TYPE_TEXTAREA).toUpperCase())
							{
								objElement.editable = false;
							}
							else
							{
								objElement.disabled = true;
							}
						}		
                        else
                        {
                        
							if (objData.innerChild.fields[objProperty].EBWrite == "0")
							{							
								if (String(objElement.type).toUpperCase() == String(CONTROL_TYPE_TEXTAREA).toUpperCase())
								{
									objElement.editable = false;
								}
								else
								{
									objElement.disabled = true;
								}
							}
							else
							{
								objElement.disabled = false;
							}
                        }			
					}
                    else
                    {
                    	objElement.disabled = false;
                    }
				}

				bindValueToControl(objElement, objProperty,  objData, blnToUI);
			}
		}
	}


}


function bindValueToControl (objFormElement, objProperty, objData, blnToUI)
{

	var strControlName;
	var strControlType;

	strControlName = objFormElement.name;
	strControlType = objFormElement.type;

	if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_TEXTBOX).toUpperCase() ||  String(strControlType).toUpperCase() == String(CONTROL_TYPE_HIDDEN).toUpperCase())
	{
		if (blnToUI)
		{

			objFormElement.value = "";
			var strValue = objData.getProperty(objProperty);
			if (strValue)
			{
                objFormElement.value = objData.getProperty(objProperty);
			}
		}
		else
		{

			objData.setProperty(objProperty, objFormElement.value);
		}
	}

	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_LIST).toUpperCase())
	{
		if (blnToUI)
		{
			objFormElement.value = objData.getProperty(objProperty);
		}
		else
		{
			objData.setProperty(objProperty, objFormElement.value);
		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_TEXTAREA).toUpperCase())
	{
		if (blnToUI)
		{
			objFormElement.value = objData.getProperty(objProperty);
		}
		else
		{
			objData.setProperty(objProperty, objFormElement.value);
		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_PASSWORD).toUpperCase())
	{
		if (blnToUI)
		{
			objFormElement.value = objData.getProperty(objProperty);
		}
		else
		{
			objData.setProperty(objProperty, objFormElement.value);
		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_RADIO).toUpperCase())
	{
		if (blnToUI)
		{
			if (objData.getProperty(objProperty) == true)
			{
				objFormElement.value = "on";
			}
			else
			{
				objFormElement.value = "off";
			}

		}
		else
		{
			objData.setProperty(objProperty, objFormElement.value);
		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_CHECKBOX).toUpperCase())
	{
		if (blnToUI)
		{

			var strValue = new String("");
			strValue += objData.getProperty(objProperty);
			if (  strValue.toUpperCase() == "TRUE" || strValue == "1" )
			{
				objFormElement.value = "on";
				objFormElement.checked = true;
			}
			else
			{
				objFormElement.value = "off";
				objFormElement.checked = false;
			}

		}
		else
		{
			if (objData)
			{
				if (objFormElement.checked == true)
				{
					objData.setProperty(objProperty, 1);
				}
				else
				{
					//acount for a null
					if (objData.getProperty(objProperty) == "")
					{
						objData.setProperty(objProperty, "");
					}
					else
					{
						objData.setProperty(objProperty, 0);
					}
				}
			}

		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_BUTTON).toUpperCase())
	{
		if (blnToUI)
		{
			objFormElement.value = objData.getProperty(objProperty);
		}
		else
		{
			objData.setProperty(objProperty, objFormElement.value);
		}
	}
	else if (String(strControlType).toUpperCase() == String(CONTROL_TYPE_COMBO).toUpperCase())
	{
		//bindCombo(objFormElement, objProperty, objData, blnToUI);

		bindCombo(objFormElement, objProperty, objData, blnToUI);
	}
}


function hasComboOption (objCombo, strDisplay)
{
	//determine is combo box already the option passed in
	//return -1 if it does not exist or the index of the option
	for (var i = 0; i < objCombo.options.length; i++)
	{
		var strOption = String(objCombo.options[i].text.toUpperCase().valueOf());
		var strTempDisplay = String(strDisplay.toUpperCase().valueOf());

		if (stripWhitespace(strOption.valueOf()) == stripWhitespace(strTempDisplay.valueOf()))
		{
			return i;
		}
	}
	return -1;
}


function getComboOptionIndexByKey(objCombo, strKey)
{
	for (var i = 0; i < objCombo.options.length; i++)
	{
		var strOptionCode = new String(objCombo.options[i].value);
		strOptionCode = stripWhitespace(strOptionCode);
		strOptionCode = new String(strOptionCode).toUpperCase();
		var strTempKey = new String(strKey);
		strTempKey = stripWhitespace(strTempKey);
		strTempKey = new String(strTempKey).toUpperCase();

		if (strTempKey.toString().valueOf() == "FALSE")
		{
			strTempKey = "0";
		}

		if (strTempKey.toString().valueOf() == "TRUE")
		{
			strTempKey = "1";
		}

		if (strOptionCode.toString().valueOf() == strTempKey.toString().valueOf())
		{
			return i;
		}
	}
	return -1;
}



function bindComboBox ( objCombo, objArray, strPKey, strPDisplay )
{
	//the first two properties in each object contained in objArray
	//are the value:display for combo box


	//country is passed in which is an array of data objects
	//each object has a fields array
	for (var i =0; i < objArray.length; i++)
	{

		var objFields = objArray[i].fields;
		var strKey = objFields[strPKey].value;
		var strValue = objFields[strPDisplay].value;
		var objOption = new Option (strValue, strKey);
		objCombo.options[i] = objOption;
	}

}




function bindCombo (objFormElement, objProperty, objData, blnToUI)
{
	var strControlName = objFormElement.name;

	if (blnToUI)
	{
		//-----------------------------------------------
		//populating ui from object objData
		//------------------------------------------------
		//logic:
		//objProperty will have the code
		//search for the code in the combo
		//set selected property of combo

		var intOption = getComboOptionIndexByKey(objFormElement, objData.getProperty(objProperty));
		if (intOption != -1)
		{
			objFormElement.selectedIndex = intOption;
		}
		else
		{
			//item not found in combo - we have a problem here
		}

	}

	else
	{
		//VALUE IN COMBO IS BEING SAVED TO THE DATABASE
		//get the index of the selected item in combo
		//get the option and it's text value
		var intSelOption = objFormElement.selectedIndex;
		if (intSelOption != -1)
		{
			var objSelOption = objFormElement.options[intSelOption];
			objData.setProperty(strControlName, objSelOption.value);
		}
	}

}



function getTableHTMLFromCollection(objCollection, strKeyField, strAnchorField, strAnchorLink)
	{
		var strTable = "";
		strTable += "<html> <body>";
		strTable += "<table border=\"3\" cellspacing=\"2\" cellpadding=\"0\">";
		strTable += "<tr><td></td></tr>";

		if (objCollection)
		{
			for (var i = 0; i < objCollection.length; i++)
			{
				var objItem = objCollection[i];
				var objFields = objItem.fields;

				if (i == 0)
				{
					strTable += "<tr>";
					for (objField in objFields)
					{

						//strTable += "<th>";
						strTable += "<td bgcolor=\"#53719D\" ";
						strTable += "align=\"center\">";
						strTable += "<font color=\"#FFFFFF\" ";
						strTable += "size=\"1\"";
						strTable += "face=\"Arial\">";
						strTable += "<b>";
						strTable += objFields[objField].name;
						strTable += "</b></font></td>";
						//strTable += "</th>";
					}
					strTable += "</tr>";
				}

				strTable += "<tr bgcolor=\"#FFFFFF\">";

				for (objField in objFields)
				{
					strTable += "<td>";
					strTable += "<font face=\"Arial\" size=\"2\">";

					if (strAnchorField == objField)
					{
						//strTable += "<a href=\"" + strAnchorLink + "javascript:parent.window.frames['ObjectData'].ContactAddress_onSelectAddress(" + "\">" + unescape(objFields[objField].value) + "</a>";
						strTable += "<a href=\"" + "javascript:" + strAnchorLink + "('" + unescape(objFields[objField].value) + "')\">" + unescape(objFields[objField].value) + "</a>";
					}
					else
					{
						strTable += unescape(objFields[objField].value);
					}

					strTable += "</td>";
					strTable += "</font>";
				}

				strTable += "</tr>";

			}
		}

		strTable += "<tr>";
		strTable += "<td>";
		strTable +="<form>"
		strTable += "<input type=button value=New ";
		strTable += "onclick=" + strAnchorLink + "(-1)>";
		strTable += "</input>";
		strTable += "</form>";
		strTable += "</td>";
		strTable += "</tr>";
		strTable += "</table>";
		strTable += "</body></html>";
		return strTable;



	}



function BizTalk ()
{
	this.strXML = "<?xml version =\"1.0\"?>";
	this.strBizTalk = "<BizTalk>";
	this.strBizTalkClose = "</BizTalk>";
	this.strBody = "<Body>";
	this.strBodyClose = "</Body>";
	this.strService = "";
	this.strServiceClose = "";
	this.strParametersOpen = "<Parameters>";
	this.strParametersClose = "</Parameters>";
	this.strParameters = "";
	this.strPayload = "<Payload version=\"1.0\">";
	this.strPayloadClose = "</Payload>";
	this.strPayloadBody = "";

	this.setPayloadVersion = BizTalk_setPayloadVersion;
	this.setService = BizTalk_setService;
	this.addParameter = BizTalk_addParameter;
	this.setPayload = BizTalk_setPayload;
	this.getXML = BizTalk_getXML;



}

function BizTalk_setPayloadVersion(strVersion)
{
	this.strPayload = "<Payload version=\"" + strVersion + "\">";
}

function BizTalk_setPayload(strPayloadBody)
{
	this.strPayloadBody = strPayloadBody;
}

function BizTalk_setService(strServiceName)
{
	this.strService  = "<" + strServiceName + " xmlns=\"urn:schemas-osas.com:ServiceSchema.xml\">";
	this.strServiceClose = "</" + strServiceName + ">";
}

function BizTalk_addParameter(strParamName, strParamValue)
{
	this.strParameters += "<" + strParamName + ">" + strParamValue + "</" + strParamName + ">";
}

function BizTalk_getXML()
{
	var strReturn = "";
	strReturn += this.strXML;
	strReturn += this.strBizTalk;
	strReturn += this.strBody;
	strReturn += this.strService;
	strReturn += this.strParametersOpen + this.strParameters + this.strParametersClose;
	strReturn += this.strPayload;
	strReturn += this.strPayloadBody;
	strReturn += this.strPayloadClose;
	strReturn += this.strServiceClose;
	strReturn += this.strBodyClose;
	strReturn += this.strBizTalkClose;
	return escape(strReturn);

}


function replaceInvalidXMLCharacters(strXML)
{
	return "<![CDATA[" + strXML + "]]>";
}



function remNullItemsFromArray(objArray)
{
	var objTempArray = new Array();

	for (var i = 0; i < objArray.length; i++)
	{
		var objItem = objArray[i];
		if (objItem)
		{
			objTempArray[i] = objItem;
		}
	}

	return objTempArray;

}

//dynamic tab generation
function remChildTabs(colObjects, strObjectName)
{
	//locate the level in colObjects in which strObjectName exists
	//then delete anything lower than that

	var iLevel = -1;

	for (var i = 0; i < colObjects.length; i++)
	{
		var objItem = colObjects[i];
		for (var k = 0; k < objItem.length; k++)
		{
			if (objItem[k] == strObjectName)
			{
				iLevel = i;
				break;
			}
		}

		if (iLevel != -1)
		{
			break;
		}
	}

	//regenerate array

	var objArray = new Array();

	for (var i = 0; i <= iLevel; i++)
	{
		var objItem = colObjects[i];
		objArray[i] = new Array();
		var objTempItem = objArray[i];

		for (var k = 0; k < objItem.length; k++)
		{
			objTempItem[k] = objItem[k];
		}

	}

	colObjects = null
	colObjects = objArray;
	return colObjects;

}



function drawTabs(colObjects, strObjectName, strParentName, objWindow)
{


	var blnHighlight = false;
	var strTab = "";
	strTab += "<html><head>";
	strTab += "<link rel=\"STYLESHEET\" TYPE=\"text/css\" HREF=\"/Includes/uistyle.css\"></link>";
	strTab += "</head>";
	strTab += "<body bgcolor=\"#0000FF\"><form><table cellpadding=\"1\" cellspacing=\"1\" border=\"0\">";
	for (var i = 0; i < colObjects.length; i++)
	{
		//alert(i + " line of tabs being drawn");

		var objItem = colObjects[i];
		strTab += "<tr valign=\"top\">";
		for (var k = 0; k < objItem.length; k++)
		{

			//alert(k + " tab(" + objItem[k] + ") being drawn on line " + i);

			if (objItem[k] == strObjectName || objItem[k] == strParentName)
			{
				//alert("highlight:" + strObjectName);
				blnHighlight = true;
			}
			else
			{

				blnHighlight = false;
			}

			if (objWindow.data.isNetscape())
			{
				strTab += makeTabNetscape(objItem[k], "javascript:parent.window.frames['ObjectData'].on" + objItem[k] + "()", blnHighlight);
			}
			else
			{
				strTab += makeTab(objItem[k], "parent.window.frames['ObjectData'].on" + objItem[k] + "()", blnHighlight);
			}
		}
		strTab += "</tr>";
	}
	strTab += "</table></form></body></html>";


    if (objWindow.parent.document.body)
    {
        if (objWindow.parent.document.body.rows)
        {
           objWindow.parent.document.body.rows = "1px, " + colObjects.length * 6 + "%,*,6%";
        }
    }


	//draw the tabs
	objWindow.parent.frames["Tabs"].document.open();
	objWindow.parent.frames["Tabs"].document.write(strTab);
	objWindow.parent.frames["Tabs"].document.close();

}

function drawTabsX(colObjects, strObjectName, strParentName, objWindow)
{

	var lngRows = 0;
	var lngIndent = 0;

	var blnHighlight = false;
	var strTab = "";
	strTab += "<html><head>";
	strTab += "<link rel=\"STYLESHEET\" TYPE=\"text/css\" HREF=\"/Includes/uistyle.css\"></link>";
	strTab += "</head>";
	strTab += "<body bgcolor=\"#0000FF\"><form><table cellpadding=\"1\" cellspacing=\"1\" border=\"0\" >";
	for (var i = 0; i < colObjects.length; i++)
	{
		//alert(i + " line of tabs being drawn");
		lngRows += 1;

		var objItem = colObjects[i];
		strTab += "<tr valign=\"top\">";
		for (var k = 0; k < objItem.length; k++)
		{
			lngRows += 1;
			//alert(k + " tab(" + objItem[k] + ") being drawn on line " + i);

			strTab += "<tr>";
			if (objItem[k] == strObjectName || objItem[k] == strParentName)
			{
				//alert("highlight:" + strObjectName);
				blnHighlight = true;
			}
			else
			{

				blnHighlight = false;
			}

			for (x = 0; x < lngIndent; x++)
			{
				strTab += "<td width=\"2px\"></td>";
				//strTab += "<td><img src=\"/Images/arrowleft1.gif\"></img></td>";
			}

			if (objWindow.data.isNetscape())
			{
				strTab += makeTabNetscape(objItem[k], "javascript:parent.window.frames['ObjectData'].on" + objItem[k] + "()", blnHighlight);
			}
			else
			{
				strTab += makeTab(objItem[k], "parent.window.frames['ObjectData'].on" + objItem[k] + "()", blnHighlight);
			}

			strTab += "<td>" + "Description of selected child" + "</tr>";
			strTab += "</tr>";



		}

		strTab += "</tr>";

		lngIndent += 1;
	}


	strTab += "</table></form></body></html>";


    if (objWindow.parent.document.body)
    {
        if (objWindow.parent.document.body.rows)
        {
           objWindow.parent.document.body.rows = "1px, " + lngRows * 6 + "%,*,6%";
        }
    }


	//draw the tabs
	objWindow.parent.frames["Tabs"].document.open();
	objWindow.parent.frames["Tabs"].document.write(strTab);
	objWindow.parent.frames["Tabs"].document.close();

}


function makeTab(strTabName, strTabLink, blnHighlight)
{
	var strTab = "";

	strTab += "<td>";

	strTab += "<input";
	strTab += " id=\"btn" + strTabName + "\"";
	strTab += " name=\"btn" + strTabName + "\"";
	strTab += " class=\"tabButton\"";
	strTab += " value=\"" + strTabName + "\"";
	strTab += " type=\"button\"";
	strTab += " onclick=\"" + strTabLink + "\"";
	if (blnHighlight)
	{
		strTab += " STYLE = \"{background-image: url(/Images/arrowdown.gif); background-repeat: no-repeat}\"";
	}
	strTab += " >";

	strTab += " </input>";
	strTab += " </td>";
	return strTab;

}

function makeTabNetscape(strTabName, strTabLink, blnHighlight)
{
	var strTab = "";
	if (blnHighlight)
	{
		strTab += "<td bgcolor=\"black\">";
	}
	else
	{
		strTab += "<td bgcolor=\"gray\">";
	}
	strTab += " <a href=\"" + strTabLink + "\"";
	strTab += " id=\"btn" + strTabName + "\"";
	strTab += " name=\"btn" + strTabName + "\"";
	strTab += " accesskey=\"M\"";
	strTab += " style=\"{text-decoration:none}\"";
	strTab += " >";
	if (blnHighlight)
	{
		strTab += " <b>" + strTabName + "<b>";
	}
	else
	{
		strTab += strTabName;
	}
	strTab += " </a>";
	strTab += " </td>";
	return strTab;

}



var whitespace = " \t\n\r";
function stripWhitespace (s)
{
	return stripCharsInBag (s, whitespace)
}

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++)
    {
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}


