var app = function(){
var urlPath = window.location.pathname;
var regexAdmin = /^\/admin\//i;
var regexInternal = /^\/internal\//i;
if(regexAdmin.test(urlPath)){return {name: 'Admin', path: '../'};}
else if(regexInternal.test(urlPath)){return {name: 'Internal', path: '../'};}
else{return {name: 'Service', path: './'};}}();

var volume = 0;
var xsltDoc = null;
var xmlDoc = null;
var filterXsltDoc = null;

var getXmlDoc = function(volumeID, channel, fctn, alwaysRefresh){
var setXmlDoc = function(http){
xmlDoc = xml.parse(http.responseText);
if(fctn){fctn();}};
if(xmlDoc !== null){
if(volumeID !== volume || alwaysRefresh){
volume = volumeID;
req.getReqExe('action=Newsletter_getNewsletter&vol=' + volumeID + '&ch=' + channel, setXmlDoc, app.path + 'QLHandler.ashx');}
else{if(fctn){fctn();}}}
else{
volume = volumeID;
req.getReqExe('action=Newsletter_getNewsletter&vol=' + volumeID + '&ch=' + channel, setXmlDoc, app.path + 'QLHandler.ashx');}};

var getFilterXsltDoc = function(){
if(app.name !== 'Service'){
setFilterXsltDoc = function(http){filterXsltDoc = xml.parse(http.responseText);};
req.getReqExe('', setFilterXsltDoc, '../NewsletterTemplates/ChannelFilter.xslt');}}();

var getXsltDoc = function(){
var type = function(){
if(app.name === 'Service'){return 'WEB';}
else{return 'EMAIL';}}();
setXsltDoc = function(http){xsltDoc = xml.parse(http.responseText);};
req.getReqExe('action=Newsletter_getTemplate&type=' + type, setXsltDoc, app.path + 'QLHandler.ashx');}();

var setFilteredDoc = function(acct){
var filteredDoc = null;
if(window.XSLTProcessor){	// MOZILLA
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(filterXsltDoc);
xsltProcessor.setParameter(null, 'acctID', '#' + acct);
filteredDoc = xsltProcessor.transformToDocument(xmlDoc);}
else if(window.ActiveXObject){ // IE
filteredDoc = function(){
var progIDs = ['Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0'];
for(var i=0; i<progIDs.length; i+=1){
try{
var xmlDOM = new ActiveXObject(progIDs[i]);
return xmlDOM;}
catch(ex){}}}();
filteredDoc.setProperty('SelectionLanguage', 'XPath');
filteredDoc.setProperty('AllowDocumentFunction', true);
var param = xml.getNodesByTagNameNS.apply(filterXsltDoc, ['http://www.w3.org/1999/XSL/Transform', 'xsl:param'])[0];
param.setAttribute('name', 'acctID');
param.setAttribute('select', '\'#' + acct + '\'');
xmlDoc.transformNodeToObject(filterXsltDoc, filteredDoc);}
return filteredDoc;};

var setArticles = function(){
var items = [];
var nlDivs = window.document.getElementById('newsletter').getElementsByTagName('table');
for(var i=0; i<nlDivs.length; i+=1){if(nlDivs[i].className === 'item' || nlDivs[i].className === 'widget'){items.push(nlDivs[i]);}}
return items;};

var renderWidgets = function(){
if(!window.document.all){
var items = window.document.getElementById('newsletter').getElementsByTagName('table');
for(var i=0; i<items.length; i+=1){
if(items[i].className === 'widget'){
var fontNode = items[i].getElementsByTagName('font')[0];
fontNode.innerHTML = fontNode.childNodes[0].data;}}}};

var setStyleParams = function(styleObj, rdfDoc, isEditMode){
if(container.innerHTML !== ''){container.innerHTML = '';}	
var serializeAcctBranch = function(acct){
var acctsString = acct;
for(var i=0; i<acctBranch.length; i+=1){acctsString +=  ',' + acctBranch[i];}
return acctsString;};
var hColor = (styleObj.headlineColor !== '')? styleObj.headlineColor: '000000';
var fColor = (styleObj.footerColor !== '')? styleObj.footerColor: 'FAFAFA';
var bColor = (styleObj.bgColor !== '')? styleObj.bgColor: 'FAFAFA';
var acct = null;
if(window.XSLTProcessor){ // --MOZILLA--
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsltDoc);
xsltProcessor.setParameter(null, 'app', app.name);
if(app.name === 'Service'){xsltProcessor.setParameter(null, 'mode', 'view');}
else{xsltProcessor.setParameter(null, 'mode', 'edit');}
if(window.document.getElementById('publishedList')){
acct = parseInt(window.document.getElementById('publishedList').options[window.document.getElementById('publishedList').selectedIndex].parentNode.id.match(/\d+/), 10);
xsltProcessor.setParameter(null, 'displayAcct', acct);
xsltProcessor.setParameter(null, 'acctVector', serializeAcctBranch(acct));}
else if(querySet.acctid){
xsltProcessor.setParameter(null, 'displayAcct', querySet.acctid);
xsltProcessor.setParameter(null, 'acctVector', serializeAcctBranch(acctBranch));}
else{
xsltProcessor.setParameter(null, 'displayAcct', channelSet.activeChannel);
xsltProcessor.setParameter(null, 'acctVector', serializeAcctBranch(channelSet.activeChannel));}
xsltProcessor.setParameter(null, 'hColor', hColor);
xsltProcessor.setParameter(null, 'fColor', fColor);
xsltProcessor.setParameter(null, 'bColor', bColor);
container.appendChild(xsltProcessor.transformToFragment(rdfDoc, window.document));	}
else{
var filterXslt = function(){
var progIDs = ['Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0'];
for(var i=0; i<progIDs.length; i+=1){
try{
var xmlDOM = new ActiveXObject(progIDs[i]);
return xmlDOM;}
catch(ex){}}}();
filterXslt.setProperty('SelectionLanguage', 'XPath');
filterXslt.setProperty('AllowDocumentFunction', true);
var params = xml.getNodesByTagNameNS.apply(xsltDoc, ['http://www.w3.org/1999/XSL/Transform', 'xsl:param']);
for(var i=0; i<params.length; i+=1){
if(params[i].getAttribute('name') === 'app'){params[i].setAttribute('select', '\'' + app.name + '\'');}
else if(params[i].getAttribute('name') === 'mode'){params[i].setAttribute('select', '\'' + 'edit' + '\'');}
else if(params[i].getAttribute('name') === 'displayAcct'){
if(window.document.getElementById('publishedList')){
acct = parseInt(window.document.getElementById('publishedList').options[window.document.getElementById('publishedList').selectedIndex].parentNode.id.match(/\d+/), 10);
params[i].setAttribute('select', '\'' + acct + '\'');}
else if(querySet.acctid){params[i].setAttribute('select', '\'' + querySet.acctid + '\'');}
else{params[i].setAttribute('select', '\'' + channelSet.activeChannel + '\'');}}
else if(params[i].getAttribute('name') === 'acctVector'){
if(window.document.getElementById('publishedList')){
acct = parseInt(window.document.getElementById('publishedList').options[window.document.getElementById('publishedList').selectedIndex].parentNode.id.match(/\d+/), 10);
params[i].setAttribute('select', '\'' + serializeAcctBranch(acct) + '\'');}
else if(querySet.acctid){params[i].setAttribute('select', '\'' + serializeAcctBranch(acctBranch) + '\'');}
else{params[i].setAttribute('select', '\'' + serializeAcctBranch(channelSet.activeChannel) + '\'');}}
else if(params[i].getAttribute('name') === 'hColor'){params[i].setAttribute('select', '\'' + hColor + '\'');}
else if(params[i].getAttribute('name') === 'fColor'){params[i].setAttribute('select', '\'' + fColor + '\'');}
else if(params[i].getAttribute('name') === 'bColor'){params[i].setAttribute('select', '\'' + bColor + '\'');}}
var transformedDoc = rdfDoc.transformNode(xsltDoc);
container.innerHTML = transformedDoc;}
if(isEditMode){editor.activateEditorTool();}
renderWidgets();};

var setNewsletterStyle = function(acct, rdfDoc, isEditMode){
var setStyle = function(http){
var styleProperties = JSON.parse(http.responseText);
setStyleParams(styleProperties, rdfDoc, isEditMode);
if(app.name !== 'Service'){
if(styleProperties.headlineColor === ''){window.document.getElementById('banner').style.display = 'none';}
else{window.document.getElementById('banner').style.display = 'inline';}}};
req.getReqExe('action=AcctNewsletterValues_getNLStyleProperties&acctID=' + acct, setStyle, app.path + 'QLHandler.ashx');};

var displayNewsletter = function(acct, rdfDoc, isEditMode){
var setMenu = function(http){
var xmlMenu = xml.parse(http.responseText);
var newRdfDoc = function(){
if(window.document.all){return xml.parse(rdfDoc.documentElement.xml);}
else{return rdfDoc;}}();
newRdfDoc.documentElement.appendChild(xmlMenu.firstChild);
setNewsletterStyle(acct, newRdfDoc, isEditMode);};
req.getReqExe('2plus2=5', setMenu, '../NewsletterTemplates/ToolBars.xml');};

var displayNewsletterView = function(rdfDoc){setNewsletterStyle(acctID, rdfDoc, false);};

var renderNewsletter = function(acct){
channelSet = new ChannelGroups(acct, acctBranch);
var filteredDoc = setFilteredDoc(channelSet.displayedChannel);
displayNewsletter(acct, filteredDoc, true);};

var refreshNewsletter = function(){
renderNewsletter(channelSet.activeChannel);
window.document.getElementById('editor').style.display = 'none';
setEditLockOn(true);};

var volCtl = function(ddlCtl, isPublished){
var buildDropDown = function(txt){
var buildLabel = function(){
var ddlLabel = window.document.createElement('label');
ddlLabel.htmlFor = 'publishedList';
if(isPublished){ddlLabel.innerHTML = 'Past Newsletters';}
else{ddlLabel.innerHTML = 'Upcoming Newsletters';}
return ddlLabel;};
ddlCtl.appendChild(buildLabel());
ddlCtl.innerHTML += txt;
var volumeList = ddlCtl.getElementsByTagName('select')[0];
volumeList.id = 'publishedList';
var getNewsletter = function(opt){
var volumeID = parseInt(opt.id.match(/\d+/), 10);
var channel = parseInt(opt.value.match(/\d+/),10);
var buildContent = function(){
if(app.name === 'Admin'){
if(opt.value !== 'default'){
var acct = opt.parentNode.id.match(/\d+/);
window.document.getElementById('acctName').innerHTML = opt.parentNode.label;
displayNewsletter(acct, xmlDoc, false);}}
else{
displayNewsletterView(xmlDoc);}};
getXmlDoc(volumeID, channel, buildContent, true);};
if(volumeList.options[0].value !== 'empty'){
if(app.name === 'Service'){getNewsletter(volumeList.options[0]);}
else{
var optGroups = volumeList.getElementsByTagName('optgroup');
if(optGroups.length > 1){
var acctPairs = [acctVector, JSON.parse(cookies.get('anv'))];
for(var i=0; i<optGroups.length; i+=1){
if(optGroups[i].getElementsByTagName('option').length === 0){optGroups[i].style.display = 'none';}
optGroups[i].label = acctPairs[1][i];}}}
volumeList.onchange = function(){
var opt = volumeList.options[volumeList.selectedIndex];
getNewsletter(opt);};}};

var parseResponse = function(http){
if(window.document.all){ // Continuing to enable a crappy browser
var ab = http.responseText.match(/\[[0-9,]+\]/);
acctBranch = JSON.parse(ab);
acctBranch.reverse();
var idx = http.responseText.search(/</g);
var tb = http.responseText.slice(idx, -1);
buildDropDown(tb);}
else{
var tmpObj = JSON.parse(http.responseText);
acctBranch = tmpObj.acctBranch;
acctBranch.reverse();
buildDropDown(tmpObj.table);}};
var qstring = '&accountID=' + acctID + '&usage=' + app.name;
if(querySet.volumeid){
if(isPublished){req.getReqExe('action=Newsletter_getPublishedList&vol=' + querySet.volumeid + qstring, buildDropDown, app.path + 'QLHandler.ashx');}
else{req.getReqExe('action=Newsletter_getUnpublishedList&vol=' + querySet.volumeid + qstring, buildDropDown, app.path + 'QLHandler.ashx');}}
else{
if(isPublished){req.getReqExe('action=Newsletter_getPublishedList' + qstring, parseResponse, app.path + 'QLHandler.ashx');}
else{req.getReqExe('action=Newsletter_getUnpublishedList' + qstring, parseResponse, app.path + 'QLHandler.ashx');}}};

var setAcctBranch = function(acct){
var parseRsp = function(http){
acctBranch = JSON.parse(http.responseText);};
req.getReqExe('action=AcctBranch_getBranch&acctID=' + acct, parseRsp, '../QLHandler.ashx');};

var styleAcctLists = function(){ //Sorry so messy, did this in a hurry
	var acctLists = window.document.getElementById('acctList').getElementsByTagName('dl');
	var acctListsLength = acctLists.length;
	var setAcctDataSets = function(id){
	setAcctBranch(parseInt(id,10));
	};
	for(var i=0; i<acctListsLength; i+=1){
	if(acctLists[i].getElementsByTagName('dt').length > 0){
	for(var j=0; j<acctLists[i].getElementsByTagName('dd').length; j+=1){
	acctLists[i].getElementsByTagName('dd')[j].style.display = 'none';}
	acctLists[i].getElementsByTagName('dt')[0].onclick = function(){
	return function(){
	acctVector = function(br){
	var leafs = br.parentNode.getElementsByTagName('dd');
	var arr = [];
	for(var n=0; n<leafs.length; n+=1){arr.push(parseInt(leafs[n].id,10));}
	return arr;}(this);
	setAcctDataSets(this.id);
	acctCtls.showLeaf(parseInt(this.id,10), this.innerHTML);
	for(var k=0; k<this.parentNode.getElementsByTagName('dd').length; k+=1){
	if(this.parentNode.getElementsByTagName('dd')[k].style.display === 'block'){
	this.parentNode.getElementsByTagName('dd')[k].style.display = 'none';}
	else{
	this.parentNode.getElementsByTagName('dd')[k].style.display = 'block';
	this.parentNode.getElementsByTagName('dd')[k].onclick = function(){
	return function(){
	acctVector = [];
	setAcctDataSets(this.id);
	acctCtls.showLeaf(parseInt(this.id,10), this.innerHTML);};}();}}};}();}
	else {
	for(var m=0; m<acctLists[i].getElementsByTagName('dd').length; m+=1){
	acctLists[i].getElementsByTagName('dd')[m].onclick = function(){
	return function(){
	acctVector = [];
	setAcctDataSets(this.id);
	acctCtls.showLeaf(parseInt(this.id,10), this.innerHTML);
	};
	}();
	}
	}
	}
};

var renderPage = function(thisRow){
	var buildContent = function(){
		if(app.name === 'Internal'){
			acctID = parseInt(thisRow.cells[1].id.match(/\d+/),10);
			setAcctBranch(acctID);
			acctVector = function(){
				var arr = [];
				var channels = rss.getChannels();
				
				for(var i=0; i<channels.length; i+=1){
					if(channels[i] !== acctID){arr.push(channels[i]);}
				}
				return arr;
			}();

			if(window.document.getElementById('accountDiv')){
				window.document.getElementById('accountDiv').style.display = 'block';
			}

			nlCtls.acctHeader.innerHTML = 'VOLUME: ' + volume;

			var qstring = 'action=Volume_getUnPublishedAcctsList&volume=' + volume;
			
			var buildList = function(http){
			window.document.getElementById('acctList').innerHTML = '<h3>Unpublished Accounts</h3>' + http.responseText;
			styleAcctLists();};
			req.getReqExe(qstring, buildList, '../QLHandler.ashx');
		}
		else if(app.name === 'Admin'){
			nlCtls.setBranchMode();
		}
		renderNewsletter(acctID);
		setEditLockOn(false);
		acctCtls.buildLists();
	};
	
	nlCtls.showAll(thisRow.cells[2].innerHTML);
	var volumeID = parseInt(thisRow.cells[0].innerHTML.match(/\d+/), 10);
	newItems = [];
	editor.editNode.style.display = 'none';
	getXmlDoc(volumeID, '0', buildContent, false);
};

var configTable = function(tableString){
	tbl.table = window.document.getElementById('resultsTable');
	tbl.insertTable(tableString, false);
	tbl.hideColumn(0);
	tbl.initRowEvts(renderPage);
	tbl.colorRows();
	tbl.initSort();
};