/*
 * wnn_scripts.js
 *
 * f. formularpruefung neu (web 2.0)
 *
 * $Id: wnn_scripts.js,v 1.13 2010/08/09 11:09:00 ics Exp $
 *
 * $Log: wnn_scripts.js,v $
 * Revision 1.13  2010/08/09 11:09:00  ics
 * WNN-1266 ak submit f. Firma AURA
 *
 * Revision 1.12  2010/04/12 11:59:58  ics
 * WNN-664 ph
 *
 * Revision 1.11  2009/06/09 12:19:23  ics
 * WNN-180 sk fix
 *
 * Revision 1.10  2008/06/20 08:37:07  ics
 * pw: pattern fur checkboxen!!
 *
 * Revision 1.9  2008/02/25 11:43:34  ics
 * pw: kleine fixes f. fehler
 *
 * Revision 1.8  2008/02/04 11:12:44  ics
 * pw: offset fix
 *
 * Revision 1.7  2008/02/04 11:12:05  ics
 * pw: changes f. weiterempfehlen
 *
 * Revision 1.6  2008/02/04 09:16:45  ics
 * pw: fixes f. fehlermeldungen in WN05 Layern
 *
 * Revision 1.5  2007/11/21 16:31:24  ics
 * pw: meldung bei vorhandener mail ++ trennlinie zwischen fehlern
 *
 * Revision 1.4  2007/11/21 15:11:45  ics
 * pw_ div fixes f. andere forms und plz
 *
 *
 */

var email_ok=true;

var form_name='FORMRAHMEN';

var offset_x=0; // set if in IFRAME !! 
var offset_y=0; // set if in IFRAME !!



function sw_lay(show,hide) {
	if(document.getElementById(show)) document.getElementById(show).style.display='inline';
	if(document.getElementById(hide)) document.getElementById(hide).style.display='none';
	if(document.getElementById("REQDIV")) document.getElementById("REQDIV").style.display='none';
}


function getwert(v,def) {
    var inhalt = v.value;  
	if(def == 0 && inhalt == '') return 0; 
	if(v.type == 'checkbox') {
		if(! v.checked)  {
			inhalt = def;
		} 
	}
	if(v.type == 'radio') {
		var n = v.name;
		var a = new Array(); 
		inhalt = ''; 
		try {
			eval("var a = document."+form_name+"."+n);  
		} catch(e) {
		}
		for(var i = 0; i < a.length; i++) {
			if(a[i].checked) inhalt = a[i].value; 
		}
	}
	if(pk3_starten == 99) {
	  if(v.type == 'radio') {
	    inhalt = ''; 
		 eval("form_this = document."+form_name);
	    for(var ii = 0; ii < form_this.length; ii++) {
	      if(form_this.elements[ii].name.indexOf('IN_') == 0) {
		var e = form_this.elements[ii]; 
		
		if(e.type =="radio" && e.id == v.id) {
			if(e.checked) inhalt = e.value ;
			pk3debug("RADIO" + e.id + " " + e.type + " " + e.value + " IN: " + inhalt)
		}
              }
	    }
	  }
	}
	inhalt = inhalt.trim(); 
	if(def == '99'  ) {
		inhalt = Math.round(inhalt*100); 
		inhalt = inhalt/100; 
		def = '0'; 
	}
	if(def == '0'  ) {
		inhalt =inhalt.replace('.',''); 
		inhalt = inhalt.replace(',','.'); 
		if(isNaN(inhalt)) inhalt = 0; 
		// inhalt = Math.round(inhalt*100) / 100 ; 
	}
	if(def == '99'  ) {
		inhalt = Math.round(inhalt*100); 
		inhalt = inhalt/100; 
	}
	return inhalt; 
}

var myplz;
myplz = Array(0,0);

function checkmyplz_neu(o) {
	var u = 'PLZ='+escape(o.value);
	myplz[0]=o;
	u =   '/extend/checkplz.php?check_neu=1&'+u;
	var t = ireds_getTop(o);
	var l = ireds_getLeft(o);
	showlayer(u,200,50,25+t,l);
}

function setmyplz(p) {
	// Wird von POP-UP Aufgerufen - setzt die Werte
	mytmp=p.split(":");
	myplz_wert=mytmp[1].slice(0,4);
	myort=mytmp[1].slice(5,mytmp[1].length);
	myplz[0].value=myplz_wert;
	a=getformelement_by_name(myplz[0].name.replace(/PLZ/,"ORT"));
	if(a) {
		a.value=myort;
	}
}

function cumulativeOffset (element) {
	var valueT = 0, valueL = 0;
	do {		
		valueT += element.offsetTop  || 0;
		valueL += element.offsetLeft || 0;
	  
		if (typeof element.offsetParent == 'undefined' || typeof element.offsetParent == 'unknown')
			break;
		element = element.offsetParent;
	  
	} while (element);
	return [valueL, valueT];
}

function is_it_visible(x) {
	if(x.tagName == 'FORM' || x.tagName == 'BODY') {
		return true;
	}
	if(x.style) { 
		if(x.style.display) {
			if(x.style.display=="none") {
				return false; 
			}	
		 }
	}
	return is_it_visible(x.parentNode);;
}

/*
 * holt das element vom event und prueft dochck_element dafuer auf
 */
function preparechk_element(evt) {
	if(!evt) evt=window.event;
	if(evt.srcElement) {
		elem=evt.srcElement;
	}
	else if(evt.target) {
		elem=evt.target;
	}
	if(elem) {
		dochck_element(elem);
	}
}

/*
 * markiert (wenn t einen wert hat) oder demarkiert das element e (wenn t leer ist)
 */
function mark_element(e,t) {
	if(t!="" && !e.className.match(/form_error/)) {
		e.className+=" form_error";
	}
	else if(t=="" && e.className.match(/ form_error/)) {
		e.className=e.className.replace(/ form_error/,"");
		e.style.backgroundColor='#FFFFFF';
	}
	else if(t=="" && e.className.match(/form_error/)) {
		e.className=e.className.replace(/form_error/,"");
		e.style.backgroundColor='#FFFFFF';
	}
	else if(t=="") {
		e.style.backgroundColor='#FFFFFF';
	}
}
/*
 * prueft das elemet a auf den wert des attributs pattern
 */

var f_ajax_append = "";

function dochck_element (a) {
		t = ''; 
		var pattern = a.getAttribute('patterner');
		var reqn = a.getAttribute('reqn'); 
		if(a.type == 'radio') {
			val = getwert(a,''); 
			if(pattern == 'J') pattern = 'radio'; 
		} else {
			var val = a.value;
		}
		if (pattern == null) pattern  = '';
		if (reqn == null) reqn = ''; 
		if(! is_it_visible(a)) pattern = ''; 
		if(pattern == 'PLZ') {
			//pattern = "1000-99999"; 
		}
		if (pattern != null && pattern != '') {
			if(pattern == 'J') { 
				if(a.value.length == 0 ) t = " darf nicht leer sein ";
			} else if(pattern == 'CHECKBOX') {
				if(a.checked==false) t = " &nbsp; ";	
			} else if (pattern == 'EMAIL') {
				if(val.indexOf('@') < 2 ) t = " muss eine Email sein "; 
				else ajax_call('/wn05iframe/a_check_email.php?EMAIL='+val+"&check_neu=1&f="+a.name+"&skip_db=1"+f_ajax_append);
			} else if (pattern == 'EMAIL_DB') {
					ajax_call('/wn05iframe/a_check_email.php?EMAIL='+val+"&check_neu=1&f="+a.name+f_ajax_append);
			} else if (pattern == 'radio') {
				if(val == '') t = " Bitte eine Option w&auml;hlen ";
			} else if (pattern.indexOf('=') == 0) {
				//wert muss gleich einem zweiten input sein
				check= null;
				// suche element mit namen, der nach dem = angegeben ist
				element=pattern.replace(/=/,"");
			 	f= document.getElementById(form_name); 
				for(j=0;j< f.elements.length && check==null;j++) {
					var c=f.elements[j];
					if(c.name==element) check=c; 
				}
				if(check!=null) {
					//zu vergleichendes element gefunden
					var reqn2=check.getAttribute('reqn');
					tmp=Math.min(reqn,reqn2);
					tmp2=Math.max(reqn,reqn2);
					//immer erstes element f. fehlermeldungen usw verwenden
					//vermeidet doppelausgaben 
					reqn=tmp;
					reqn2=tmp2;
					if(check.value!=a.value) {
						//felder sind ungleich
						if(reqn2 && document.getElementById('label_'+reqn2)) {
							t=" und "+document.getElementById('label_'+reqn2).innerHTML+" m&uuml;ssen gleich sein.";	
						}
						else {
							t=" und "+check.name+" m&uuml;ssen gleich sein.";	
						}
					}
					else if(a.value.length ==0) {
						//beide felder sind leer
						check.className+=" form_error";
						if(reqn2 && document.getElementById('label_'+reqn2)) {
							t=" und "+document.getElementById('label_'+reqn2).innerHTML+" d&uuml;rfen nicht leer sein.";	
						}
						else {
							t=" und "+check.name+" d&uuml;rfen nicht leer sein.";	
						}
					}
					mark_element(check,t);
				}
				else {
					//zu vergleichendes element nicht gefunden ... zumindeset auf nicht leer pruefen
					if(a.value.length ==0) t =" darf nicht leer sein.";
				}
				//ende abfrage =
		  	} else if (pattern.indexOf('-') > 0) {
				var k   = pattern.split('-'); 
				try {
					min = parseInt(k[0]); 
					max = parseInt(k[1]);
					vl = parseInt(a.value); 
				} catch(e) { 
					min = 0; max = 1000000;vl = -1; 
				}
				if(isNaN(vl)) vl = -1; 
				if(vl < min || vl > max) { 
					t = " muss eine Zahl zwischen "+min+" und "+max+" sein";
				}
			}
			else if(pattern=='PLZ') {
				checkmyplz_neu(a);
			}
			else if (pattern=='DIV') {
				if(a.innerHTML.length == 0) t = " darf nicht leer sein.";
			}
		}
		if(t != '') {
			if(document.getElementById('label_'+reqn)) {
				t=document.getElementById('label_'+reqn).innerHTML+t;
			}
		}
		mark_element(a,t);
		updateError(reqn,t);
		return t;
}

function getDiv(d) {
	var div=document.getElementById(d);

	if(!div && parent) {
		if(parent.document.getElementById(d)) {
			div=parent.document.getElementById(d);
			var tu = window.location.href  
			var ptu = parent.document.getElementsByTagName('iframe'); 
			for(var i = 0; i < ptu.length; i++) {
				// setze korrektur f. Offset 
				var u = ptu[i].src ; 
				if(u.indexOf("ttp://") < 0) {
				  u = "http://"+window.location.host + u; 
				} 
				// alert(u + " - " + tu)
				if(u == tu) {
					// gleich URL = gleicher Frame => setze offset ... 
					offset_y = ireds_getTop(ptu[i]); 
					offset_x = ireds_getLeft(ptu[i]); 
				}
			}
		}
		else {
			div=false;
		}
	}
	else if(!div) {
		return false;
	}

	return div;
}

/*
 * fuegt meldungen in das error div ein oder entfernt sie
 * ist msg_set!='' wird eingefuegt sonst entfernt
 * field = reqn von dem zu testenden element
 */
function updateError(field,msg_set) {
	if(msg_set!='') action='set';
	else action='';

	error_div=getDiv('REQTXT');

	hr="<div name='seperator' style='height:1px;border-bottom:1px dotted #FCB502;margin-bottom:5px;'></div>";

	error_msgs=error_div.childNodes;
	found=0;

	for(i=0;error_msgs && i<error_msgs.length;i++) {
		msg=error_msgs[i];
		msg_name=msg.getAttribute('name');
		reqn=parseInt(msg_name.replace(/error_msg_/,""));
		if(reqn && reqn==field) {
			if(action=='set') {
				msg.innerHTML=hr+msg_set;
				found=1;
			}
			else {
				error_div.removeChild(msg);
			}
		}
	}

	if(found==0 && action=='set') {
		error_div.innerHTML+="<div name='error_msg_"+field+"' style='margin:0px 0px 5px 0px;'>"+hr+msg_set+"</div>";
	}
	if(error_div.childNodes){
	if(error_div.childNodes.length==0) {
		getDiv('REQDIV').style.display="none";
	}
	else {
		first_error=error_div.firstChild.getAttribute('name').replace(/error_msg_/,"");
		if(error_div.firstChild.firstChild.nodeType!=3) {
			error_div.firstChild.removeChild(error_div.firstChild.firstChild);
		}
		f=document.getElementById(form_name);
		found=0;
		for(i=0;i<f.elements.length && found ==0;i++) {
			reqn=f.elements[i].getAttribute('reqn');
			if(reqn==first_error) found=f.elements[i];
		}

		if(found){ 
			pos_div=cumulativeOffset(found);
		}
		else {
			pos_div=cumulativeOffset(document.getElementById('REQ_ANCHOR'));
		}

		error_div=getDiv('REQDIV');
		pos_y=pos_div[1]-50+offset_y;
		pos_div=cumulativeOffset(document.getElementById('REQ_ANCHOR'));
		pos_x=pos_div[0]+26+offset_x;
		width_div=234;
		pos_x-=width_div;
		error_div.style.left=pos_x+"px";
		error_div.style.top=pos_y+"px";

		if(navigator.appVersion.match(/MSIE 6/)) {
			//hack for ie6
			getDiv('REQIMG').className="reqimg_ie6";
			getDiv('REQDIV').className="reqdiv_ie6";
		}	
		error_div.style.display="block";
	}
	}
}

function dochck_neu() {
 	var is_ok = 0;
 	var f= document.getElementById(form_name); 

	for(var i = 0; i < f.elements.length; i++) {
		var a = f.elements[i];
		reqn=a.getAttribute('reqn');
		if(reqn==null) reqn="";
		else {
			t=dochck_element(a);
			if(t != '') 
				is_ok++;
		} 
   }

	return ((is_ok == 0) && email_ok); 
}

function getformelement_by_name(name) {
	var f= document.getElementById(form_name);

	for(var i = 0; i < f.elements.length; i++) {
		if(f.elements[i].name==name) return f.elements[i];
	}

	return null;
}

function ajax_email_check(t,name) {
	if(t=="") email_ok=true;
	else email_ok=false;

	if(t.match(/existiert/)) {
		t=t+"<br/>Sie k&ouml;nnen sich <a href='#' onclick='window.setTimeout(\"show_login()\",500); return false;'>hier</a> einloggen!";
	}

	elem=getformelement_by_name(name);

	if(elem) {
		mark_element(elem,t);
		reqn=elem.getAttribute('reqn');
		updateError(reqn,t);
	}
}

function show_login() {
	sw_lay('wohnnet_login_register','wohnnet_register');
}

function set_form_checks() {
	if(check_neu=='J') {
		var fx= document.getElementById(form_name);
		  for(cx = 0; cx < fx.elements.length; cx++) {
			 xx=fx.elements[cx];
			 patx=xx.getAttribute('patterner');
			 if(patx && patx!='' && patx!="N") xx.onblur=preparechk_element;
		 }
	}
}

