var DocumentLists = Array();
var XssRequestQueue = Array();
var DocumentListCurrentSessionID = null;
var DocumentListBasePath = "http://docmgt.dundeewealth.com/file_download_centre/getdocumentlist/?";
var RegisterPageProperties = null;

DEFAULT_CONFIG = { 
	DEFAULT_CATEGORIES : ["All"],
	DEFAULT_DOCUMENT_CATEGORIES : ["All"],
	DEFAULT_DISPLAY_DATE : false,
	DEFAULT_DISPLAY_DESCRIPTION : false,
	DEFAULT_DISPLAY_CATEGORIES : true,
	DEFAULT_ALLOW_CART_ADD : true,
	DEFAULT_DISPLAY_CART_DETAILS : true,
	DEFAULT_DAYS_PUBLISHED : "",
	DEFAULT_DAYS_UPDATED : "",
	DEFAULT_DATE_FORMAT : "",
	DEFAULT_REMOVE_IF_EMPTY : "",
	DEFAULT_SHOW_IF_DOCS : "",
	DEFAULT_MAX_FILES : "",
	DEFAULT_SORT_CRITERIA : "",
	DEFAULT_SHOW_IMAGE_ICONS : false,
	DEFAULT_SITES : [""]
	}

if(typeof CONFIG != "undefined")
{
	if (typeof CONFIG.DEFAULT_CATEGORIES != "undefined") DEFAULT_CONFIG.DEFAULT_CATEGORIES = CONFIG.DEFAULT_CATEGORIES;
	if (typeof CONFIG.DEFAULT_DOCUMENT_CATEGORIES != "undefined") DEFAULT_CONFIG.DEFAULT_DOCUMENT_CATEGORIES = CONFIG.DEFAULT_DOCUMENT_CATEGORIES;

	if (typeof CONFIG.DEFAULT_DISPLAY_DATE != "undefined") DEFAULT_CONFIG.DEFAULT_DISPLAY_DATE = CONFIG.DEFAULT_DISPLAY_DATE;
	if (typeof CONFIG.DEFAULT_DISPLAY_DESCRIPTION != "undefined") DEFAULT_CONFIG.DEFAULT_DISPLAY_DESCRIPTION = CONFIG.DEFAULT_DISPLAY_DESCRIPTION;
	if (typeof CONFIG.DEFAULT_DISPLAY_CATEGORIES != "undefined") DEFAULT_CONFIG.DEFAULT_DISPLAY_CATEGORIES = CONFIG.DEFAULT_DISPLAY_CATEGORIES;
	if (typeof CONFIG.DEFAULT_ALLOW_CART_ADD != "undefined") DEFAULT_CONFIG.DEFAULT_ALLOW_CART_ADD = CONFIG.DEFAULT_ALLOW_CART_ADD;
	if (typeof CONFIG.DEFAULT_DISPLAY_CART_DETAILS != "undefined") DEFAULT_CONFIG.DEFAULT_DISPLAY_CART_DETAILS = CONFIG.DEFAULT_DISPLAY_CART_DETAILS;
	if (typeof CONFIG.DEFAULT_DAYS_PUBLISHED != "undefined") DEFAULT_CONFIG.DEFAULT_DAYS_PUBLISHED = CONFIG.DEFAULT_DAYS_PUBLISHED;
	if (typeof CONFIG.DEFAULT_DAYS_UPDATED != "undefined") DEFAULT_CONFIG.DEFAULT_DAYS_UPDATED = CONFIG.DEFAULT_DAYS_UPDATED;
	if (typeof CONFIG.DEFAULT_DATE_FORMAT != "undefined") DEFAULT_CONFIG.DEFAULT_DATE_FORMAT = CONFIG.DEFAULT_DATE_FORMAT;
	if (typeof CONFIG.DEFAULT_REMOVE_IF_EMPTY != "undefined") DEFAULT_CONFIG.DEFAULT_REMOVE_IF_EMPTY = CONFIG.DEFAULT_REMOVE_IF_EMPTY;
	if (typeof CONFIG.DEFAULT_SHOW_IF_DOCS != "undefined") DEFAULT_CONFIG.DEFAULT_SHOW_IF_DOCS = CONFIG.DEFAULT_SHOW_IF_DOCS;
	if (typeof CONFIG.DEFAULT_MAX_FILES != "undefined") DEFAULT_CONFIG.DEFAULT_MAX_FILES = CONFIG.DEFAULT_MAX_FILES;
	if (typeof CONFIG.DEFAULT_SORT_CRITERIA != "undefined") DEFAULT_CONFIG.DEFAULT_SORT_CRITERIA = CONFIG.DEFAULT_SORT_CRITERIA;
	if (typeof CONFIG.DEFAULT_SHOW_IMAGE_ICONS != "undefined") DEFAULT_CONFIG.DEFAULT_SHOW_IMAGE_ICONS = CONFIG.DEFAULT_SHOW_IMAGE_ICONS;

	if (typeof CONFIG.DEFAULT_SITES != "undefined") DEFAULT_CONFIG.DEFAULT_SITES = CONFIG.DEFAULT_SITES;
}

var XssRequest = function (url) {
	this.URL = url;

	this.DoRequest = function () {
		var NewScript = document.createElement("script");
		// Random QueryString parameter added to prvent IE caching.
		var QueryStringStarter = String(self.URL).indexOf("?") >= 0 ? "&" : "?";
		NewScript.src = self.URL + (DocumentListCurrentSessionID ? QueryStringStarter + "s=" + DocumentListCurrentSessionID + "&" : QueryStringStarter) + Math.floor((Math.random()*1000000000000)) + "=" + Math.floor((Math.random()*1000000000000));
		document.getElementsByTagName("head")[0].appendChild(NewScript);
	}

	var self = this;

	XssRequestQueue.push(this);
	if (XssRequestQueue.length == 1) {
		XssRequestQueue[0].DoRequest();
	}
}


var DocumentList = function (containerID, options) {
	this.Index = DocumentLists.length;
	this.ContainerID = containerID;
	this.ContainerElement = document.getElementById(this.ContainerID);
	this.Options = typeof(options) == "undefined" ? {} : options;

	this.Categories = typeof(this.Options.categories) == "object" ? this.Options.categories : DEFAULT_CONFIG.DEFAULT_CATEGORIES;
	this.CategoryString = "";
	var Comma = "";
	for (var i=0; i<this.Categories.length; i++) {
		this.CategoryString += Comma + String(this.Categories[i]).replace(/,/g, "<comma>");
		Comma = ",";
	}

	this.DocumentCategories = typeof(this.Options.documentCategories) == "object" ? this.Options.documentCategories : DEFAULT_CONFIG.DEFAULT_DOCUMENT_CATEGORIES;
	this.DocumentCategoryString = "";
	var Comma = "";
	for (var i=0; i<this.DocumentCategories.length; i++) {
		this.DocumentCategoryString += Comma + String(this.DocumentCategories[i]).replace(/,/g, "<comma>");
		Comma = ",";
	}
	
	this.Sites = typeof(this.Options.sites) == "object" ? this.Options.sites : DEFAULT_CONFIG.DEFAULT_SITES;
	this.SitesString = "";
	var Comma = "";
	for (var i=0; i<this.Sites.length; i++) {
		this.SitesString += Comma + String(this.Sites[i]).replace(/,/g, "<comma>");
		Comma = ",";
	}
	

	this.DisplayDate = typeof(this.Options.displayDate) == "boolean" ? this.Options.displayDate : DEFAULT_CONFIG.DEFAULT_DISPLAY_DATE;
	this.DisplayDescription = typeof(this.Options.displayDescription) == "boolean" ? this.Options.displayDescription : DEFAULT_CONFIG.DEFAULT_DISPLAY_DESCRIPTION;
	this.DisplayCategories = typeof(this.Options.displayCategories) == "boolean" ? this.Options.displayCategories : DEFAULT_CONFIG.DEFAULT_DISPLAY_CATEGORIES;

	this.AllowCartAdd = typeof(this.Options.allowCartAdd) == "boolean" ? this.Options.allowCartAdd : DEFAULT_CONFIG.DEFAULT_ALLOW_CART_ADD;
	this.DisplayCartDetails = typeof(this.Options.displayCartDetails) == "boolean" ? this.Options.displayCartDetails : DEFAULT_CONFIG.DEFAULT_DISPLAY_CART_DETAILS;

	this.DaysPublished = (this.Options.daysPublished?escape(this.Options.daysPublished):DEFAULT_CONFIG.DEFAULT_DAYS_PUBLISHED);
	this.DaysUpdated = (this.Options.daysUpdated?escape(this.Options.daysUpdated):DEFAULT_CONFIG.DEFAULT_DAYS_UPDATED);
	this.DateFormat = (this.Options.dateFormat?escape(this.Options.dateFormat):DEFAULT_CONFIG.DEFAULT_DATE_FORMAT);

	this.RemoveIfEmpty = (this.Options.removeIfEmpty?escape(this.Options.removeIfEmpty):DEFAULT_CONFIG.DEFAULT_REMOVE_IF_EMPTY);
	this.ShowIfDocs =  (this.Options.showIfDocs?escape(this.Options.showIfDocs):DEFAULT_CONFIG.DEFAULT_SHOW_IF_DOCS);
	this.MaxFiles = (this.Options.maxFiles?escape(this.Options.maxFiles):DEFAULT_CONFIG.DEFAULT_MAX_FILES);
	this.SortCriteria = (this.Options.sortCriteria?escape(this.Options.sortCriteria):DEFAULT_CONFIG.DEFAULT_SORT_CRITERIA);

	this.ShowImageIcons = (this.Options.showImageIcons?escape(this.Options.showImageIcons):DEFAULT_CONFIG.DEFAULT_SHOW_IMAGE_ICONS);

	this.AddRemoveDocument = function (DocumentList_AddToCartCheckbox) {
		var DocumentID = String(DocumentList_AddToCartCheckbox.id);
		DocumentID = DocumentID.substring(DocumentID.lastIndexOf("_")+1, DocumentID.length);

		if (DocumentList_AddToCartCheckbox) {
			new XssRequest(
					DocumentListBasePath +
					"Referrer=" + (RegisterPageProperties?RegisterPageProperties.Page:escape(window.location.href)) +
					"&ReferrerTitle=" + (RegisterPageProperties?RegisterPageProperties.DocumentTitle:escape(document.title)) +
					"&Index=" + self.Index +
					"&ContainerID=" + self.ContainerID +
					"&CategoryString=" + escape(this.CategoryString) +
					"&DocumentCategoryString=" + escape(this.DocumentCategoryString) +
					"&SitesString=" + escape(this.SitesString) +
					"&DisplayDate=" + self.DisplayDate +
					"&DisplayDescription=" + self.DisplayDescription +
					"&DisplayCategories=" + self.DisplayCategories +
					"&AllowCartAdd=" + self.AllowCartAdd +
					"&DisplayCartDetails=" + self.DisplayCartDetails +
					(DocumentList_AddToCartCheckbox.checked ? "&AddToCart=" + DocumentID : "&RemoveFromCart=" + DocumentID) +
					"&Language=" + (RegisterPageProperties?RegisterPageProperties.Language:"en") +
					"&DaysPublished=" + self.DaysPublished +
					"&DaysUpdated=" + self.DaysUpdated +
					"&DateFormat=" + self.DateFormat +
					"&MaxFiles=" + self.MaxFiles +
					"&RemoveIfEmpty=" + escape(self.RemoveIfEmpty) +
					"&ShowIfDocs=" + escape(self.ShowIfDocs) +
					"&SortCriteria=" + escape(self.SortCriteria) +
					"&ShowImageIcons=" + escape(self.ShowImageIcons)
					);
		}
	}

	this.RefreshSelf = function() {
		new XssRequest(
				DocumentListBasePath +
				"Referrer=" + (RegisterPageProperties?RegisterPageProperties.Page:escape(window.location.href)) +
				"&ReferrerTitle=" + (RegisterPageProperties?RegisterPageProperties.DocumentTitle:escape(document.title)) +
				"&Index=" + self.Index +
				"&ContainerID=" + this.ContainerID +
				"&CategoryString=" + escape(this.CategoryString) +
				"&DocumentCategoryString=" + escape(this.DocumentCategoryString) +
				"&SitesString=" + escape(this.SitesString) +
				"&DisplayDate=" + this.DisplayDate +
				"&DisplayDescription=" + this.DisplayDescription +
				"&DisplayCategories=" + this.DisplayCategories +
				"&AllowCartAdd=" + this.AllowCartAdd +
				"&DisplayCartDetails=" + this.DisplayCartDetails +
				"&IsRefresh=true" +
				"&Language=" + (RegisterPageProperties?RegisterPageProperties.Language:"en") +
				"&DaysPublished=" + this.DaysPublished +
				"&DaysUpdated=" + this.DaysUpdated +
				"&DateFormat=" + this.DateFormat +
				"&MaxFiles=" + this.MaxFiles +
				"&RemoveIfEmpty=" + escape(this.RemoveIfEmpty) +
				"&ShowIfDocs=" + escape(this.ShowIfDocs) +
				"&SortCriteria=" + escape(this.SortCriteria) +
				"&ShowImageIcons=" + escape(this.ShowImageIcons)
				);
	}

	this.RefreshAll = function (IncludeSelf) {
		for (var i=0; i<DocumentLists.length; i++) {
			if (IncludeSelf || i != self.Index) {
				DocumentLists[i].RefreshSelf();
			}
		}
	}

	var self = this;

	this.RefreshSelf();

	DocumentLists.push(this);
}


var RegisterPage = function (options) {
	this.Options = typeof(options) == "undefined" ? {} : options;
	this.DocumentTitle = (this.Options.documentTitle ? escape(this.Options.documentTitle) : escape(document.title));
	this.Language = (this.Options.language ? this.Options.language : "en");
	this.Page = (this.Options.page ? escape(this.Options.page) : escape(window.location.href));

	var self = this;

	RegisterPageProperties = this;
}



