var proceed;

//Request Url
var url = 'ajax.php';

//Variablen für Ajax-Request (kein CONST verwenden!)
var pkey = '';
var title = '';
var firstname = '';
var lastname = '';
var street = '';
var zipcity = '';
var phone = '';
var mail = '';
var agbaccepted = '';
var newsletter = '';

var infoarray = new Array();
infoarray[0] = new Object();

//Definition der ID's der dazugehörigen Formularelemente
var TITLE_ID = 'title';
var MAIL_ID  = 'ci_mail';
var FNAME_ID = 'ci_firstname';
var LNAME_ID = 'ci_lastname';
var STREET_ID= 'ci_street';
var ZIPCITY_ID  = 'ci_zipcity';
var PHONE_ID = 'ci_phone';
var AGB_ID = 'ci_agb';
var NEWSLETTER_ID = 'ci_newsletter';

//Ausgabetext für Benutzer
infoarray[0][MAIL_ID]  = "Ungültige Email-Adresse";
infoarray[0][FNAME_ID] = "Ungültiger Vorname";
infoarray[0][LNAME_ID] = "Ungültiger Nachname";
infoarray[0][STREET_ID]= "Ungültige Straßenbezeichnung";
infoarray[0][ZIPCITY_ID]  = "Ungültiger Ort oder Postleitzahl";
infoarray[0][PHONE_ID] = "Ungültige Telefonnummer";

infoarray[0]['ci_empty'] = "Pflichtfeld unausgefüllt";

//reguläre Ausdrücke für die verschiedenen Formularfelder
var REGEX_MAIL = /^([_a-zA-Z0-9-]+)(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$/;
var REGEX_NAME = /^[\sa-zA-Z0-9äöüÄÖÜß()-óéáíúÁÉÍÓÚàèìòùÀÈÌÒÙâêîôûÂÊÎÔÛ]{1,100}$/;
var REGEX_STREET = /^[\sa-zA-Z0-9äöüÄÖÜß().-]{1,100}$/;
var REGEX_CITY = /^[\sa-zA-ZäöüÄÖÜß()-]{1,100}$/;
var REGEX_PHONE = /^[\d\-+\/()\s]+$/;
var REGEX_ZIP = /^((\D-)?\d{4,5}[a-zA-ZäöüßÄÖÜ\-\s&()]{3,200})$|^([a-zA-ZäöüßÄÖÜ\-\s&()]{3,200}(\D-)?\d{4,5})$/;
var REGEX_ISEMPTY = /:\*$/;
var REGEX_WIN = /^Windows.*$/;

function deleteUserInfo(ci_field){
	if(ci_field.nextSibling.nodeName.toLowerCase() == 'dl' && ci_field.nextSibling.childNodes[0] != null){
		ci_field.nextSibling.removeChild(ci_field.nextSibling.firstChild);
	}
	
	//Sonderfall für Radio-Buttons <b> tag muss übersprungen werden
	if(ci_field.nextSibling.nodeName.toLowerCase() == 'b' && ci_field.nextSibling.nextSibling.childNodes[0] != null){
		ci_field.nextSibling.nextSibling.removeChild(ci_field.nextSibling.nextSibling.firstChild);
	}
}

function setLoad(){
  document.getElementById('loading').style.display = "";
}

function unsetLoad(){
  document.getElementById('loading').style.display = "none";
}

function addUserInfo(ci_field, isempty){
	
	var textnode = null;
	deleteUserInfo(ci_field);
	
	if(isempty == true){
		text_node = document.createTextNode(this.infoarray[0]['ci_empty']);
	} else {
		text_node = document.createTextNode(this.infoarray[0][ci_field.getAttribute('id')]);	
	}
	
	//Sonderfall für Radio-Buttons <b> tag muss übersprungen werden
	if (ci_field.nextSibling.nodeName.toLowerCase() != 'b') {
		ci_field.nextSibling.appendChild(text_node);
	} else {
		ci_field.nextSibling.nextSibling.appendChild(text_node);
	}
}

function ci_text(ci_field, pattern){
	
	if(this.REGEX_ISEMPTY.test(ci_field.previousSibling.childNodes[0].nodeValue) && ci_field.value == ''){
		this.addUserInfo(ci_field, true);
		return 1;
	} else if(!pattern.test(ci_field.value)){
		//Felder die keine Pflichtfelder sind dürfen leer bleiben;
		if (ci_field.value != '') {
			this.addUserInfo(ci_field, false);
			return 1;
		} else {
			this.deleteUserInfo(ci_field, false);
		}
	} else {
		this.deleteUserInfo(ci_field, false);
		return 0;
	}
	return 0;
}

function ci_radio(ci_fields){
	
	var checked = false;
	var i = 0;
	
	while(ci_fields[i] != null && checked == false){
		checked = ci_fields[i].checked;
		if(checked === true){
			this.title = ci_fields[i].value;
		}else{
			this.title = '';
		}
		i++;
	}

	if(checked == false){
		this.addUserInfo(ci_fields[1], true);
		return 1;
	} else {
		this.deleteUserInfo(ci_fields[1], false);
		return 0;
	}
}

function ci_checkbox(ci_field){
	var agb = document.getElementById(ci_field);
	if(agb.checked === false){
		alert("Bitte akzeptieren Sie zuerst die Allgemeinen Geschäftsbedingungen.\nWählen Sie dazu den Punkt des Formulars [\"Hiermit akzeptiere ich die Agb's]\" aus.");
                this.agbaccepted = '';
		return false;
	} else {
                this.agbaccepted = agb.value;
		return true;
	}
}

function UserInfo(){
	alert("Bitte überprüfen Sie Ihre Angaben auf Korrektheit.\nDenken Sie bitte daran die Pflichtfelder (*) auszufüllen.\nDanach können Sie mit der Eingabe Ihres Upgrade-Keys fortfahren.");
}

function validate(ci_fieldId){
	
	switch(ci_fieldId){
		case this.TITLE_ID: 	ci_radio(document.getElementsByName(this.TITLE_ID)); break;
		case this.FNAME_ID: 	ci_text(document.getElementById(ci_fieldId), this.REGEX_NAME); break;
		case this.LNAME_ID: 	ci_text(document.getElementById(ci_fieldId), this.REGEX_NAME); break;
		case this.STREET_ID: 	ci_text(document.getElementById(ci_fieldId), this.REGEX_STREET); break;
		case this.ZIPCITY_ID: 	ci_text(document.getElementById(ci_fieldId), this.REGEX_ZIP); break;
		case this.MAIL_ID: 		ci_text(document.getElementById(ci_fieldId), this.REGEX_MAIL); break;
		case this.PHONE_ID: 	ci_text(document.getElementById(ci_fieldId), this.REGEX_PHONE); break;
		case 'all':
			var proceed = 0;
			proceed += ci_radio(document.getElementsByName(this.TITLE_ID)); 
			proceed += ci_text(document.getElementById(this.FNAME_ID), this.REGEX_NAME); 
			proceed += ci_text(document.getElementById(this.LNAME_ID), this.REGEX_NAME); 
			proceed += ci_text(document.getElementById(this.STREET_ID), this.REGEX_STREET);
			proceed += ci_text(document.getElementById(this.ZIPCITY_ID), this.REGEX_ZIP); 
			proceed += ci_text(document.getElementById(this.MAIL_ID), this.REGEX_MAIL);
			proceed += ci_text(document.getElementById(this.PHONE_ID), this.REGEX_PHONE);
			
			if(proceed > 0){
				UserInfo(); document.forms[0].elements[1].focus(); return false;
			} else {
                                return true;
                        }

		break;
		default: break;	
	}
}

function clearkey(){
	document.forms[0].elements[8].value = '';
}		

function deleteMessageField(){
	document.getElementById('keymsg').style.display = "none";
}

function clearMessageField(){
	var node = document.getElementById('msg');
	
	try{
		while (node.firstChild) {
  			node.removeChild(node.firstChild);
		}
	} catch(failed) {
		
	}
}

function clearInner(){
	var node1 = document.getElementById('pkeywrapper');
        node1.parentNode.removeChild(node1);
        document.getElementById('keysuccess').style.display = "";
}
		
function interpretRequest(){
	switch(request.readyState){
	case 4:
		if(request.status != 200){
			alert('Es konnte leider keine Verbindung zum Server aufgebaut werden: Fehler: '+request.status);
		} else {
			unsetLoad();
                        //1 gültiger Key, 2 ungültiger Key
			var content = request.responseText;

			if(content.length > 1){
				clearMessageField();
                                clearInner();
				document.getElementById("keysuccess").style.display="";
				var newNode = document.createElement('img');
				newNode.setAttribute('src', 'http://www.hyrican.de/cms/gfx/accept.png');
				document.getElementById("keysuccess").appendChild(newNode);                              
				var keymsg = document.createTextNode("  Vielen Dank.");           
                                document.getElementById("keysuccess").appendChild(keymsg);
                                var brnode = document.createElement('br');
                                document.getElementById("keysuccess").appendChild(brnode);
                                brnode = document.createElement("br");
                                document.getElementById("keysuccess").appendChild(brnode);
                                keymsg = document.createTextNode("Ihr Bestellvorgang war erfolgreich. Sie erhalten in Kürze eine Bestätigungs E-Mail."); 
                                document.getElementById("keysuccess").appendChild(keymsg); 
                                brnode = document.createElement('br');
                                document.getElementById("keysuccess").appendChild(brnode);
                                keymsg = document.createTextNode("Der Versand Ihres Windows® 7 Upgrade Pakets erfolgt unmittelbar nach ");           
                                document.getElementById("keysuccess").appendChild(keymsg);
                                brnode = document.createElement('br');
                                document.getElementById("keysuccess").appendChild(brnode);
                                keymsg = document.createTextNode("dem offiziellen Windows® 7 Start am 22.10.2009 .");           
                                document.getElementById("keysuccess").appendChild(keymsg);
                                brnode = document.createElement('br');
                                document.getElementById("keysuccess").appendChild(brnode);
                                brnode = document.createElement('br');
                                document.getElementById("keysuccess").appendChild(brnode);
                                keymsg = document.createTextNode("Upgrade Pfad: " + content);           
                                document.getElementById("keysuccess").appendChild(keymsg);
			} else if(content == '2') {
				clearMessageField();
				document.getElementById("keymsg").style.display="";
				var newNode = document.createElement('img');
	 			newNode.setAttribute('src', 'http://www.hyrican.de/cms/gfx/cancel.png');
	 			document.getElementById("msg").appendChild(newNode);
				var keymsg = document.createTextNode(" Der von Ihnen eingegebene Upgrade-Key ist leider ungültig oder bereits vergeben. Bitte überprüfen Sie Ihre getätigten Angaben.");
				document.getElementById("msg").appendChild(keymsg);
			} else if(content == '3') {
				var errormsg = document.createTextNode("Ungültige Email-Adresse.");
				document.getElementById("ci_mail").nextSibling.appendChild(errormsg);
			} else if(content == '4'){
				var errormsg = document.createTextNode("Ungültige Postleitzahl.");
				document.getElementById("ci_zipcity").nextSibling.appendChild(errormsg);	
			} else if(content == '5'){
				alert("Die weitere Eingabe von Upgrade-Keys ist für Sie vorrübergehend nicht mehr möglich.\nFehler: mehrmalige Angabe eines falschen Upgrade-Keys");
			} 
		} break;
	default: break;
	}	
}
		
function setRequest(){     
	try{
    	request = new XMLHttpRequest();
    } catch (e){
       	try{
           	request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e){
    	   	try{
        	   	request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed){
               	request = null;
            }
        }  
    }

            if (!request) {
				alert('Request-Objekt konnte nicht erstellt werden.');
			}else{
				request.open("post", this.url, true);
				request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
				request.send('title='+this.title+
							 '&firstname='+this.firstname+
							 '&lastname='+this.lastname+
							 '&street='+this.street+
							 '&zipcity='+this.zipcity+
							 '&mail='+this.mail+
							 '&phone='+this.phone+
							 '&pkey='+this.pkey+
                             '&agb='+this.agbaccepted+
							 '&newsletter='+this.newsletter);
				
				this.pkey = '';
				this.firstname = '';
				this.lastname = '';
				this.phone = '';
				this.mail = '';
				this.street = '';
				this.zipcity = '';
				this.title = '';
                this.agbaccepted = '';
				this.newsletter = '';
					
				request.onreadystatechange = interpretRequest;
			}
		}
		
		function getinput(e){
    	
    		var keynum;

    		if(window.event){
    			keynum = window.event;
    		}else if(e.which){
    			keynum = e.which;	
    		}	

			node = document.getElementById('pkey');
			
			
			this.pkey = node.value;
			if((node.value.length == 5 || node.value.length == 11 || node.value.length == 17 || node.value.length == 23) && keynum != 8 && keynum != 13){
				node.value = node.value + '-';
			}
			
			//node.value abschneiden auf 29 Zeichen
			if(node.value.length >= 29){
				node.value = node.value.slice(0,29);
				this.pkey = node.value;	
			}	
    	}
		
		function sendRequest(){
			
			var valid = validate('all');
			
			if (valid === true) {
				if (ci_checkbox(this.AGB_ID) === true) {
			   		if(this.pkey.length == 29){
					     this.firstname = document.getElementById(FNAME_ID).value;
				         this.lastname = document.getElementById(LNAME_ID).value;
				         this.street = document.getElementById(STREET_ID).value;
				         this.zipcity = document.getElementById(ZIPCITY_ID).value;
				         this.mail = document.getElementById(MAIL_ID).value;
				         this.phone = document.getElementById(PHONE_ID).value;
				         
						 var newsaccepted = document.getElementById(this.NEWSLETTER_ID).checked;
						 if(newsaccepted === true){
						 	this.newsletter = document.getElementById(this.NEWSLETTER_ID).value;
						 }
						 
                         setLoad();
				         setRequest();
			    	} else if(this.pkey.length > 0 && this.pkey.length < 29) {
                    	 alert('Ihr eingegebener Upgrade-Key ist leider ungültig.');
                    } else if(this.pkey.length == 0) {
						 alert('Bitte ergänzen Sie das Formular noch um Ihren Upgrade-Key.');
					}
               	}
          	}		
		}

