XMLHttp = function () {
    this.obj = document.forms[0];

    this.task = this.obj.task.value;

    this.url = 'db.php';
    this.errorurl = 'ilmoitus_virhe.php?error=true';

    this.request = null;        /* http request object */

    this.cache = new Array();   /* cache of results from server */

    this.obj.XMLHttp = this;       /* self reference */
}

/* create object for rpc call */
XMLHttp.prototype.XMLHttpRequest = function() {
    var request = null;
    if (typeof XMLHttpRequest != 'undefined') {
        request = new XMLHttpRequest();
    } else {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                request = null;
            }
        }
    }
    return request;
}

XMLHttp.prototype.loadPerson = function() {
  	var task = document.forms[0].elements['task'];
  	task.value = 'loadPerson';
  	this.send();    
}

/* do checking on submit */
XMLHttp.prototype.validatePerson = function() {

    if (this.task == 'validatePerson')
    {
        with(this.obj)
        {
        		document.getElementById('first_name_missing').style.display = "none"; 
        		document.getElementById('last_name_missing').style.display = "none"; 
                document.getElementById('birthYear_missing').style.display = "none"; 
                document.getElementById('sex_missing').style.display = "none"; 
        		document.getElementById('society_missing').style.display = "none"; 
            if (trim(first_name.value) == '')
            {
                document.getElementById('first_name_missing').style.display = "block"; 
                return;
            } 
            if (trim(last_name.value) == '')
            {
            	document.getElementById('last_name_missing').style.display = "block"; 
                return;
            } 
            if (trim(sex.value) == '')
            {
            	document.getElementById('sex_missing').style.display = "block"; 
                return;
            } 
            if (trim(birthYear.value) == '')
            {
            	document.getElementById('birthYear_missing').style.display = "block"; 
                return;
            }
            if (trim(society.value) == '')
            {
            	document.getElementById('society_missing').style.display = "block"; 
                return;
            }
            
            this.send();

        }
    }
}

XMLHttp.prototype.validateClass = function() {
    if (this.task == 'validateClass')
    {
    	document.getElementById('distance_missing').style.display = "none"; 
    	var field = document.forms[0].elements['distance'];
    	if (field.value == "") {
    		document.getElementById('distance_missing').style.display = "block"; 
    		return;
    	}
			this.send();			    
    }
}

XMLHttp.prototype.loadSummary = function() {
  	var task = document.forms[0].elements['task'];
  	task.value = 'loadSummary';
  	this.send();    
}

XMLHttp.prototype.validateInfo = function() {
    if (this.task == 'validateInfo')
    {
    	document.getElementById('payment_missing').style.display = "none"; 
    	document.getElementById('cardnumber_missing').style.display = "none"; 

    	var selField = document.forms[0].elements['kortti'];
    	var valueField = document.forms[0].elements['korttinro'];

    	var cardChecked;
			var cardValue;    	
    	for (var i=0; i<selField.length; i++)  {
        if (selField[i].checked) {
        		cardValue = selField[i].value;
            cardChecked = true;
        }
    	}
    	if ((cardChecked) && ( cardValue != '') && (valueField.value == '')) {
    		document.getElementById('cardnumber_missing').style.display = "block"; 
    		return;
    	}
    	
			var field = document.forms[0].elements['maksu'];

    	var paymentChecked;
    	for (var i=0; i<field.length; i++)  {
        if (field[i].checked) {
            paymentChecked = true;
        }
    	}
			
    	if (!paymentChecked) {
    		document.getElementById('payment_missing').style.display = "block"; 
    		return;
    	}
    	this.send();
    }
}

XMLHttp.prototype.validateError = function() {
    if (this.task == 'loadError')
    {
    	this.send();
    }
}

/* do checking on submit */
XMLHttp.prototype.resetXMLDoc = function() {
    if (this.task == 'loadClass' || this.task == 'loadInfo')
    {
    	var task = document.forms[0].elements['task'];
    	task.value = 'loadPerson';
    	this.send();
    }
}

/* do checking on submit */
XMLHttp.prototype.removeXMLDoc = function() {
    if (this.task == 'class_selection' || this.task == 'final_check')
    {
    	var task = document.forms[0].elements['task'];
    	task.value = 'correct_registration';
    	this.send();
    }
}

/* Change task value */
XMLHttp.prototype.changeTask = function(newTask) {
	var oldTask = document.forms[0].elements['task'];
  oldTask.value = newTask; 
}

/* Load society options for selection list */
XMLHttp.prototype.loadSocietyList = function() {
		var task = document.forms[0].elements['task'];
    if (task.value == 'loadSocietyList')
    {   	  
			var selSociety = document.getElementById('search_society');
			if( selSociety.childNodes.length <= 3) {   				
				this.send();			    
			}
		}
}

/* Load class options for selection list */
XMLHttp.prototype.loadClassList = function() {   	
    if (document.forms[0].elements['task'].value == 'loadClassList')
    {    	
			var selClass = document.getElementById('search_class');
			if( selClass.childNodes.length <= 3)    
				this.send();			    
		}
}

/* Load class options for selection list */
XMLHttp.prototype.loadClassListForResult = function() {   	
    if (document.forms[0].elements['task'].value == 'loadClassListForResult')
    {    	
			var selClass = document.getElementById('search_class');
			if( selClass.childNodes.length <= 3)    
				this.send();			    
		}
}

XMLHttp.prototype.searchEnterings = function() {
    if (document.forms[0].elements['task'].value == 'searchEnterings')
    {
    	document.forms[0].elements['offset'].value=0;
			this.send();			    
    }
}

XMLHttp.prototype.searchResults = function() {
    if (document.forms[0].elements['task'].value == 'searchResults')
    {
    	//alert("searching");
      document.forms[0].elements['offset'].value=0;
			this.send();			    
    }
}

XMLHttp.prototype.searchPrevious = function() {
    if (document.forms[0].elements['task'].value == 'searchResults'
		|| document.forms[0].elements['task'].value == 'searchEnterings')
    {
    	var offset = parseInt(document.forms[0].elements['offset'].value);
    	offset-=30;
    	document.forms[0].elements['offset'].value = offset;    	
			this.send();			    
    }
}

XMLHttp.prototype.searchNext = function() {
    if (document.forms[0].elements['task'].value == 'searchResults'
		|| document.forms[0].elements['task'].value == 'searchEnterings')
    {
    	var offset = parseInt(document.forms[0].elements['offset'].value);
    	offset+=30;
    	document.forms[0].elements['offset'].value = offset;
			this.send();			    
    }
}

/* called to send message to a server */
XMLHttp.prototype.send = function() {
    this.request = this.XMLHttpRequest();
    this.request.open('POST', this.url, true);
    var HF = this;
    this.request.onreadystatechange = function() {
        if (HF.request.readyState == 4) { // only if req shows complete
            try {
                if (HF.request.status == 200) {
                		//alert(HF.request.responseText);
                		if(HF.request.responseXML.getElementsByTagName('response')[0].getAttribute('status') == "0") {
                			alert(HF.request.responseText);
                			var field = document.forms[0].elements['innerHTML'];
                			field.value = HF.request.responseText;
                			//location.href = HF.errorurl;
                			document.forms[0].action = HF.errorurl;
                			document.forms[0].submit();
                			return;
                		}
                		
                    var commands = HF.request.responseXML.getElementsByTagName('task');
                    for(var i=0; i < commands.length; i++) {
                        task = commands[i].getAttribute('value');
                        switch (task) {
                            case 'validatePerson':                            		
                                HF.processPerson(commands[i]);
                                break;
                            case 'loadPerson':                            		
                                HF.processloadPerson(commands[i]);
                                break;
                            case 'validateClass':
                                HF.processClass(commands[i]);
                                break;
                            case 'createClassList':
                                HF.createClassTable(commands[i]);
                                break;
                            case 'loadSummary':                            		
                                HF.processloadSummary(commands[i]);
                                break;
                            case 'validateInfo':
                            		HF.processInfo(commands[i]);
                            		break;
                            case 'loadError':
                            		HF.processError(commands[i]);
                            		break;
                            case 'searchEnterings':
                                HF.createEnteringTable(commands[i]);
                                break;
                            case 'searchResults':
                                HF.createResultTable(commands[i]);
                                break;
                            case 'loadSocietyList':
                            		HF.processloadSocietyList(commands[i]);
                            		break;
                            case 'loadClassList':
                            		HF.processloadClassList(commands[i]);
                            		break;
                            default:
                                eval(HF.request.responseText);
                        }
                    }
                } else {
                    eval(HF.request.responseText);
                }
            } catch (e) {}
        }
    }

    var sForm = "";
    var oEls = this.obj.elements;
    for( var i=0; i < oEls.length; i++ ) {
    		if (oEls[i].type == "radio" || oEls[i].type == "checkbox") {
    			if (oEls[i].checked == true) {
        		sForm += oEls[i].name + "=" + oEls[i].value;
          	if( i < oEls.length - 1 ) {
              sForm += "&";
            }
        	}
        } else {
        	if (oEls[i].name != "innerHTML") {
        		sForm += oEls[i].name + "=" + oEls[i].value;
          	if( i < oEls.length - 1 ) {
              sForm += "&";
            }
          }
        }
    }

		//alert(sForm);
    this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    this.request.send(sForm);

}

XMLHttp.prototype.processPerson = function(xmlHttp) {

    var c = xmlHttp.getElementsByTagName('class');

		//var fields = document.forms[0].elements['innerHTML[]'];
		var field = document.forms[0].elements['innerHTML'];
		
    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('abbreviation');
			valueArray[i] = c[i].getAttribute('longName');
    }
		 
		field.value = hash_to_php(keyArray,valueArray);

    var task = document.forms[0].elements['task'];
		task.value = 'validateClass';
		
    document.forms[0].submit();
}

XMLHttp.prototype.processloadPerson = function(xmlHttp) {

    var c = xmlHttp.getElementsByTagName('data');

		var field = document.forms[0].elements['innerHTML'];
		
    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('key');
			valueArray[i] = c[i].getAttribute('value');
    }
		 
		field.value = hash_to_php(keyArray,valueArray);

    var task = document.forms[0].elements['task'];
		task.value = 'validatePerson';

    document.forms[0].submit();
}

XMLHttp.prototype.processClass = function(xmlHttp) 
{ 
    var c = xmlHttp.getElementsByTagName('data');
		var field = document.forms[0].elements['innerHTML'];
		
    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('key');
			valueArray[i] = c[i].getAttribute('value');
    }
		 
		field.value = hash_to_php(keyArray,valueArray);
		//alert(field.value);
    
    var task = document.forms[0].elements['task'];
		task.value = 'validateInfo';

    document.forms[0].submit();
}

XMLHttp.prototype.processInfo = function(xmlHttp) 
{
    var c = xmlHttp.getElementsByTagName('data');
		var field = document.forms[0].elements['innerHTML'];

    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('key');
			valueArray[i] = c[i].getAttribute('value');
    }
		field.value = hash_to_php(keyArray,valueArray);
		
    var task = document.forms[0].elements['task'];
		task.value = 'loadPayment';
		
    document.forms[0].submit();
}

XMLHttp.prototype.processloadSummary = function(xmlHttp) {

    var c = xmlHttp.getElementsByTagName('data');

		var field = document.forms[0].elements['innerHTML'];
		
    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('key');
			valueArray[i] = c[i].getAttribute('value');
    }
		 
		field.value = hash_to_php(keyArray,valueArray);

    var task = document.forms[0].elements['task'];
		task.value = 'infoReady';

    document.forms[0].submit();
}

XMLHttp.prototype.processloadSocietyList = function(xmlHttp) 
{
	var selSociety = document.forms[0].elements['search_society'];
	
	var x = xmlHttp.getElementsByTagName('society');	
	for (i=0;i<x.length;i++)
	{	
		var newOpt = document.createElement('option');		
		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			
			if(x[i].childNodes[j].getAttribute('key') == 'longName')
  			newOpt.text = x[i].childNodes[j].getAttribute('value');
			if(x[i].childNodes[j].getAttribute('key') == 'abbreviation')  			
  			newOpt.value = x[i].childNodes[j].getAttribute('value');  		
		}
		if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) 
		{
			selSociety.add(newOpt);
		}
		else
		{
			selSociety.add(newOpt,null);
		}
	}

}

XMLHttp.prototype.processloadClassList = function(xmlHttp) 
{

	var selClass = document.forms[0].elements['search_class'];
	
	var x = xmlHttp.getElementsByTagName('class');
	
	for (i=0;i<x.length;i++)
	{	
		var newOpt = document.createElement('option');

		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			
			if(x[i].childNodes[j].getAttribute('key') == 'name')
  			newOpt.text = x[i].childNodes[j].getAttribute('value');
			if(x[i].childNodes[j].getAttribute('key') == 'code')  			
  			newOpt.value = x[i].childNodes[j].getAttribute('value');  		
		}
		if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) 
		{
			selClass.add(newOpt);
		}
		else
		{
			selClass.add(newOpt,null);
		}
	}

}

XMLHttp.prototype.createResultTable = function(xmlHttp) 
{
  var tblUpdate = document.getElementById('list');
  
  var tbody = tblUpdate.childNodes[0];
  
  while(tbody.hasChildNodes())
  	tbody.removeChild(tbody.lastChild);
		
	var x = xmlHttp.getElementsByTagName('competitor');
	
	//var counter = document.forms[0].elements['count'];
	var counter = xmlHttp.getElementsByTagName('count')[0].getAttribute('value');

	var offset = document.forms[0].elements['offset'].value;

	tblUpdate.appendChild(tbody);
	
	var row = document.createElement('TR');
		
	for (j=0;j<x[0].childNodes.length;j++)
	{
  	if (x[0].childNodes[j].nodeType != 1) continue;
		var container = document.createElement('TH');
		container.style.cssText = "background-color:#FF6600";
		var theData = document.createTextNode(x[0].childNodes[j].getAttribute('key'));
		container.appendChild(theData);
		row.appendChild(container);
	}
	tbody.appendChild(row);
	
	for (i=0;i<x.length;i++)
	{
		var row = document.createElement('TR');
		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			var container = document.createElement('TD');			
			var theData = document.createTextNode(x[i].childNodes[j].getAttribute('value'));
			container.appendChild(theData);
			row.appendChild(container);
		}
		tbody.appendChild(row);
	}
	if (counter  > 30)
	{
  	var tblbar = document.getElementById('searchbar');
  
  	var tbody2 = tblbar.childNodes[0];
  
  	while(tbody2.hasChildNodes())
  		tbody2.removeChild(tbody2.lastChild);
	
		var row = document.createElement('TR');
		
		var column1 = document.createElement('TD');
		//previous.setAttribute("colspan","2");
		column1.setAttribute("align","left");
		
		if (offset > 0)
		{
  		var link = document.createElement("<a>"); 
  		link.setAttribute("href","javascript:XMLHttp.searchPrevious()");
  		var text = document.createTextNode("Edellinen");			
  		link.appendChild(text);
  		column1.appendChild(link);
		}		
		row.appendChild(column1);

		var column2 = document.createElement('TD');
		//next.setAttribute("colspan","2");
		column2.setAttribute("align","right");
		
		if (counter-offset > 30)
		{
  		var link = document.createElement("<a>"); 
  		link.setAttribute("href","javascript:XMLHttp.searchNext()");
  		var text = document.createTextNode("Seuraava");			
  		link.appendChild(text);
  		column2.appendChild(link);
		}
		row.appendChild(column2);
	
		tbody2.appendChild(row);
	}
 
	document.getElementById('search_name').value='';
	document.getElementById('search_class').selectedIndex=0;
}


XMLHttp.prototype.createEnteringTable = function(xmlHttp)
{
  var tblUpdate = document.getElementById('list');
  
  var tbody = tblUpdate.childNodes[0];
  
  while(tbody.hasChildNodes())
  	tbody.removeChild(tbody.lastChild);
		
	var x = xmlHttp.getElementsByTagName('competitor');

	//var counter = document.forms[0].elements['count'];
	var counter = xmlHttp.getElementsByTagName('count')[0].getAttribute('value');

	var offset = document.forms[0].elements['offset'].value;
	
	tblUpdate.appendChild(tbody);
	
	var row = document.createElement('TR');
		
	for (j=0;j<x[0].childNodes.length;j++)
	{
  	if (x[0].childNodes[j].nodeType != 1) continue;
		var container = document.createElement('TH');
		container.style.cssText = "background-color:#FF6600";
		var theData = document.createTextNode(x[0].childNodes[j].getAttribute('key'));
		container.appendChild(theData);
		row.appendChild(container);
	}
	tbody.appendChild(row);
	
	for (i=0;i<x.length;i++)
	{
		var row = document.createElement('TR');
		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			var container = document.createElement('TD');			
			var theData = document.createTextNode(x[i].childNodes[j].getAttribute('value'));
			container.appendChild(theData);
			row.appendChild(container);
		}
		tbody.appendChild(row);
	}

	if (counter  > 30)
	{
  	var tblbar = document.getElementById('searchbar');
  
  	var tbody2 = tblbar.childNodes[0];
  
  	while(tbody2.hasChildNodes())
  		tbody2.removeChild(tbody2.lastChild);
	
		var row = document.createElement('TR');
		
		var column1 = document.createElement('TD');
		//previous.setAttribute("colspan","2");
		column1.setAttribute("align","left");
		
		if (offset > 0)
		{
  		var link = document.createElement("<a>"); 
  		link.setAttribute("href","javascript:XMLHttp.searchPrevious()");
  		var text = document.createTextNode("<--Edelliset");			
  		link.appendChild(text);
  		column1.appendChild(link);
		}		
		row.appendChild(column1);

		var column2 = document.createElement('TD');
		//next.setAttribute("colspan","2");
		column2.setAttribute("align","right");
		
		if (counter-offset > 30)
		{
  		var link = document.createElement("<a>"); 
  		link.setAttribute("href","javascript:XMLHttp.searchNext()");
  		var text = document.createTextNode("Seuraavat-->");			
  		link.appendChild(text);
  		column2.appendChild(link);
		}
		row.appendChild(column2);
	
		tbody2.appendChild(row);
	}
		
	document.getElementById('search_name').value='';
	document.getElementById('search_society').selectedIndex=0;
	document.getElementById('search_class').selectedIndex=0;
		
}


XMLHttp.prototype.processError = function(xmlHttp) 
{
    var c = xmlHttp.getElementsByTagName('data');
		var field = document.forms[0].elements['innerHTML'];

    var keyArray = new Array();
    var valueArray = new Array();
  	
		for(var i=0; i < c.length; i++) {
			keyArray[i] = c[i].getAttribute('key');
			valueArray[i] = c[i].getAttribute('value');
    }
		field.value = hash_to_php(keyArray,valueArray);
		
		//alert(field.value);

    var task = document.forms[0].elements['task'];
		task.value = 'ok';
		
    document.forms[0].submit();
}

function getSelectedRow()
{
	for (i=0;i<document.forms['f1'].testRadio.length;i++)
	{
		if (document.forms['f1'].testRadio[i].checked)
		{
			user_input = document.forms['f1'].testRadio[i].value;
			//alert(user_input);
		}
	}
}
function getNodeValue(parent, tagName)
{
    var node = parent.getElementsByTagName(tagName)[0];
    return (node && node.firstChild) ? node.firstChild.nodeValue : false;
}

function trim(str)
{
   return str.replace(/^\s+|\s+$/g,'');
}

function hash_to_php (keys,values)
{
    var a_php = "";
    var total = 0;
    for (var i=0;i<keys.length;i++)
    {
        ++ total;
        a_php += "i:"+i+";a:2:{i:0;s:" + String(keys[i]).length + ":\"" + String(keys[i]) + "\";i:1;s:"+
                String(values[i]).length + ":\"" + String(values[i]) + "\";}";
    }
    a_php = "a:" + total + ":{" + a_php + "}";
    return a_php;
}


