function Settings(parent) {
	this.parent=parent

	// Debug on/off
	this.debug=0

	// Full Function on/off
	this.use_full_function=0

	// Full Function HTML
	this.full_function_html="<em> Replace this string with your html </em>"

	// Text Descriptions
	this.txtdefault="All fonts provided in Opentype, TrueType and Postscript formats"
	this.txtfullset=0
	this.txtsets=0
	this.txtpro=0
	this.txtsingles=0

	// Opentype Support Page
	this.otsupporturl="http://www.p22.com/support/Opentype.html"

	// Functions
	this.setUserSettings=setUserSettings_fnct
	this.assignClassElements=assignClassElements_fnct
	this.displayErrorAlert=displayErrorAlert_fnct
	this.fullFunction=fullFunction_fnct
	this.preloadImages=preloadImages_fnct

	// MISC. Functions
	this.categoryFilter=categoryFilter_fnct
	this.sortCategory=sortCategory_fnct
}

function setUserSettings_fnct() {
	// Register function and call it, if it fails default settings will be used
	try {
		this.userSettings=userSettings_fnct
		this.userSettings()
	} catch(err) {
		this.displayErrorAlert(err)
	}

	// Set Default License URL -- this should not be here!
	for (var n in products) {
		var name=n
		var sku=products[n][0]
		var orderops=products[n][6]
		break;
	}
	this.parent.parent.view1.infodisplayer.setLicenseUrl(name, sku, orderops)

}

function assignClassElements_fnct() {
	with(this.parent.parent) {
		view1.desc=document.getElementById('bodytextwrap')
		view1.browser.browserdiv=document.getElementById('fontlist')

		with(view1.infodisplayer) {
			previewimg=document.getElementById('preview')
			familynamediv=document.getElementById('familyname')
			pricediv=document.getElementById('price')
			licenseurl=document.getElementById('order')
			//pdfurl=document.getElementById('pdfsrc')
		};
	};
}

function displayErrorAlert_fnct(e) {
	if (this.debug) {
		var lineNumber=e.lineNumber
		var message= e.message
		var name=e.name
		var stack=e.stack

		if(!message) message=e.description

		var error="APPLICATION ERROR\n\n\nType:\t" + name + "\nDesc:\t" + message + "\nLine#:\t" + lineNumber + "\n\n\nStack:\t" + stack

		alert(error)

	}
}

function fullFunction_fnct(elem) {
	if (this.use_full_function) {
		elem.innerHTML+='<br><br>'+this.full_function_html
	};
}

function preloadImages_fnct() {
	this.pre=new Array()
	var li=[products, sets, pro, singles]

	for (var i=0;i<li.length;i++) {
		var tbl=li[i]
		if (tbl) {
			for (var n in tbl) {
				var image= new Image();
				var url=String(tbl[n][1]) 
				image.src=url
				this.pre[n]=image
			}
		}
	}
}; 

// Misc Custom Functions

function categoryFilter_fnct(orig, dest, keep, move) {

	for (var n in orig) {

		if (keep) {
			ch=0

			for (var i=0; i<keep.length;i++) {
				if (n==keep[i]) { ch=1 }
			}
		} else {
			ch=1

			for (var i=0; i<move.length;i++) {
				if (n==move[i]) { ch=0 }
			}
		};

		if (!ch) {
			dest[n]=orig[n]
			delete orig[n]
		}
	};
};

function sortCategory_fnct(category) {
	var obj={}
	var li=[]

	for (var n in category) {
		li.push(n)
	};

	li.sort()

	for (var i=0;i<li.length;i++) {
		var n=li[i]
		obj[n]=category[n]

		delete category[n]
	};

	return obj
};

