var delayed_action = null, do_minimize = 0, instantload = 0, do_count = 0;
var posx=0, posy=0;
function mousemovehandler(e){
	var e=e||window.event;
	posx=e.pageX||e.clientX;posy=e.pageY||e.clientY;
}
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
Array.prototype.contains=function(e){for(i=0;i<this.length;i++)if(this[i]==e)return true}
var items = {};
function mv(id,name,second,type,shorty,post){o={};o.id=id;o.name=name;o.type=type;o.main=name.replace(/_from/,'').replace(/_to/,'');o.second=second;o.shorty=shorty;o.post=post;items[id]=o}
mv("mo", "mode", "", "input", 0, "");
mv("cc", "countrycode", "", "select", 1, "");
mv("pc", "postcode", "", "input", 1, "");
mv("mk", "modulkind", "", "select", 1, "");
mv("of", "orientation_from", "orientation_to", "select", 1, tr["degree"]);
mv("ot", "orientation_to", "", "select", 1, tr["degree"]);
mv("rf", "roofpitch_from", "roofpitch_to", "select", 1, tr["degree"]);
mv("rt", "roofpitch_to", "", "select", 1, tr["degree"]);
mv("pf", "plantsize_from", "plantsize_to", "input", 1, " kWp");
mv("pt", "plantsize_to", "", "input", 1, " kWp");
mv("cy", "constructionyear", "", "select", 1, "");
mv("wp", "withpicture", "", "checkbox", 1, "");
mv("wd", "withdata", "", "checkbox", 1, "");
mv("ws", "withsolar", "", "checkbox", 1, "");
mv("cp", "currentpage", "", "input", 0, "");
function getSecondObject(name) {
	for (var xitem in items) {
		o = items[xitem];
		if (o.name == name)
			return o;
	}
	return false;
}
function init() {
	if (gE("finished").id) {
		buildGraphics();
		if (gE("override_currentpage")) {
			var newPage = gE("override_currentpage").innerHTML;
			gE("currentpage").value = newPage;
			goToPage(newPage);
		}
	} else {
		window.setTimeout("init()", 2500);
	}
}
function buildHelp() {
	var helper = document.createElement("div");
	helper.id='helpcontainer';
	helper.className='opac95';
	document.body.insertBefore(helper, document.body.firstChild);
	var helps = getElementsByClass("help", document, "img");
	for (var i=0; i<helps.length; i++) {
		var help = helps[i];
		help.alt = help.title;
		help.title = "";
		help.onmousemove = moveWrapper;
		help.onmouseout = hideHelp;
	}
}
function moveWrapper(evt) {
	mousemovehandler(evt);
	showHelp(evt, this);
	return false;
}
function showHelp(evt, o) {
	var help = gE("helpcontainer");
	help.innerHTML = o.alt;
	help.style.top = (posy-5)+'px';
	help.style.left = (posx+14)+'px';
	help.style.display = 'inline';
}
function hideHelp(evt) {
	var help = gE("helpcontainer");
	help.innerHTML = '';
	help.style.display = 'none';
}
function buildGraphics() {
	var elements = document.getElementsByName("scripts");
	for (i=0; i<elements.length; i++) {
		var mainDiv = document.createElement("div");
		mainDiv.id = "balken"+String(id);
		mainDiv.style.position='relative';
		mainDiv.style.width = "160px";
		mainDiv.style.height = "80px";
		mainDiv.style.padding = "0px";
		mainDiv.className = "emboss";
		var id = elements[i].id;
		try {
			eval(elements[i].innerHTML?elements[i].innerHTML:elements[i].textContent);
			var div = zeichneErtrag(WRInfo, MaxWRP, AnzahlWR, Interval, StartPixel, m, mi, id);
			try {mainDiv.appendChild(getErtrag(WRInfo, da, AnlagenKWP))} catch(e) {};
		} catch(e) {
			var div = document.createElement("div");
			div.style.color = "orange";
			div.style.padding = "10px 0px 0px 3px";
			var txt = document.createTextNode(tr["rendering_error"]);
			div.appendChild(txt);
		}
		mainDiv.appendChild(div);
		gE("scriptcontainer"+id).appendChild(mainDiv);
	}
}
function printArray(arr) {var o="";for(var i=0;i<arr.length;i++)o=o+","+i+": "+arr[i];return o;}
function getErtrag(WRInfo, da, AnlagenKWP) {
	var last = da[da.length-1].split("|");
	var sum = 0;
	for(var i=0; i<WRInfo.length; i++){
		//alert(printArray(WRInfo[i]));
		// nur echte Wechselrichter und S0 als Wechselrichter
		if(WRInfo[i][11]==0 || (WRInfo[i][11]==2 && WRInfo[i][14]==0) || WRInfo[i][11]==5)
			sum+=parseInt(last[i+1].split(";")[0]);
	}
	var br = document.createElement("br");
	var etxt = document.createTextNode(fmt(sum, "wh"));
	if(AnlagenKWP > 0) {
		var ktxt = document.createTextNode(fmt(sum / AnlagenKWP) + " kWh/kWp");
	}
	else
	{
		var ktxt = document.createTextNode("");
	}
	var ediv = document.createElement("div");
	ediv.style.position='absolute';
	ediv.style.left='78px';
	ediv.style.width='80px';
	ediv.style.textAlign='right';
	ediv.style.fontSize='9px';
	ediv.style.top='1px';
	ediv.appendChild(ktxt);
	ediv.appendChild(br);
	ediv.appendChild(etxt);
	return ediv;
}
function update() {
	if (delayed_action) {
		window.clearTimeout(delayed_action);
	}
	delayed_action = window.setTimeout("getCounter()", 500);
}
function doSearch(m) {
	if(m)do_minimize=1;
	getResult();
}
function doFilterSearch(params, instant) {
	if (instant) instantload = 1;
	if (!params) return;
	setParams(params);
	gE("filterDelete").style.display='inline';
	getCounter();
}
function delFilter() {
	var savedfilter = gE("savedfilter");
	var index = savedfilter.selectedIndex;
	var filterid = savedfilter.options[index].value;
	gE("filterDelete").style.display='none';
	gE("filterDeleteWait").style.display='inline';
	ajax.init();
	ajax.setUserFunc("filterRemoved");
	ajax.request(URL+"filter_del&filterid="+filterid);
}
function filterRemoved(filterid) {
	gE("filterDelete").style.display='inline';
	gE("filterDeleteWait").style.display='none';
	var savedfilter = gE("savedfilter");
	for (var i=0; i<savedfilter.options.length; i++)
		if (savedfilter.options[i].value == filterid)
			savedfilter.remove(i);
	gE("filterDelete").style.display="none";
}
function filterDeletable(o) {
	gE("filterDelete").style.display=o.options[o.selectedIndex].value ? "inline" : "none";
}
function gE(id) {
	return document.getElementById(id);
}
function gS(id, type, esc, ihtml) {
	var e = gE(id);
	if (!e) {
		return "";
	}
	if (id=="ip")
		type = e.multiple ? "multiselect" : "select";
	if (type == "input") {
		v = esc ? escape(e.value) : e.value
		return v;
	}
	if (type == "select") {
		v = esc ? escape(e.options[e.selectedIndex].value) : (ihtml ? e.options[e.selectedIndex].innerHTML : e.options[e.selectedIndex].value);
		return v;
	}
	if (type == "multiselect") {
		var res = new Array();
		for (i=0; i<e.options.length; i++) {
			t = e.options[i];
			if (t.selected) {
				v = esc ? escape(t.value) : t.value;
				res.push(v);
			}
		}
		return res.join("::");
	}
	if (type == "checkbox") {
		return e.checked ? 1 : 0;
	}
	return "";
}
function sS(id, value) {
	var o = items[id];
	var e = gE(o.name);
	var type = o.type;
	if (id=="ip")
		type = e.multiple ? "multiselect" : "select";
	if (type == "input")
		e.value = value;
	if (type == "select")
		for (var i=0; i<e.options.length; i++)
			if (e.options[i].value == value) {
				e.selectedIndex = i;
				break;
			}
	if (type == "multiselect") {
		var values = value.split("::");
		for (var i=0; i<e.options.length; i++) {
			var option = e.options[i];
			if (values.contains(option.value))
				option.selected = true;
		}
	}
	if (type == "checkbox")
		e.checked = parseInt(value);
}
function buildShortyContent(o) {
	if (!gE("label_"+o.main))
		return;
	var v = gE("label_"+o.main).innerHTML.replace(/<br>/i,'')+" ", k1 = "", v1 = "", k2 = "", v2 = "";
	if (o.type == "multiselect") {
		k1 = gS(o.name, o.type).split("::").join(",");
		v1 = gS(o.name, o.type, 0, 1).split("::").join(",");
		if (o.second) {
			k2 = gS(o.second, o.type).split("::").join(",");
			v2 = gS(o.second, o.type, 0, 1).split("::").join(",");
		}
	} else {
		k1 = gS(o.name, o.type);
		v1 = gS(o.name, o.type, 0, 1);
		if (o.second) {
			k2 = gS(o.second, o.type);
			v2 = gS(o.second, o.type, 0, 1);
		}
	}
	if (!k1 && !k2)
		return;
	if (o.type != "checkbox")
		v = v+v1;
	if (k2)
		v+= " - "+v2;
	if (o.post)
		v+= o.post;
	v = '<table style="display:inline;margin:0px 0px 0px 10px;" id="item'+o.id+'"><tr><td valign="top" style="font-size:12px;">'+v+'</td><td>';
	v+= '<img src="/sds/template/default/images/clear.gif" width="16" height="16" class="set16 close16" style="cursor:pointer" onclick="remItem(\''+o.id+'\')" title="'+tr["remove_selection"]+'">';
	v+= '</td></tr></table>';
	return v;
}
function remItem(id) {
	var e = items[id];
	var o = gE("item"+id);
	resetField(e);
	if (e.second) {
		resetField(getSecondObject(e.second));
	}
	var w = document.createElement("img");
	w.src = "/sds/module/"+tr["modName"]+"/images/load.gif";
	o.parentNode.appendChild(w);
	o.parentNode.removeChild(o);
	doSearch(1);
}
function resetField(o) {
	if (o.type == "select" || o.type == "multiselect")
		gE(o.name).selectedIndex = 0;
	if (o.type == "input")
		gE(o.name).value = "";
	if (o.type == "checkbox")
		gE(o.name).checked = "";
}
function getParams() {
	var params = new Array();
	for (var xitem in items) {
		o = items[xitem];
		params.push(xitem+"="+gS(o.name, o.type, 1));
	}
	return params.join("&");
}
function setParams(params) {
	var data = params.split("&");
	for (var j=0; j<data.length; j++) {
		var kv = data[j].split("=");
		sS(kv[0], kv[1]);
	}
}
function fillShorty() {
	var s = gE("shortycontent"), b = new Array(), out = new Array();

	// check if s was found
	if(s == null)
	{
		return 0;
	}

	s.innerHTML = "";
	for (var xitem in items) {
		o = items[xitem];
		if (!o.shorty)
			continue;
		if (!b.contains(o.main)) {
			var x = buildShortyContent(o);
			if (x) out.push(x);
		}
		b.push(o.main);
	}
	gE("filteritem1").style.display = out == "" ? "none" : "inline";
	if(gE("filteritem2"))gE("filteritem2").style.display = out == "" ? "none" : "inline";
	gE("shortycontent").innerHTML = out.join("");
	return out != "" ? 1 : 0;
}
function addToFav(favid, fav) {
	ajax.init();
	ajax.setUserFunc("favAdded");
	ajax.request(URL+"addfav&favid="+favid+"&fav="+fav);
	window.setTimeout(function(){ document.location.reload(); },1000);
}
function delFav(favid) {
	ajax.init();
	ajax.setUserFunc("favDeleted");
	ajax.request(URL+"delfav&favid="+favid);
	window.setTimeout(function(){ document.location.reload(); },1000);
}
function favDeleted(favid) {
	goToPage(gE("currentpage").value);
}
function favAdded(favid) {
	if (favid) {
		var old = gE(favid);
		var img = document.createElement('img');
		img.src = '/sds/module/'+tr["modName"]+'/images/star_ok.png';
		img.id = favid;
		old.parentNode.appendChild(img);
		old.parentNode.removeChild(old);
	} else {
		alert(tr["max_fav_exceeded"]);
	}
}
function getResult() {
	gE("resbtn").style.display = "none";
	gE("reswait").style.display = "inline";
	ajax.init();
	ajax.setUserFunc("setResult");
	ajax.request(URL+gE("mode").value+"&"+getParams());
}
function setResult(result) {
	gE("result").innerHTML = result;
	init();
	gE("reswait").style.display = "none";
	gE("resbtn").style.display = "inline";
	if (do_count) {
		do_count = 0;
		getCounter();
	}
	if (do_minimize)
		minimize();
}
function getCounter() {
	gE("currentpage").value = 0;
	gE("resbtn").style.display = "none";
	gE("reswait").style.display = "inline";
	ajax.init();
	ajax.setUserFunc("setCounter");
	ajax.request(URL+"counter&"+getParams());
}
function setCounter(counter) {
	var res = counter.split("|");
	var c = res[0];
	var r = res[1];
	gE("resctl").innerHTML = r;
	gE("resbtn").value = c;
	gE("reswait").style.display = "none";
	gE("resbtn").style.display = "inline";
	if(instantload) {
		gE("mode").value="result";
		instantload = 0;
		doSearch(1);
	}
}
function minimize() {
	do_minimize = 0;
	fillShorty();
	gE("filter").style.display = "none";
	gE("shorty").style.display = "block";
}
function maximize() {
	gE("shorty").style.display = "none";
	gE("filter").style.display = "block";
	getCounter();
}
var sizer = 0;
function chgSize() {
	var ip = gE("inverterproducer"), hip = gE("help_inverterproducer");
	if (sizer) {
		sizer = 0;
		ip.size = 1;
		ip.multiple = "";
		ip.style.height = '20px';
		hip.style.display = 'none';
		//gE("modulproducer").setAttribute("size", 2);
		insertPlusMinus(gE("sizer"), "plus");
	} else {
		sizer = 1;
		ip.setAttribute("size", 20);
		ip.setAttribute("multiple", "multiple");
		ip.style.height = '200px';
		hip.style.display = 'inline';
		//gE("modulproducer").setAttribute("size", 18);
		insertPlusMinus(gE("sizer"), "minus");
	}
}
function insertPlusMinus(o, n) {
	o.removeChild(o.firstChild);
	var i = document.createElement("img");
	i.src = "/sds/template/default/images/clear.gif";
	i.className = "set13 "+n+"13";
	i.width = 13;
	i.height = 13;
	o.appendChild(i);
}
/* visu script starts here */
function runden(x, n, vz) {
	if (n == null) n = 1;
	if (vz == null) vz = 0;
	var e = Math.pow(10, n);
	var k = (Math.round(x * e) / e).toString();
	if (k.indexOf('.') == -1) k+= '.';
	k+= e.toString().substr(1);
	k = k.substring(0, k.indexOf('.') + n+1);
	f = k;
	if (navigator.browserLanguage == "de") {
		var parts = k.split(".");
		f = parts[0]+","+parts[1];
	}
	if ((vz == 1) && k > 0) {
		f = "+"+f;
	}
	if (n == 0) f = f.substring(0, f.length-1);
	return f;
}

function getWRToken(d, wrI) {
	var pnt1, pnt2;
	pnt1 = 0;
	if (d == undefined)
		return "";
	pnt2 = d.indexOf("|");
	while(wrI>0) {
		pnt1 = pnt2+1;
		pnt2 = d.indexOf("|",pnt1);
		wrI--;
		if(pnt2 <= 0)
			break;
	}
	if(wrI>0)
		return "";
	if(pnt2<=0)
		return d.substr(pnt1);
	return d.substr(pnt1,pnt2-pnt1);
}
function enumData(d, wrI) {
	var data=new Array();
	var pnt1, pnt2, s=0;
	data[0] = getWRToken(d, 0);
	d = getWRToken(d, wrI);
	pnt1=0;
	while(true) {
		pnt2 = d.indexOf(";",pnt1)
		if(pnt2 <= 0) {
			data[1+s] = parseInt(d.substr(pnt1));
			break;
		}
		data[1+s] = parseInt(d.substr(pnt1, pnt2-pnt1));
		pnt1 = pnt2+1;
		s++;
	}
	return data
}
function mover() {
	this.style.backgroundColor='darkred';
}
function mout() {
	this.style.backgroundColor='#fab512';
}
function gesamtertragszaehler_maxwrp(WRInfo, MaxWRP, AnzahlWR) {
	for(var i=0; i<AnzahlWR; i++) {
		if(WRInfo[i][11]==2 && WRInfo[i][14]==1) {
			return MaxWRP[i][0];
		}
	}
	return false;
}
function zeichneErtrag(WRInfo, MaxWRP, AnzahlWR, Interval, StartPixel, m, mi, id) {
	var y, maxWRP=0, Pac, w;
	var div = document.createElement("div");
	var img = document.createElement("img");
	img.src = "/sds/template/default/images/e.gif";
	img.width = 0;
	img.height = 80;
	div.appendChild(img);
	var gz = gesamtertragszaehler_maxwrp(WRInfo, MaxWRP, AnzahlWR);
	w = Interval/300;
	if(gz) {
		maxWRP = gz;
	} else {
		for(var i=0; i<AnzahlWR; i++) {
			if(WRInfo[i][11]==0 || (WRInfo[i][11]==2 && WRInfo[i][14]==0) || WRInfo[i][11] == 5 || AnzahlWR==1) {
				maxWRP+= MaxWRP[i][0];
			}
		}
	}
	if (StartPixel>0 && StartPixel<=216) { // 216*5min.=18Uhr
		for(j=0; j<StartPixel; j++) {
			var img=document.createElement("img");
			img.src="/sds/template/default/images/clear.gif";
			img.width=1;
			img.height=1;
			div.appendChild(img);
		}
	}
	var i=mi-1;
	if (mi > 160) {
		// mehr als 160 Minuteneinträge vorhanden
		// da nur 160 Einträge dargestellt werden können, den dargestellten Bereich um die Hälte der überschüssigen Einträge nach links verschieben..
		i-= parseInt((mi - 160) / 2);
	}
	c=0;
	f=0;
	while(i>0 && c <160) {
		Pac = 0;
		for(var i2=0; i2<AnzahlWR; i2++) {
			if(gz) {
				if(WRInfo[i2][11]==2 && WRInfo[i2][14]==1) {
					data = enumData(m[i], i2+1);
					Pac+= data[1];
				}
			} else {
				if(WRInfo[i2][11]==0 || (WRInfo[i2][11]==2 && WRInfo[i2][14]==0) || WRInfo[i2][11] == 5 || AnzahlWR==1) {
					data = enumData(m[i], i2+1);
					Pac+= data[1];
				}
			}
		}
		y = Pac/maxWRP;
		h = y*55*1.2;
		if(h>80) {
			h=80;
		}
		if(h>1) {
			f=1;
			var img=document.createElement("img");
			img.src="/sds/template/default/images/clear.gif";
			img.width=w;
			img.height=h;
			img.title=fmt(Pac, "w")+", "+fmt(y)+" kW/kWp";
			img.style.backgroundColor="#fab512";
			img.onmouseover=mover;
			img.onmouseout=mout;
			div.appendChild(img);
		} else if (f) {
			var img=document.createElement("img");
			img.src="/sds/template/default/images/clear.gif";
			img.width=w;
			img.height=1;
			img.title=fmt(Pac, "w")+", "+fmt(y)+" kW/kWp";
			div.appendChild(img);
		}
		i--;
		if (f) {
			c++;
		}
	}
	return div
}
function norm(v) {
	// v=23.30=23.30;v=23.00=23;
	if (v == Math.round(v))
		return Math.round(v);
	return v;
}
function fmt(v, p, f, l) {
	// v=value(float);f.e.:40890
	// f=floatingpoint-precision(int);f.e.:2
	// p=post(str);f.e.:kwp
	// l=level(int);default:0
	if (!p) p="";
	if (!f) f=2;
	if (!l) l=0;
	if (v > 1000)
		return fmt(v/1000, p, f, l+1);
	var post = getPost(p)[l];
	if (!post)
		return norm(runden(v, f));
	return norm(runden(v, f))+' '+post;
}
function getPost(n) {
	if(n=="wh/wp") return new Array("Wh/Wp", "kWh/kWp", "MWh/MWp", "GWh/GWp", "TWh/TWp");
	if(n=="wh") return new Array("Wh", "kWh", "MWh", "GWh", "TWh");
	if(n=="wp") return new Array("Wp", "kWp", "MWp", "GWp", "TWp");
	if(n=="w") return new Array("W", "kW", "MW", "GW", "TW");
	return new Array("", "", "", "", "");
}
function getKwP(WRInfo, da, AnzahlWR) {
	Pac = 0;
	kwp = 0;
	for(i2=0; i2<AnzahlWR; i2++) {
		if(WRInfo[i2][11]==0 || (WRInfo[i2][11]==2 && WRInfo[i2][14]==0) || WRInfo[i2][11]==5 || AnzahlWR==1) {
			data = enumData(da[0], i2+1);
			Pac+= data[1];
			kwp+= WRInfo[i2][2];
		}
	}
	if (isNaN(Pac))
		return "0.00";
	return runden(Pac/kwp, 2);
}
function disableBrowseButtons(o) {
	var elements = getElementsByClass("func", o);
	for (i=0; i<elements.length; i++) {
		var element = elements[i];
		if (element.style.display != 'none') {
			if (element.src) {
				//var src = element.src;
				//src = src.replace(/_inactive.png/, '.png'); // foo_inactive.png => foo.png; foo.png => foo.png
				//src = src.replace(/.png/, '_inactive.png'); // foo.png => foo_inactive.png
				//element.src = src;
				element.className = element.className.replace(/16on func/, '16off').replace(/set16/, 'set16off');
			}
			element.onclick = function(){};
			element.style.cursor = 'default';
		}
	}
}
function goToPage(page) {
	if (gE("blaettern_top")) disableBrowseButtons(gE("blaettern_top"));
	if (gE("blaettern_bottom")) disableBrowseButtons(gE("blaettern_bottom"));
	if (gE("blaettern_wait_top")) gE("blaettern_wait_top").style.display = 'inline';
	if (gE("blaettern_wait_bottom")) gE("blaettern_wait_bottom").style.display = 'inline';
	gE("currentpage").value = page;
	doSearch();
}
function showFilterForm() {
	gE("filterform").style.display = "block";
}
function hideFilterForm() {
	gE("filterform").style.display = "none";
}
function saveFilter() {
	var name = gE("filtername").value;
	if (!name) {
		alert(tr["filter_needs_a_name"]+".");
		return;
	}
	gE("filterbtn").style.display = "none";
	gE("filterwait").style.display = "inline";
	ajax.init();
	ajax.setUserFunc("resetFilter");
	ajax.request(URL+"filter_add&n="+name+"&v="+escape(getParams()));
}
function resetFilter() {
	gE("filterbtn").style.display = "inline";
	gE("filterwait").style.display = "none";
	gE("filtername").value = '';
	gE("filterform").style.display = "none";
}
function loadFilter() {
	gE("resbtn").style.display = "none";
	gE("reswait").style.display = "inline";
	var f = gE("savedfilter");
	var filterid = f.options[f.selectedIndex].value;
	if (!filterid) {
		doFilterSearch(getParams());
	} else {
		getFilter(filterid);
	}
}
function getFilter(filterid) {
	ajax.init();
	ajax.setUserFunc("doFilterSearch");
	ajax.request(URL+"filter_get&filterid="+filterid);
}
function loadFavorites(c) {
	if(c) do_count = 1;
	ajax.init();
	ajax.setUserFunc("setResult");
	ajax.request(URL+"fav");
}
var time_start=new Array(8,8,6,6,6,6,6,7,7,7,7,8);
var time_end=new Array(17,18,20,21,21,22,22,21,20,19,17,17);
var today = new Date();
