/*	NOTES: 
*	- must use CDATA for any node containing HTML
*	- must use CDATA for any node containing string that will be translated
*/



// [moved inside object] the labels for the language selection menu
// var Languages = {label: '', list: []};
// [moved inside object] the labels for the country selection menu
// var Countries = {label: '', list: []};
// [temp] the title for the page header
var Title = "";
// [temp] the labels for the header navigation menu
var HeaderNav = [];
// label for the header title
var Header = "";


/**
*	Data object
*/
var Data = {
	xml: "data/data.xml",
	
	loadXML: function () {
		var ref = this;

		new Ajax.Request (this.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); readyToLoad = true;},
			onFailure: function (transport) { log(ref.xml + " failed to load");}
		})	
	
	},
	
	parseXML: function (obj) {

		var ref = this;	
		log('build data xml');
		
		this.os = [];
		this.wmp = [];
		this.pmdm = [];
		this.country = [];
		this.language = [];
		this.mediatype = [];
		this.srt = [];
		this.thankyou = [];
		this.selectlabel = [];
		this.expirelabel = [];
		this.redeemlabel = [];
		this.welcomelabel = [];
		this.welcometxtlabel = [];
		this.selectcountrylabel = [];
		this.formlabels = [];
		this.otherlabel = [];
		this.updatelabel = [];
		this.authcodeerror = [];
		this.missingauthcode = [];
		this.requesterror = [];
		this.provider = [];
		this.header = [];
		this.changecountry = [];
		this.consumernotice = [];
		this.flagselection = [];
		
		// auto response
		this.responsedata = [];
		this.salutationandclosing = [];
		
		// parse country selection
		var countryNode  = obj.responseXML.getElementsByTagName('country');
		var countryList = $A(countryNode[0].getElementsByTagName('item'));
		countryList.each(function (item) {

			var temp = [];
			var selectionList =  $A(item.getElementsByTagName('selection'));
			selectionList.each(function (subitem) {
				temp.push({id: getNodeValue(subitem,'id'), label: getNodeValue(subitem,'label')});

			});
			ref.country[getNodeValue(item,'id')] = { selectlabel: getNodeValue(item,'selectlabel'), selections:temp };
		
		});			
		

		// parse common items
		var selectlabelNode  = obj.responseXML.getElementsByTagName('selectlabel');
		var selectlabelList = $A(selectlabelNode[0].getElementsByTagName('item'));
		selectlabelList.each(function (item) {
			ref.selectlabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});			
		
		var otherlabelNode  = obj.responseXML.getElementsByTagName('otherlabel');
		var otherlabelList = $A(otherlabelNode[0].getElementsByTagName('item'));
		otherlabelList.each(function (item) {
			ref.otherlabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var expirelabelNode  = obj.responseXML.getElementsByTagName('expirelabel');
		var expirelabelList = $A(expirelabelNode[0].getElementsByTagName('item'));
		expirelabelList.each(function (item) {
			ref.expirelabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});
		
		var redeemlabelNode  = obj.responseXML.getElementsByTagName('redeemlabel');
		var redeemlabelList = $A(redeemlabelNode[0].getElementsByTagName('item'));
		redeemlabelList.each(function (item) {
			ref.redeemlabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var welcomelabelNode  = obj.responseXML.getElementsByTagName('welcomelabel');
		var welcomelabelList = $A(welcomelabelNode[0].getElementsByTagName('item'));
		welcomelabelList.each(function (item) {
			ref.welcomelabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var welcometxtlabelNode  = obj.responseXML.getElementsByTagName('welcometxtlabel');
		var welcometxtlabelList = $A(welcometxtlabelNode[0].getElementsByTagName('item'));
		welcometxtlabelList.each(function (item) {
			ref.welcometxtlabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var selectcountrylabelNode  = obj.responseXML.getElementsByTagName('selectcountrylabel');
		var selectcountrylabelList = $A(selectcountrylabelNode[0].getElementsByTagName('item'));
		selectcountrylabelList.each(function (item) {
			ref.selectcountrylabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});
		
		var formlabelslabelNode  = obj.responseXML.getElementsByTagName('formlabels');
		var formlabelslabelList = $A(formlabelslabelNode[0].getElementsByTagName('item'));
		formlabelslabelList.each(function (item) {
			var _labelArray =new Array();
			
			_labelArray.push({formheader:getNodeValue(item,'formheader'),
							  fname:getNodeValue(item,'fname'),
							  lname:getNodeValue(item,'lname'),
							  email:getNodeValue(item,'email'),
							  authcode:getNodeValue(item,'authcode'),
							  comments:getNodeValue(item,'comments')
							});
			
			
			ref.formlabels[getNodeValue(item,'id')] = { labelArray: _labelArray};
		});
		
		var responselabelslabelNode  = obj.responseXML.getElementsByTagName('FormResponseData');
		var responselabelslabelList = $A(responselabelslabelNode[0].getElementsByTagName('section'));
		var responsesalutationclosingList = $A(responselabelslabelNode[0].getElementsByTagName('response'));
		
		responselabelslabelList.each(function (item) {
			var _responselabelArray =new Array();
			    //alert(item.getAttribute("name"));
			    
			   // var sectionlabelNode = item.responseXML.getElementsByTagName('item');
			    var sectionlabelList = $A(item.getElementsByTagName('item'));
							
				sectionlabelList.each(function (section){
					
				//alert( getNodeValue(section,'label')  );
				_responselabelArray[getNodeValue(section,'id')] = {content: getNodeValue(section,'label')}
				
				});
				
			/*_responselabelArray[getNodeValue(section,'id')] =.push({formheader:getNodeValue(item,'formheader'),
							  fname:getNodeValue(item,'fname'),
							  lname:getNodeValue(item,'lname'),
							  email:getNodeValue(item,'email'),
							  authcode:getNodeValue(item,'authcode'),
							  comments:getNodeValue(item,'comments')
							});
			*/
			
			ref.responsedata[item.getAttribute("name")] = { responseArray: _responselabelArray};
			
			
		});
		
		responsesalutationclosingList.each(function (item) {
			var responseSandClabelList = $A(item.getElementsByTagName('item'));
			responseSandClabelList.each(function (SandC){
				ref.salutationandclosing[getNodeValue(SandC,'id')] = { salutation:getNodeValue(SandC,'salutation') , closing:getNodeValue(SandC,'close'),clickhere:getNodeValue(SandC,'clickhere')};				
			});
		});
		
		var updatelabelNode  = obj.responseXML.getElementsByTagName('updatelabel');
		var updatelabelList = $A(updatelabelNode[0].getElementsByTagName('item'));
		updatelabelList.each(function (item) {
			ref.updatelabel[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var authcodeNode  = obj.responseXML.getElementsByTagName('authcodeerror');
		var authcodeList = $A(authcodeNode[0].getElementsByTagName('item'));
		authcodeList.each(function (item) {
			ref.authcodeerror[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var missauthcodeNode  = obj.responseXML.getElementsByTagName('missingauthcode');
		var missauthcodeList = $A(missauthcodeNode[0].getElementsByTagName('item'));
		missauthcodeList.each(function (item) {
			ref.missingauthcode[getNodeValue(item,'id')] = { label: getNodeValue(item,'label')};
		
		});	
		
		var headerNode  = obj.responseXML.getElementsByTagName('header');
		var headerList = $A(headerNode[0].getElementsByTagName('item'));
		headerList.each(function (item) {
			ref.header.push({ label: getNodeValue(item,'label'),headerlabel : getNodeValue(item,'headerlabel').split(",").clone(),lang:getNodeValue(item,'id'), source:getNodeValue(item,'source')}) ;
		
		});	
		
		var languageNode  = obj.responseXML.getElementsByTagName('language');
		var languageList = $A(languageNode[0].getElementsByTagName('item'));
		languageList.each(function (item) {

			var temp = [];
			var selectionList =  $A(item.getElementsByTagName('selection'));
			selectionList.each(function (subitem) {
				temp.push({id: getNodeValue(subitem,'id'), label: getNodeValue(subitem,'label')});

			});
			ref.language[getNodeValue(item,'id')] = { selectlabel: getNodeValue(item,'selectlabel'), selections:temp };
		
		});	
		
		/*<flagselection>
		<item>
			<id><![CDATA[au]]></id>
			<name><![CDATA[Australia]]></name>
			<img>images/common/flags/au_flag.png</img>
		</item>
		</flagselection>
		*/
		
		var flagselectionNode  = obj.responseXML.getElementsByTagName('flagselection');
		var flagselectionList = $A(flagselectionNode[0].getElementsByTagName('item'));
		flagselectionList.each(function (item) {

			ref.flagselection.push({id:getNodeValue(item,'id') , label: getNodeValue(item,'name'), imgpath:getNodeValue(item,'img') });
		
		});	
		
		
		//parse consumer notice nodes
		var noticeNode  = obj.responseXML.getElementsByTagName('consumernotice');
		var noticeList = $A(noticeNode[0].getElementsByTagName('item'));
		noticeList.each(function (item) {
			ref.consumernotice[getNodeValue(item,'id')] = {mssg: getNodeValue(item,'mssg')};
		
		});		

		// parse support request type selection
		var srtNode  = obj.responseXML.getElementsByTagName('srt');
		var srtList = $A(srtNode[0].getElementsByTagName('item'));
		srtList.each(function (item) {

			var temp = [];
			var selectionList =  $A(item.getElementsByTagName('selection'));
			selectionList.each(function (subitem) {
				temp.push({id: getNodeValue(subitem,'id'), label: getNodeValue(subitem,'label')});

			});
			ref.srt[getNodeValue(item,'id')] = { selections:temp };
		});		


		// parse thank you
		var tyNode  = obj.responseXML.getElementsByTagName('thankyou');
		var tyLabels = $A(tyNode[0].getElementsByTagName('item'));
		tyLabels.each(function (item) {
			ref.thankyou[getNodeValue(item,'id')] = {thankyou1:getNodeValue(item,'thankyou1'), 
								thankyou2:getNodeValue(item,'thankyou2'), 
								thankyou3:getNodeValue(item,'thankyou3'),
								thankyou4:getNodeValue(item,'thankyou4')};
			
		});	

		// parse request error
		var reNode  = obj.responseXML.getElementsByTagName('requesterror');
		var reLabels = $A(reNode[0].getElementsByTagName('item'));
		reLabels.each(function (item) {
			ref.requesterror[getNodeValue(item,'id')] = {fillrequiredfields:getNodeValue(item,'fillrequiredfields'), 
								firstnamemissing:getNodeValue(item,'firstnamemissing'), 
								emailmissing:getNodeValue(item,'emailmissing'), 
								emailinvalid:getNodeValue(item,'emailinvalid'), 
								commentsmissing:getNodeValue(item,'commentsmissing')};
			
		});	
		
		
		// parse media type selection
		var mtNode  = obj.responseXML.getElementsByTagName('mediatype');
		var mtOptions = $A(mtNode[0].getElementsByTagName('item'));
		mtOptions.each(function (item) {
			ref.mediatype.push(item.firstChild.nodeValue);
		});
		
		// parse change country label
		var ccNode  = obj.responseXML.getElementsByTagName('changecountry');
		var ccItems = $A(ccNode[0].getElementsByTagName('item'));
		ccItems.each(function (item) {
			var id = getNodeValue(item,'id');
			var countrylabel = getNodeValue(item,'label');
			ref.changecountry.push({id:id, countrylabel:countrylabel});
		});

		// parse OS
		var osNode  = obj.responseXML.getElementsByTagName('os');
		var osOptions = $A(osNode[0].getElementsByTagName('item'));
		osOptions.each(function (item) {
			ref.os.push(item.firstChild.nodeValue);
		});
	
		// parse WMP
		var wmpNode  = obj.responseXML.getElementsByTagName('wmp');
		var wmpOptions = $A(wmpNode[0].getElementsByTagName('item'));
		wmpOptions.each(function (item) {
			ref.wmp.push(item.firstChild.nodeValue);
		});	
		
		// Parse  Portable Media Device and their manufacturers
		var pmdmNode  = obj.responseXML.getElementsByTagName('pmdm');
		var manufacturer = $A(pmdmNode[0].getElementsByTagName('item'));
		manufacturer.each(function (item) {
			var temp = [];
			var itemNode =  $A(item.getElementsByTagName('subitem'));
			itemNode.each(function (subitem) {
				temp.push(subitem.firstChild.nodeValue);
			});
			ref.pmdm.push({manufacturer: getNodeValue(item,'name'), devices:temp });
			
		});
		
		// Parse Provider information
		var providerNode  = obj.responseXML.getElementsByTagName('provider');
		var proItem = $A(providerNode[0].getElementsByTagName('item'));
		proItem.each(function (item) {
		ref.provider[getNodeValue(item,'name')] = {id:getNodeValue(item,'id'), 
		name:getNodeValue(item,'name'), 
		email:getNodeValue(item,'email')} 
		});	
		
		if(document.location.hash == '' || document.location.hash.include('landing-content')){
			setTimeout(buildLandingPage,10);
		}
	},
	
	getCountrySelectLabel:function (lang) {
		return country[lang].selectLabel;
	},
	
	getLanguageSelectLabel:function (lang) {
		return language[lang].selectLabel;
	}
	,getProviderEmail:function(arg)
	{	
		arg=arg.toUpperCase();
		return this.provider[arg].email;
	}
	,getHeader:function(lang,source)
	{
		var searchStr='DC';
		if(source =='DCOD' || source == 'DCON' || source == '' || source == 'DC')
		{
			searchStr = 'DC';
		}
		else
		{
			searchStr = 'EC';
		}
		var label = '';
		this.header.each(function(item){
			if(item.lang == lang && item.source == searchStr)
				label = item.label;
		})
		return label;
	}
	,getHeaderLabel:function(lang,source)
	{
		var searchStr='DC';
		if(source =='DCOD' || source == 'DCON' || source == '' || source == 'DC')
		{
			searchStr = 'DC';
		}
		else
		{
			searchStr = 'EC';
		}
		var label = '';
		this.header.each(function(item){
			if(item.lang == lang && item.source == searchStr)
				label = item.headerlabel;
		})
		return label;
	}
	,getChangeCountryLabel:function(lang)
	{
		var label = '';
		this.changecountry.each(function(item){
			if(item.id == lang)
			{
				label = item.countrylabel;
			}
		})
		return label;
	}
};


/**
*	Terms of Use object
*/
var TermsOfUse = {
	xml: "data/terms_en.xml",
	
	loadXML: function (xml) {
		
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		this.content = getNodeValue(obj.responseXML,'content');
		this.language = getNodeValue(obj.responseXML,'language');
		this.country = getNodeValue(obj.responseXML,'country');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		
		HeaderNav =[];
		Header = '';
		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();

		//has been optimized, language file is in single xml file
		// parse language selection data
		this.languageNav = {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		
		// parse country selection data
		/*this.countryNav =  {label: getNodeValue(obj.responseXML,'navcountrylabel'), list: []};
		var csNode  = obj.responseXML.getElementsByTagName('navcountry');
		var csLangs = $A(csNode[0].getElementsByTagName('item'));
		csLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'country');
			ref.countryNav.list.push({id:id, label:label});
		});*/
		buildTerms(this.country);
//		buildHeader();
	}

};


/**
*	Privacy Policy
*/
var PrivacyPolicy = {
	xml: "data/privacy_en.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
		this.content = getNodeValue(obj.responseXML,'content');
		this.language = getNodeValue(obj.responseXML,'language');
		this.country = getNodeValue(obj.responseXML,'country');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		
		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		//has been optimized xml language files in one file
		// parse language selection data
		this.languageNav = {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		
		// parse country selection data
		/*this.countryNav =  {label: getNodeValue(obj.responseXML,'navcountrylabel'), list: []};
		var csNode  = obj.responseXML.getElementsByTagName('navcountry');
		var csLangs = $A(csNode[0].getElementsByTagName('item'));
		csLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'country');
			ref.countryNav.list.push({id:id, label:label});
		});*/
		
		buildPrivacy(this.country);
//		buildHeader();
	}
};



/**
*	Feedback Form
*/
var FeedbackForm = {
	xml: "data/feedbackform_en.xml",
	textlabels: {},
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		log('parsed feedback xml');
		
		this.language = getNodeValue(obj.responseXML,'language');
		this.label = getNodeValue(obj.responseXML,'label');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
//		this.country = getNodeValue(obj.responseXML,'country');
//		this.source = getNodeValue(obj.responseXML,'source');
		this.groups = [];
		
		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
			
		//xml file optimized into 1 xml file
		// parse language selection data
		this.languageNav = {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			ref.languageNav.list.push({id:getNodeValue(item,'id'), label:getNodeValue(item,'Language')});
		});
		
		
		// parse form items
		var groupNode  = obj.responseXML.getElementsByTagName('group');
		var itemList = $A(groupNode[0].getElementsByTagName('item'));
		itemList.each(function (item) {
		
			ref.groups.push({
				id:getNodeValue(item,'groupid'), 
				label:getNodeValue(item,'grouplabel'), 
				formtype:getNodeValue(item,'formtype'), 
				required:getNodeValue(item,'required'),
				selection:getNodeValue(item,'selection').split(",").clone()});
			ref.textlabels[getNodeValue(item,'groupid')] = {label:getNodeValue(item,'grouplabel'), formtype:getNodeValue(item,'formtype'), required:getNodeValue(item,'required')};
		});			
	
		
		buildFeedback();
		buildHeader();
	},
	
	getTextLabel:function (id) {
		var result = "";
		if (this.textlabels[id] != undefined) result = this.textlabels[id].label;
		return result;
	}

};


/**
*	Landing Page object
*/
var LandingPage = {
	
	xml: "data/landingpage_en.xml",
	
	loadXML: function () {
		
		var ref = this;
		
		new Ajax.Request (this.xml, {
			method: 'get',
			onSuccess: function (transport) {ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely");},
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	},
	
	parseXML: function (obj) {
		
		var ref = this;
		this.language = getNodeValue(obj.responseXML,'language');
		// parse header
		var head = obj.responseXML.getElementsByTagName('header');
		Header = head[0].firstChild.nodeValue;//getNodeValue(obj.responseXML,'header');
		
		//xml has been optimized for 1 single language file
		// parse language selection data
		this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		if(lsNode != null)
		{
			var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
			lsLangs.each(function (item) {
				var id = getNodeValue(item,'id');
				var label = getNodeValue(item,'Language');
				ref.languageNav.list.push({id:id, label:label});
			});	
		}
		
		// parse digital copy data
		this.digitalcopy =  {languages: []};
		var dcNode  = obj.responseXML.getElementsByTagName('dcsupportcountry');
		if(dcNode != null)
		{
			var dcLangs = $A(dcNode[0].getElementsByTagName('item'));
			dcLangs.each(function (item) {
				var langid = getNodeValue(item,'langid');
				var countryid = getNodeValue(item,'countryid');
				var label = getNodeValue(item,'Country');
				var imageUrl = getNodeValue(item,'image');
				var dcsupportlabel = getNodeValue(item,'dcsupportlabel');
				var ecsupportlabel = getNodeValue(item,'eclabel');
				var titlelabel = getNodeValue(item,'label');
				var gobutton = getNodeValue(item,'button');
				ref.digitalcopy.languages.push({langid:langid, countryid:countryid, label:label, image:imageUrl, dclabel:dcsupportlabel, eclabel:ecsupportlabel, titlelabel:titlelabel, button:gobutton});
			});	
		}
		
		// parse online special features data
		this.onlineec =  {languages: []};
		var ecNode  = obj.responseXML.getElementsByTagName('eccountry');
		if(ecNode != null)
		{
			var ecLangs = $A(ecNode[0].getElementsByTagName('item'));
			ecLangs.each(function (item) {
				var langid = getNodeValue(item,'langid');
				var countryid = getNodeValue(item,'countryid');
				var label = getNodeValue(item,'Country');
				var imageUrl = getNodeValue(item,'image');
				ref.onlineec.languages.push({langid:langid, countryid:countryid, label:label, image:imageUrl});
			});	
		}
//		buildLandingPage();
//		buildHeader();		
	}
	,getDCSupportLabel:function (id) {
		var result = "";
		if(this.digitalcopy != undefined)
		{
			this.digitalcopy.languages.each(function(item){
				if (item.langid ==id)
				{
					result = item.dclabel;
				}
			})
		}
		return result;
	}
	,getECSupportLabel:function (id) {
		var result = "";
		if(this.digitalcopy != undefined)
		{
			this.digitalcopy.languages.each(function(item){
				if (item.langid ==id)
				{
					result = item.eclabel;
				}
			})
		}
		return result;
	}
	,getTitleLabel:function(id){
		var result = "";
		if(this.digitalcopy != undefined)
		{
			this.digitalcopy.languages.each(function(item){
				if (item.langid ==id)
				{
					result = item.titlelabel;
				}
			})
		}
		return result;
	}
	,getGoButtonText:function(id){
		var result = "";
		if(this.digitalcopy != undefined)
		{
			this.digitalcopy.languages.each(function(item){
				if (item.langid ==id)
				{
					result = item.button;
				}
			})
		}
		return result;
	},
	getlanguageID:function(countryID){
		var result = "";
		if(this.digitalcopy != undefined)
		{
			this.digitalcopy.languages.each(function(item){
				if (item.countryid ==countryID)
				{
					result = item.langid;
				}
			})
		}
		return result;
	}
};


/**
*	Home object
*/
var Home = {
	xml: "data/homeDC_en.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			asynchronous: false,
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
		this.source = getNodeValue(obj.responseXML,'source');
		this.language = getNodeValue(obj.responseXML,'language');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.sectionheader = getNodeValue(obj.responseXML,'sectionheader');

		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		
		//xml language list optimized in one single xml file
		// parse language selection data
		if(selectedSource != 'EC')
		{
			this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
			var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
			var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
			lsLangs.each(function (item) {
				var id = getNodeValue(item,'id');
				var label = getNodeValue(item,'Language');
				ref.languageNav.list.push({id:id, label:label});
			});
		}
		
		// get the categories
		var catNode = $A(obj.responseXML.getElementsByTagName('category'));
		catNode.each(function (cat) {
			
			// parse overview data
			if (getNodeValue(cat,'id') == 'overview') {
			
				ref.overview = {label:getNodeValue(cat,'label'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.overview.list.push({id:getNodeValue(item,'id'), question: getNodeValue(item,'question'), answer: getNodeValue(item,'answer')});
				});
			
			// parse top support questions data
			} else if (getNodeValue(cat,'id') == 'topsupport') {
			
				ref.topsupport = {label:getNodeValue(cat,'label'), morelabel:getNodeValue(cat,'morelabel'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.topsupport.list.push({id:getNodeValue(item,'id'),question: getNodeValue(item,'question')});
				});
			
			}
		});
		
		//buildHome();
		
//		buildHeader();
	}
};

/**
*	PID	Home object
*/
var PIDHome = {
	xml: "data/homePID.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
		/*this.source = getNodeValue(obj.responseXML,'source');
		this.language = getNodeValue(obj.responseXML,'language');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.sectionheader = getNodeValue(obj.responseXML,'sectionheader');

		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		
		//xml language list optimized in one single xml file
		// parse language selection data
		if(selectedSource != 'EC')
		{
			this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
			var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
			var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
			lsLangs.each(function (item) {
				var id = getNodeValue(item,'id');
				var label = getNodeValue(item,'Language');
				ref.languageNav.list.push({id:id, label:label});
			});
		}
		*/
		// get the categories
		//ref.language = 5;
		
		//ref.language = {list:[]};
		//ref.language.list.push({id:'this is my id'});
		ref.language = {list:[]};
		var catNode = $A(obj.responseXML.getElementsByTagName('language'));
		catNode.each(function (cat) {
				var items = [];
				//alert(getNodeValue(cat,'id'));
				//alert(getNodeValue(cat,'id'));
				//ref.language.push({id:getNodeValue(cat,'id')});
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					
					//alert(getNodeValue(item,'id'));
					//alert(getNodeValue(item,'question'));
					items.push({question:getNodeValue(item,'question'),id:getNodeValue(item,'id')});
				});
			ref.language.list.push({langid:getNodeValue(cat,'id'), items:items});
				//ref.language.list.push({langid:getNodeValue(cat,'id')});
		});	
			
			/*
			// parse overview data
			if (getNodeValue(cat,'id') == 'overview') {
			
				ref.overview = {label:getNodeValue(cat,'label'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.overview.list.push({id:getNodeValue(item,'id'), question: getNodeValue(item,'question'), answer: getNodeValue(item,'answer')});
				});
			
			// parse top support questions data
			} else if (getNodeValue(cat,'id') == 'topsupport') {
			
				ref.topsupport = {label:getNodeValue(cat,'label'), morelabel:getNodeValue(cat,'morelabel'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.topsupport.list.push({id:getNodeValue(item,'id'),question: getNodeValue(item,'question')});
				});
			
			}*/
		
		
		//buildHome();
		
//		buildHeader();
	}
};

/**
*	Top Questions Home Object
*/
var TopQuestionsHome = {
	xml: "data/topQuestions.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			asynchronous: false,
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
		ref.language = {list:[]};
		var catNode = $A(obj.responseXML.getElementsByTagName('language'));
		catNode.each(function (cat) {
				var items = [];
				//alert(getNodeValue(cat,'id'));
				//alert(getNodeValue(cat,'id'));
				//ref.language.push({id:getNodeValue(cat,'id')});
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					
					//alert(getNodeValue(item,'id'));
					//alert(getNodeValue(item,'question'));
					items.push({expired:item.getAttribute("expired"),question:getNodeValue(item,'question'),id:getNodeValue(item,'id')});
				});
			ref.language.list.push({langid:getNodeValue(cat,'id'), items:items});
				//ref.language.list.push({langid:getNodeValue(cat,'id')});
		});	
		
		buildHome();
			
	}
};


/**
*	Home object
*//*
var HomeEC = {
	xml: "data/homeEC_en.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
		this.source = getNodeValue(obj.responseXML,'source');
		this.language = getNodeValue(obj.responseXML,'language');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.sectionheader = getNodeValue(obj.responseXML,'sectionheader');

		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav1 = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		
		// get the categories
		var catNode = $A(obj.responseXML.getElementsByTagName('category'));
		catNode.each(function (cat) {
			
			// parse overview data
			if (getNodeValue(cat,'id') == 'overview') {
			
				ref.overview = {label:getNodeValue(cat,'label'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.overview.list.push({id:getNodeValue(item,'id'), question: getNodeValue(item,'question'), answer: getNodeValue(item,'answer')});
				});
			
			// parse top support questions data
			} else if (getNodeValue(cat,'id') == 'topsupport') {
			
				ref.topsupport = {label:getNodeValue(cat,'label'), morelabel:getNodeValue(cat,'morelabel'), list:[]};
				var itemNode = $A(cat.getElementsByTagName('item'));
				itemNode.each(function (item) {
					ref.topsupport.list.push({id:getNodeValue(item,'id'), question: getNodeValue(item,'question')});
				});
			
			}
		});
		
		buildHomeEC();
		
		buildHeader();
		
		
	}

};*/

/**
*	Getting Started object
*/
var GettingStarted = {
	xml: "data/gettingstarted_en.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { 
				log(ref.xml + " failed to load");	
			}
		})	
	
	},
	
	parseXML: function (obj) {
		
		log('getting started parsed');
		var ref = this;
        //		this.source = getNodeValue(obj.responseXML,'source');
		this.language = getNodeValue(obj.responseXML,'language');
		this.mediatype = getNodeValue(obj.responseXML,'mediatype');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
//		this.sectionheader = getNodeValue(obj.responseXML,'sectionheader');
//		this.steps = [];
		this.itemsArr = [];
		// parse the header title
		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		
		//language list has been optimized
		// parse language selection data
		this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		var items = obj.responseXML.getElementsByTagName('instructions');
		var sItems = $A(items[0].getElementsByTagName('source'));
		sItems.each(function (s){
			var items = [];
			var listItems = $A(s.getElementsByTagName('item'));
			listItems.each(function (item){
				var steps = [];
				var stepNode = $A(item.getElementsByTagName('step'));
				stepNode.each(function (step) {
					steps.push({label:getNodeValue(step,'label'), image:getNodeValue(step,'image'), instruction:getNodeValue(step,'instruction')});
				});
				items.push({collection:getNodeValue(item,'collection'),format:getNodeValue(item,'format'), header:getNodeValue(item,'sectionheader'), steps:steps });
				
			});
			
			ref.itemsArr.push({source:getNodeValue(s,'id'), items:items});
				
		})
		
		// get the categories
/*		var stepNode = $A(obj.responseXML.getElementsByTagName('step'));
		stepNode.each(function (step) {
			ref.steps.push({label:getNodeValue(step,'label'), image:getNodeValue(step,'image'), instruction:getNodeValue(step,'instruction')});
		});
*/		
		buildGettingStarted();
		
//		buildHeader();		
	}

};


/**
*	Support object
*/
var SupportFormEC = {
	xml: "data/supportform_en.xml",

	textlabels: new Array(),
	
	loadXML: function (xml) {
//		buildLoadingPopup();	
	
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;

		log('parse Support Form');
				
		this.language = getNodeValue(obj.responseXML,'language');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.label = getNodeValue(obj.responseXML,'label');
		this.groups = new Array();

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").invoke('strip').clone();
	
		// parse header
		Header = getNodeValue(obj.responseXML,'header');
		
		//language selection optimized
		// parse language selection data
		this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		// get the groups
		/*var groupNode  = obj.responseXML.getElementsByTagName('group');
		var groupItems = $A(groupNode[0].getElementsByTagName('item'));
		ref.textlabels=[];
		groupItems.each(function (group) {
		
			ref.groups.push({
				id:getNodeValue(group,'groupid'), 
				label:getNodeValue(group,'grouplabel'), 
				formtype:getNodeValue(group,'formtype'), 
				required:getNodeValue(group,'required')	})
//				selection:getNodeValue(group,'selection').split("|").clone()});

			ref.textlabels[getNodeValue(group,'groupid')] = {label:getNodeValue(group,'grouplabel'), formtype:getNodeValue(group,'formtype'), required:getNodeValue(group,'required')};

		});		
	
		// parse language selection data
		this.languageNav = {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});*/
		
		buildECSupportForm();	
		
//		buildHeader();			
	},
	
	getTextLabel:function (id) {
		var result = "";
		if (this.textlabels[id] != undefined) result = this.textlabels[id].label;
		return result;
	}	
	
};
/**
*	Support object
*/
var Support = {
	xml: "data/support_en.xml",
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			asynchronous: false,
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely");},
			onFailure: function (transport) { log(ref.xml + " failed to load");	buildSupportForm1();}
		})	
	},
	
	parseXML: function (obj) {
		var ref = this;
		
//		this.source = getNodeValue(obj.responseXML,'source');
		this.language = getNodeValue(obj.responseXML,'language');
		this.source = getNodeValue(obj.responseXML,'source');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.faq = [];

		// parse the header title
//		Header = getNodeValue(obj.responseXML,'header');

		// parse the header navigation labels
//		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").clone();
		
		//language has been optimized
		// parse language selection data
	/*	this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		*/
		// get the categories
		var catNode = $A(obj.responseXML.getElementsByTagName('category'));
		catNode.each(function (cat) {
			var itemNode = $A(cat.getElementsByTagName('item'));
			var itemsArray = [];
			itemNode.each(function (item) {
				var format =[];
				var source = [];
				var collectionID =[];
				var provider = [];
				var formats = $A(item.getElementsByTagName('Format'));
				var sources = $A(item.getElementsByTagName('Source'));
				var collectionids = $A(item.getElementsByTagName('Collectionid'));
				var providers = $A(item.getElementsByTagName('Provider'));
				sources.each(function (f){
					var id = f.firstChild.nodeValue;
					source.push({sourceid:id});
				})
				collectionids.each(function (f){
					var id = f.firstChild.nodeValue;
					collectionID.push({collectid:id});
				})
				providers.each(function (f){
					var id = f.firstChild.nodeValue;
					provider.push({providerid:id});
				})
				formats.each(function (f){
					var id = f.firstChild.nodeValue;
					format.push({formatid:id});
				})
				if(sources.length == 0)
				{
					source.push({sourceid:undefined});
				}
				if(collectionids.length == 0)
				{
					collectionID.push({collectid:undefined});
				}
				if(providers.length == 0)
				{
					provider.push({providerid:undefined});
				}
				if(formats.length == 0)
				{
					format.push({formatid:undefined});
				}
				itemsArray.push({id: getNodeValue(item,'faqid'), question: getNodeValue(item,'question'), format:format, collectionID: collectionID,answer: getNodeValue(item,'answer'),title: getNodeValue(item,'Title'), provider: provider, source: source, language: getNodeValue(item,'language')});
			});

			ref.faq.push({id: getNodeValue(cat,'id'), label: getNodeValue(cat,'label'), items: itemsArray});
			
		});
		
		/*var location = HashLocationName.split('&');
		var id = ''; 
		if(location.length>1)
		{
			id = location[1].split('=');
			buildSupport(id[1]);
		}
		else*/
		
		 if(catNode.length > 0){
			buildSupport('',showQuestionOverride);
			}
		

//		buildHeader();		
	}

};

/**
*	Support Form object
*/
var SupportForm = {
	xml: "data/supportform_en.xml",

	textlabels: new Array(),
	
	loadXML: function (xml) {
		buildLoadingPopup();	
	
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely");},
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;

		log('parse Support Form');
			
		this.language = getNodeValue(obj.responseXML,'language');
		this.sectionlabel = getNodeValue(obj.responseXML,'sectionlabel');
		this.label = getNodeValue(obj.responseXML,'label');
		this.groups = new Array();

		// parse the header navigation labels
		HeaderNav = getNodeValue(obj.responseXML,'headerlabel').split(",").invoke('strip').clone();
	
		// parse header
		Header = getNodeValue(obj.responseXML,'header');
		
		//language selection data optimized
		// parse language selection data
		this.languageNav =  {label: getNodeValue(obj.responseXML,'navlanguagelabel'), list: []};
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		// get the groups
		var groupNode  = obj.responseXML.getElementsByTagName('group');
		var groupItems = $A(groupNode[0].getElementsByTagName('item'));
		ref.textlabels=[];
		groupItems.each(function (group) {
		
			ref.groups.push({
				id:getNodeValue(group,'groupid'), 
				label:getNodeValue(group,'grouplabel'), 
				formtype:getNodeValue(group,'formtype'), 
				required:getNodeValue(group,'required')	})
//				selection:getNodeValue(group,'selection').split("|").clone()});

			ref.textlabels[getNodeValue(group,'groupid')] = {label:getNodeValue(group,'grouplabel'), formtype:getNodeValue(group,'formtype'), required:getNodeValue(group,'required')};

		});		
			
		buildSupportForm1();		
		
//		buildHeader();			
	},
	
	getTextLabel:function (id) {
		var result = "";
		if (this.textlabels[id] != undefined) result = this.textlabels[id].label;
		return result;
	}	
	
};


/**
*	Footer object
*/
var Footer = {
	xml: "data/footer.xml",
	
	loadXML: function (){
		var ref = this;

		new Ajax.Request (this.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load"); }
		})	
	
	},
	
	parseXML: function (obj) {

		var ref = this;	
		
		var itemNode = $A(obj.responseXML.getElementsByTagName('item'));
		itemNode.each(function (item) {
			ref[getNodeValue(item,'lang')] = {feedbacklabel:getNodeValue(item,'feedbacklabel'), 
							privacylabel:getNodeValue(item,'privacylabel'), 
							termslabel:getNodeValue(item,'termslabel') };
		})	
//		if(selectedTitle != undefined || selectedTitle != null)
//			buildFooter();
		buildCopyright();
	},
	
	getLabel:function (lang, label) {
		return this[lang][label];
	}

};


/**
*	Copyright object
*/
var Copyright = {
	xml: "data/copyright.xml",
	
	loadXML: function () {
		var ref = this;

		new Ajax.Request (this.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load"); }
		})	
	
	},
	
	parseXML: function (obj) {

		var ref = this;	
		
		var itemNode = $A(obj.responseXML.getElementsByTagName('item'));
		itemNode.each(function (item) {
			ref[getNodeValue(item,'language')] = getNodeValue(item,'copyright');
		})	

		buildCopyright();
				
	},
	
	getLabel:function (lang) {
		return this[lang];
	}

};



/**
*	Title map object
*/
var TitleMap = {
	xml: "/starcopy_web/support/Titlemap.jsp",
//	xml: "data/titlemap.xml",
	
	loadXML: function () {
		var ref = this;

		new Ajax.Request (this.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load"); }
		})	
	
	},
	
	parseXML: function (obj) {
		log('title map xml parsed');	

		var ref = this;	
		this.list = [];
		this.temp = [];
		
		var movieNode  = obj.responseXML.getElementsByTagName('titlemap');
		var itemNode = $A(movieNode[0].getElementsByTagName('item'));
		itemNode.each(function (item) {
			ref.temp.push(getNodeValue(item,'title'));
/*			ref.list.push({
				language:getNodeValue(item,'Language'), 
				country:getNodeValue(item,'Country'),
				source:getNodeValue(item,'Source'), 
				mediatype: getNodeValue(item,'MediaType'),
				os: getNodeValue(item,'OperatingSystem'), 
				title: getNodeValue(item,'title'),
				sku: getNodeValue(item,'sku'),
				vendor: getNodeValue(item,'SupportedBy'),
				email: getNodeValue(item,'SupportEmail')
			});
*/		})	

		// sort list
		this.temp.sort();
		this.temp.each(function(itemA) {
			itemNode.each(function (itemB) {
				if (itemA == getNodeValue(itemB,'title')) {
					ref.list.push({
						language:getNodeValue(itemB,'Language'), 
						country:getNodeValue(itemB,'Country'),
						source:getNodeValue(itemB,'Source'), 
						mediatype: getNodeValue(itemB,'MediaType'),
						os: getNodeValue(itemB,'OperatingSystem'), 
						title: getNodeValue(itemB,'title'),
						sku: getNodeValue(itemB,'sku'),
						vendor: getNodeValue(itemB,'SupportedBy'),
						email: getNodeValue(itemB,'SupportEmail')
					});	
					throw $break;
				}
			})
		})

//		buildTitleMap();
				
	},
	
	getVendor: function (arg) {
		var ref = this;
		
		this.list.each(function(item) {		
			if (item.title == arg) {
				return item.vendor;
			}
		});
	},
	
	getLabel:function (lang) {
		return this[lang];
	}

};



/**
*	FAQ object
*/
var FAQ = {
	xml: "data/dcairs/questionnode.xml",

	list: [],
	
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) { log(ref.xml + " loaded completely");},
			onFailure: function (transport) { log(ref.xml + " failed to load");	buildRequestForm();}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		log('parsed faq xml');
				
		this.language = getNodeValue(obj.responseXML,'language');
		this.description = getNodeValue(obj.responseXML,'description');		
		
		// parse the main faq
		var parentFAQ = $A(obj.responseXML.getElementsByTagName('faq'));	
		var parentFAQid = getNodeValue(parentFAQ[0],'id');
//		ref.list.clear();
		ref.list.push({id:getNodeValue(parentFAQ[0],'id'), question:getNodeValue(parentFAQ[0],'Question'), answer:getNodeValue(parentFAQ[0],'Answer'), qnodes: []});
		ref.qNodesIDlist = [];
		// parse the qnodes
		var parentQnodes = $A(obj.responseXML.getElementsByTagName('qnode'));	
		parentQnodes.each(function(item) {
			
			var faqNodes = $A(item.getElementsByTagName('faq'));
			var qNodes = getNodeValue(item,'qnode');
			var qNodeID = getNodeValue(item,'id');
			if (faqNodes.size() == 1) {		
				faqNodes.each(function (subitem) {
					if (subitem.hasChildNodes()) {
						var faqID =  getNodeValue(subitem,'id');
						if (qNodes == null || qNodes == undefined) {
							// do nothing
						} else {
							var qnodelist = qNodes.split(",").invoke('strip');
						}
						
						if (faqID != parentFAQid && !ref.qNodesIDlist.include(faqID))  {
							ref.qNodesIDlist.push(faqID);							
							ref.list.last().qnodes.push({id:qNodeID, question: getNodeValue(subitem,'Question'), answer: getNodeValue(subitem,'Answer'), qnodes: qnodelist});
						}
					}
				});
			}
		});
				
		/*
		var qNodes = $A(obj.responseXML.getElementsByTagName('qnode'));
		qNodes.each(function (item) {
			ref.list[faqID].qnode.push( { id:getNodeValue(item,'id'), question:getNodeValue(item,'question')} );
		});
		*/
		buildFAQ();
	}

};


/**
*	Support Request form submission object
*/
var RequestForm = {
	//jsp: "/dvdsupport/EmailServlet?",
	//  jsp: "/wbps/req/submitRequest.action?",
		jsp: "/wbps/req/submitParatureRequest.action?",
	//	jsp: "http://www.wbdigitalcopy.com/wbps/req/submitRequest.action",
	//jsp:"http://10.140.204.24:8080/wbps/req/submitRequest.action?",
	//jsp:"http://preview.wbdigitalcopy.com/dvdsupport/EmailServlet?",
	//jsp: "http://10.140.204.24:8080/wbps/req/submitRequest.action?",
		
	list: [],
	
	loadXML: function (obj, callback) {
		var ref = this;
		
		var queryStr = Object.toQueryString(obj);
		var fullURL = this.jsp;
		log('FULL URL:'+fullURL);
		//alert(obj);	
		new Ajax.Request (fullURL, {
			method: 'post',
			parameters:{frontEndJSON:obj},
			onSuccess: function (transport) {
				ref.parseXML(transport, callback);
			},
			onComplete: function (transport) { log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj, callback) {
		log('parsed email xml: '+selectedSource);
		
		// [todo] parse the success result
		 if(selectedSection == 'Feedback')	
			buildThankYouForFeedback('1');
		 else if(selectedSection == 'Expire')
			 buildThankYouForFeedback('1');
		else if(selectedSource.include('DC') )
			buildThankYou(2);
		else
			buildThankYouForFeedback('2');
			
		if(callback) callback();
	}
}

/**
*	Title Map object
*/
var Titlemap = {
	xml: "data/Title_Map.xml",
	//xml: "mydata/Title_Map.xml",
			
	list :[],
	autofill:[],
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (ref.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) {log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		log('parsed Titlemap xml');
				
		// parse the main faq
		var parentDisc = $A(obj.responseXML.getElementsByTagName('Disc'));
		
		parentDisc.each(function(item)
		{
			ref.disc = {list: [],country:[]};
			///ref.disc.list.push({discId:getNodeValue(item,'DiscID')});
			///ref.disc.list.push({name:getNodeValue(item,'Name')});
			///ref.disc.list.push({language:getNodeValue(item,'Language')});
			///ref.disc.list.push({source:getNodeValue(item,'Source')});
			///ref.disc.list.push({expire:getNodeValue(item,'Expire')});
			///ref.disc.list.push({redemptionURL:getNodeValue(item,'redemptionURL')});
						
			var _countryList = [];
			var countryNode = $A(item.getElementsByTagName('Country'));
			countryNode.each(function (item) {
				
				var speccollection=[];
				var format = [];
				var formatNode = $A(item.getElementsByTagName('Format'));
				formatNode.each(function (item) {
						format.push({name:getNodeValue(item,'Name'),provider:getNodeValue(item,'Provider')});
					});
				if(getNodeValue(item,'Collection') != undefined){ 
				    speccollection.push({pidhubinfo:getNodeValue(item,'Collection').split(",").invoke('strip').clone()});
				}
					
				//ref.disc.country.push({id:getNodeValue(item,'id'), producturl:getNodeValue(item,'ProductURL'),commerceurl:getNodeValue(item,'CommerceURL'),formatArr:format,pidhubsppt:speccollection});
					_countryList.push({id:getNodeValue(item,'id'), producturl:getNodeValue(item,'ProductURL'),commerceurl:getNodeValue(item,'CommerceURL'),formatArr:format,pidhubsppt:speccollection});
			});

			///ref.disc.list.push({edition:getNodeValue(item,'Edition')});
			///ref.disc.list.push({productImage:getNodeValue(item,'ProductImage')});
			
			
			
			//new optimized way of getting titlemap data
			ref.disc.list.push({discId:getNodeValue(item,'DiscID'),name:getNodeValue(item,'Name'),language:getNodeValue(item,'Language'),source:getNodeValue(item,'Source'),expire:getNodeValue(item,'Expire'),redemptionURL:getNodeValue(item,'redemptionURL'),edition:getNodeValue(item,'Edition'),productImage:getNodeValue(item,'ProductImage'),country:_countryList});
			
			ref.list.push(ref.disc);
		});
		titlemapdoneLoading=true;
	},
	
	getProvider:function(discId, format)
	{
		this.list.each(function(item){
			if(item.list.discId == discId)
			{
				log('discID: '+discId);
				item.list.format.each(function(arg){
					if(arg.name == format)
						return arg.provider;
				});
			}
		});
	},
	
	getFormat: function(discId)
	{
		this.list.each(function(item){
			if(item.list.discId == discId)
			{
				return item.list.format;
			}
		});
	},
	
	getSource: function(discId)
	{
		this.list.each(function(item){
			if(item.list.discId == discId)
			{
				return item.list.source;
			}
		});
	},
	
	getTitle: function(discId)
	{ 
		var flag = false; 
		this.list.each(function(item){
		item.list.each(function(arg){
			if(arg.discId == discId)
			{
				flag = true;
				log('discId :'+discId+' item.list.discId: '+item.list.discId);
				//return item.list.name;
			}
			if(arg.name != undefined && flag == true)
			{
				return arg.name;
			}
			})
		});
		return "Dark Knight";
	}
};

/**
*	Language object
*/
var LangSelector = {
	xml: "data/languageSelector.xml",
	list :[],
	langHeader :[],
	loadXML: function (xml) {
		var ref = this;
		
		new Ajax.Request (ref.xml, {
			method: 'get',
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) {log(ref.xml + " loaded completely"); },
			onFailure: function (transport) { log(ref.xml + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		log('Navigation language parsed');
		var ref = this;
		
		
		//set up array vars
		this.languageNav =  {langHeader:[], list: []};
		// parse the 'Change language to:' navigation labels
		
		var lhNode  = obj.responseXML.getElementsByTagName('navlanguageheader');
		var lhLangs = $A(lhNode[0].getElementsByTagName('item'));
		lhLangs.each(function (item) {
			var langid = getNodeValue(item,'id');
			var langlabel = getNodeValue(item,'navlanguagelabel');
			ref.languageNav.langHeader.push({langid:langid, langlabel:langlabel});
		});
		
		// parse language selection data list
		
		var lsNode  = obj.responseXML.getElementsByTagName('navlanguage');
		var lsLangs = $A(lsNode[0].getElementsByTagName('item'));
		lsLangs.each(function (item) {
			var id = getNodeValue(item,'id');
			var label = getNodeValue(item,'Language');
			ref.languageNav.list.push({id:id, label:label});
		});
		
		//showhideLangList(true);
	}

};

/**
*	Parature object
*/
var ParatureSchema = {
	jsp: "../wbps/req/getSchema.action?deptID=15027&schemaName=Ticket",
	Parature_Field :[],
	loadXML: function (jsp) {
		var ref = this;
		
		new Ajax.Request (ref.jsp, {
			method: 'get',
			asynchronous: false,
			onSuccess: function (transport) { ref.parseXML(transport); },
			onComplete: function (transport) {log(ref.jsp + " loaded completely"); },
			onFailure: function (transport) { log(ref.jsp + " failed to load");	}
		})	
	
	},
	
	parseXML: function (obj) {
		var ref = this;
		var paratureSchema = $A(obj.responseXML.getElementsByTagName('Custom_Field'));
		
		paratureSchema.each(function (item) {
			
			var paratureSchemaOptions = $A(item.getElementsByTagName('Option'));
			//alert(paratureSchemaOptions.length);
			var _values = [];
			paratureSchemaOptions.each(function (item) {
						
			var paraturSchemaValues = $A(item.getElementsByTagName('Value'));
			//alert(item.getAttribute("id"));
			//alert(getNodeValue(item,'Value'));
			_values.push({id:item.getAttribute("id"), value:getNodeValue(item,'Value')});
			
			});
			
			
			ref.Parature_Field[item.getAttribute("id")] = {id:item.getAttribute("id"),displayname:item.getAttribute("display-name"),values:_values};
		});
		
		return ref.Parature_Field;
		
	}
};

/**
*	FAQ response questions
*/
var AutoResponse = {
		//jsp: "/dvdsupport/EmailServlet?",
		//  jsp: "/wbps/req/submitRequest.action?",
		//	jsp: "/wbps/req/submitParatureRequest.action?",
		//http://10.140.204.41:8080/starcopy_web/SupportToken
		jsp: "/starcopy_web/SupportToken",
		//	jsp: "http://www.wbdigitalcopy.com/wbps/req/submitRequest.action",
		//jsp:"http://10.140.204.24:8080/wbps/req/submitRequest.action?",
		//jsp:"http://preview.wbdigitalcopy.com/dvdsupport/EmailServlet?",
		//jsp: "http://10.140.204.24:8080/wbps/req/submitRequest.action?",
			
		list: [],
		
		loadXML: function (obj, callback) {
			var ref = this;
			
			var queryStr = Object.toQueryString(obj);
			var fullURL = this.jsp;
			log('FULL URL:'+fullURL);
			//alert(obj);	
			new Ajax.Request (fullURL, {
				method: 'post',
				parameters:{frontEndJSON:obj},
				onSuccess: function (transport) {
					ref.parseXML(transport, callback);
				},
				onComplete: function (transport) { log(ref.xml + " loaded completely"); },
				onFailure: function (transport) { log(ref.xml + " failed to load");	}
			})	
		
		},
		
		parseXML: function (obj, callback) {
			log('parsed email xml: '+selectedSource);
			
			buildAutoResponseContent(obj);
				
			if(callback) callback();
		}
	}

/*
 * Ajax Time out Request Error Handling
 * 
 */

//JavaScript Document
function callInProgress (xmlhttp) {
	
						switch (xmlhttp.readyState)
						{
						case 1: case 2: case 3:
						return true;
						break;
						// Case 4 and 0
						default:
						return false;
						break;
						}
}


function showFailureMessage(request) {
//alert('Your Request is taking longer than expected, please continue to wait');
log('*****Server Request running more than 5 seconds*****');
}
// Register global responders that will occur on all AJAX requests
Ajax.Responders.register({
						 
		onCreate: function(request) {
					request['timeoutId'] = window.setTimeout(
									function() {
										// If we have hit the timeout and the AJAX request is active, abort it and let the user know
												if (callInProgress(request.transport))
												{
												//request.transport.abort();
												showFailureMessage(request.transport);
												// Run the onFailure method if we set one up when creating the AJAX object
																if (request.options['onFailure']) {
																//request.options['onFailure'](request.transport, request.json);
																}
												}
									},
									2000 // Five seconds
									); // end setTimeout
		},// ends onCreate:Function
		onComplete: function(request) {
		// Clear the timeout, the request completed ok
		window.clearTimeout(request['timeoutId']);
		}
});

