H4 = partial(createDOM,'H4');
H5 = partial(createDOM,'H5');
H6 = partial(createDOM,'H6');
EM = partial(createDOM,'EM');
COLGROUP = partial(createDOM,'COLGROUP');
CAPTION = partial(createDOM,'CAPTION');
COL = partial(createDOM,'COL');
OBJECT = partial(createDOM,'OBJECT');
EMBED = partial(createDOM,'EMBED');
PARAM = partial(createDOM,'PARAM');
SUB = partial(createDOM,'SUB');
SUP = partial(createDOM,'SUP');
STRONG = partial(createDOM,'STRONG');

String.prototype.parseFloat = function() {
	var value = parseFloat(this);
	if (isNaN(value)) {
		throw('NaN');
	}
	return value;
}
String.prototype.parseInt = function(radix) {
	var value = radix ? parseInt(this, radix) : parseInt(this);
	if (isNaN(value)) {
		throw('NaN');
	}
	return value;
}
function json(action, parms, callback, extra_callback) {
	jsonRequest(parms, callback, "page", action, extra_callback)
}	
function jsonRequest(parms, callback, server, action, extra_callback) {	
	
	if (action) {
		parms.action = action;
		parms.method = "json";
	} else {
		// special request for new backend, unwrap first object in reply
		var c = callback;
		callback = function(result) {
			c(result.response);
		}
	}
	$("loader").style.display = "block";
	if ($("loader_calc")) {
		$("loader_calc").style.display = "block";
	}
	var loaders = getExtralLoaders();
	for(var i = 0; i < loaders.length; i++) {
		loaders[i].style.display = "block";
	}
	try {
		var d = null;
		if ("page" == server) {
			d = loadJSONDoc(server, parms);
		} else {
			d = loadJSONDoc("srv/" + server, parms);
		}
			
		if (typeof extra_callback == "function") {
			var c = callback;
			callback = function() {
				c.apply(null, arguments);
				extra_callback.apply(null, arguments);
			};
		}
		d.addCallback(callback);
		d.addCallback(loader);
		d.addErrback(myonerror);
	} catch (e) {
		loader();
		log(e);
	} 
}
function getExtralLoaders() {
	return $$("img[name=loader_calc]");
}
function loader() {
	$("loader").style.display = "none";
	if ($("loader_calc")) {
		$("loader_calc").style.display = "none";
	}
	var loaders = getExtralLoaders();
	for(var i = 0; i < loaders.length; i++) {
		loaders[i].style.display = "none";
	}
}
function createObject(from, to, rest) {
	if (!rest) rest = {};
	rest[from] = to;
	return rest;
}

function trim(s) {
	return s.replace(/^\s+|\s+$/, "");
}

function myonerror() {
	map(myerror, arguments);
}
function myerror(e) {
	for (i in e) {
		logError(i, e[i]);
	}
}

if (parseQueryString(document.location.search).pane == "1") {
	createLoggingPane();
}

var non_flash_identifiers = ['x11'];
var non_flash_regexp = new RegExp(non_flash_identifiers.join("|"),"gi");

// objects for later use
var dict, hist, myplanner, calc, thepage, lookup, search, bank_book, calendar;
var quotations, campaign, brochure, frontpage, externalCalc, necalc, ne_model;
var new_customer_info_campaign, savings_page,bms_page;

function init() {
	// set flash bg
	var hasRequestedVersion = DetectFlashVer(8, 0, 0);
	if (!non_flash_regexp.test(navigator.userAgent) && hasRequestedVersion) {
		// no transparent flash support on some browser identified by the above regexp
		//spring=background_foraar.swf
		var so = new SWFObject(base_path+"flash/background_efteraar3.swf", "flashbgcontent", "100%", "100%", "0", "#FFFFFF");
		so.addParam("allowScriptAccess", "always");
		so.addParam("wmode", "transparent");
		so.write("flashbg");
	}
	// collapse collapseme's in menu
	var uls = document.getElementById("menu").getElementsByTagName("ul");
	for (var i = 0; i < uls.length; i++) {
		if (hasElementClass(uls[i], "collapseme")) {
			setElementClass(uls[i], "collapsed");
		}
	}
}
function collapseAll() {
//	var uls = document.getElementById("menu").getElementsByTagName("ul");
//	for (var i = 0; i < uls.length; i++) {
//		if (!(
//			hasElementClass(uls[i], "p1") || 
//			hasElementClass(uls[i], "p2") || 
//			hasElementClass(uls[i], "p3") || 
//			hasElementClass(uls[i], "p4") || 
//			hasElementClass(uls[i], "p5") || 
//			hasElementClass(uls[i], "p6") || 
//			hasElementClass(uls[i], "p7") ||
//			hasElementClass(uls[i], "p8") ||
//			hasElementClass(uls[i], "p9")
//		)) {
//			setElementClass(uls[i], "collapsed");
//		}
//	}
}
function combine(keys, values) {
	var o = {};
	for (var i = 0; i < keys.length; i++)
		if (o[keys[i]]) {
			if (o[keys[i]].constructor != [].constructor) {
				var tmp = o[keys[i]];
				o[keys[i]] = [];
				o[keys[i]].push(tmp);
			}
			o[keys[i]].push(values[i]);
		} else {
			o[keys[i]] = values[i];
		}
	return o;
}
addLoadEvent(init);
// new glow functionality for banner
var onMouseDownRemoveGlow;
function makeGlow(what) {
	var es = $$(what);
	if (es && es.length > 0 && es[0].nodeType) {
		removeGlow();
		var e = es[0];
		var border = 5;
		var size = getElementDimensions(e);
		var pos = getElementPosition(e);
		appendChildNodes("mainwrapper", DIV({style:{position:"absolute",top:(pos.y-border)+"px",left:(pos.x-border)+"px"},id:"glow"}));
		var so = new SWFObject(base_path+"flash/glow.swf", "flashglow", size.w+border*2, size.h+border*2, "0", "#FFFFFF");
		so.addParam("wmode", "transparent");
		so.write("glow");
		onMouseDownRemoveGlow = connect(document, "onmousedown", removeGlow);
	}
}
function removeGlow() {
	if (onMouseDownRemoveGlow) {
		disconnect(onMouseDownRemoveGlow);
		onMouseDownRemoveGlow = null;
	}
	if ($("glow")) {
		removeElement("glow");
	}
}
function makeCalcsGlow() {
	removeElementClass($$("li.p1 ul")[0], "collapsed");
	makeGlow("li.p1");
}
function makeAboutGlow() {
	removeElementClass($$("li.p7 ul")[0], "collapsed");
	makeGlow("li.p7");
}
function makeEnvironmentGlow() {
	removeElementClass($$("li.p10 ul")[0], "collapsed");
	makeGlow("li.p10");
}
function makeAdvisorGlow() {
	makeGlow("#advisor");
}
function createLoader(prop) {
	return IMG({'id':prop.id, 'name':"custom_loader", 'src':"resources/images/loader.gif", 'class':prop.cssClass});
}