
var SdEcRegionDef = {};		// public  global identifiers
var $_EcRegionDef = {};		// private global identifiers

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

SdEcRegionDef.extractRegionDefinitionFromXmlDom = function (xmlDom)
{
	var properties    = $_EcRegionDef.extractDOMsProperties(xmlDom);
	var contentDefMap = $_EcRegionDef.extractContentDefMap (xmlDom);
	var region        = $_EcRegionDef.extractDOMsRegion    (xmlDom);

	var regionDefinition = {
		"jason-type"      : "region-definition",
		"properties"      :          properties,	// array of name-value    pairs
		"content-def-map" :       contentDefMap,	// map ids to attribute    maps
		"region"          :              region	// array of content-ref strings
	}

	return regionDefinition;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$_EcRegionDef.extractDOMsProperties = function (xmlDom)
{
	// sample portion of an "enriched-content-defintion.xml" file:
	//
	//   <property id="novelist-prof" value="demo.eit.sirsi"/>
	//   <property id="novelist-pwd"  value="ebs2898"       />
	//
	//   <property
	//     id    = "novellist-url"
	//     value = "http://nr-beta-eit.ebscohost.com//Services/NovelistSelect.asmx/{cmd}?prof={novelist-prof}
	//             &amp;pwd={novelist-pwd}&amp;authType=&amp;ipprof=&amp;isbn={isbn}&amp;numrecs=2"
	//   />

	var list = [];

	var properties = (xmlDom ? xmlDom.getElementsByTagName("property") : []);

	var count = (properties ? properties.length : 0);
	for (var k = 0;  k < count; k++)
	{
		var property = properties[k];

		var    id = property.getAttribute(   "id");
		var value = property.getAttribute("value");

		var pair = { "name" : id, "value" : value};

		list[list.length] = pair;
	}
	
	return list;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$_EcRegionDef.extractContentDefMap = function (xmlDom)
{
	var iMap = {};

	var defs  = ( xmlDom ? xmlDom.getElementsByTagName("content-def") : [] );
	var count = (defs ? defs.length : 0);
	for (var k = 0;  k < count; k++)
	{
		var def  = defs[k];
		var  id  = def.getAttribute("id");
		var aMap = $_EcRegionDef.extractAttributesFromContentDefNode(def);
		iMap[id]  = aMap;
	}
	
	return iMap;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$_EcRegionDef.extractAttributesFromContentDefNode = function (contentDefNode)
{
	var map = {};

	var list = contentDefNode.attributes;

	var count = (list ? list.length : 0);
	for (var k = 0; k < count; k++)
	{
		var node  = list[k];

		var name  = node.nodeName ;
		var value = node.nodeValue;

		map[name] = value;
	}

	return map;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

$_EcRegionDef.extractDOMsRegion = function (xmlDom)
{
	var list = [];

	var regions = ( xmlDom ? xmlDom.getElementsByTagName("region") : [] );

	var count = (regions ? regions.length : 0);
	if (count < 1) SdCommon.error( "missing region" );
	if (count > 1) SdCommon.error("too many regions");

	var region = regions[0];

	var refs = region.getElementsByTagName("content-ref");
	var size = (refs ? refs.length : 0);

	for (var k = 0; k < size; k++)
	{
		var refNode = refs[k];
		var txtNode = refNode.lastChild;
		var refText = txtNode.nodeValue;
		var refId   = SdCommon.trim(refText);

		list[list.length] = refId;
	}

	return list;
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

