function createRequest() {
  try {
    var request = new XMLHttpRequest();
  } catch (tryMS) {
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (otherMS) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }
  return request;
}

function getAJAX(url, callBackFunction, obj) {
	  request = createRequest();
	  if (request == null) {
	    alert("Unable to create request");
	    return;
	  }
	  request.open("GET", url, true);
	  request.onreadystatechange = function(){
		  							if(checkIfToShow(request)){
		  								callBackFunction(obj);
		  }
	  }
	  request.send(null);
	}

function checkIfToShow(requestObj){
	if (requestObj.readyState == 4) {
	    if (requestObj.status == 200) {
	      return true;
	    }
	  }
	else{
		return false;
	}
}

function calculateSubscriptionPrice(priceArray, quantityField, resultField, min, max){
	quantity = quantityField.value;
	minPrice = priceArray[0][2];
	for (i=0; i<priceArray.length; i++){
		if (priceArray[i][2] < minPrice){
			minPrice = priceArray[i][2];
		}
		if(priceArray[i][0] <= quantity && priceArray[i][1] >= quantity){
			 resultField.value = priceArray[i][2] * quantity;
			 return null;
		}
	}
	resultField.value = minPrice * quantity;
	return null;
}


function getIdentitySelect(identitySelect, displayDiv, loadingMessage, defaultValue){
	this.identitySelect = identitySelect;	
	this.displayDiv = displayDiv;	
	this.loadingMessage = loadingMessage;
	this.defaultValue = defaultValue;
	identObj = this;
	
	
	this.identitySelect.onchange = function()
								{
									identObj.identitySelected(identObj);
								};
	
	this.displayDiv.innerHTML = '';
}
getIdentitySelect.prototype.getProfileCallback =function(req, obj) {
	if(checkIfToShow(req)){
	      obj.displayDiv.innerHTML= req.responseText;
	}
}
getIdentitySelect.prototype.identitySelected = function(obj){
	obj.displayDiv.innerHTML=obj.loadingMessage;
	var val = obj.identitySelect[obj.identitySelect.selectedIndex].value;
	
	if(obj.defaultSelection != val && val!='' && val!= obj.defaultValue){
		
		 url = '/main_action/cmd=DisplayUserProfile&npf=1&identityId='+val;
		 identityRequest = createRequest();
		  if (identityRequest == null) {
		    alert("Unable to create request");
		    return;
		  }
		  identityRequest.open("GET", url, true);
		  identityRequest.onreadystatechange = function(){
			  if(checkIfToShow(identityRequest)){
				  obj.getProfileCallback(identityRequest, obj);
			  }
		  }
		  identityRequest.send(null);
	}
	else{
		obj.displayDiv.innerHTML='';
	}
}


function getAdvancedSearchPanel(displayDivv, loadingMessage, loaded){
	this.displayDiv = displayDivv;	
	this.loaded = loaded;
}
getAdvancedSearchPanel.prototype.advancedSearchPanelCallbackFunc = function(req, obj) {
	if(checkIfToShow(req)){
	      this.displayDiv.innerHTML= req.responseText;
	      this.loaded = true;
	}
}
getAdvancedSearchPanel.prototype.advancedSearchClicked = function(div){	
	obj = this;
	if(!obj.loaded){
		 url = '/main_action/cmd=DisplayAdvancedSearchPanel&npf=1';
		 sprq = createRequest();
		  if (sprq == null) {
		    alert("Unable to create request");
		    return;
		  }
		  sprq.open("GET", url, true);
		  sprq.onreadystatechange = function(){
			  if(checkIfToShow(sprq)){
				  //this.advancedSearchPanelCallbackFunc(sprq);
				  div.innerHTML= sprq.responseText;
				  div.style.display = 'block';
			      obj.loaded = true;
			  }
		  }
		  sprq.send(null);
	}
}







function chainedReceiverSelect(forAddress, natAddress, defaultSelection, defaultText, countrySelect, municipalitySelect, localitySelect, streetSelect, houseSelect, postCodeText, taForeignAddress, cbxOtherHouse, postCodeActive, otherHouse, flatNumber, cbxOtherStreet, otherStreet){
	this.defaultSelection = defaultSelection;
	this.defaultText = defaultText;
	this.ddlCountry= countrySelect;
	this.ddlMunicipality = municipalitySelect;
	this.ddlLocality = localitySelect;
	this.ddlStreet = streetSelect;
	this.ddlHouse = houseSelect;
	this.natAddress = natAddress;
	this.taForeignAddress = taForeignAddress;
	this.forAddress = forAddress;
	this.HousesXML = null;
	this.txtPostCode = postCodeText;
	this.cbxOtherHouse = cbxOtherHouse;
	this.cbxOtherStreet = cbxOtherStreet;
	this.postCodeActive = postCodeActive;
	this.otherHouse = otherHouse;
	this.otherStreet = otherStreet;
	this.flatNumber = flatNumber;
	
	this.preselectedCountry = null;
	this.preselectedMunicipality = null;
	this.preselectedLocality = null;
	this.preselectedStreet = null;
	this.preselectedHouse = null;
	
	this.forAddress.style.display = 'none';
	this.natAddress.style.display = 'none';
	
	thisObj = this;
	
	
	this.ddlCountry.onchange = function()
								{
									thisObj.countrySelected(thisObj);
								};
	this.ddlMunicipality.onchange = function()
								{
									thisObj.municipalitySelected(thisObj);
								};
	this.ddlLocality.onchange = function()
								{
									thisObj.localitySelected(thisObj);
								};
	this.ddlStreet.onchange = function()
								{
									thisObj.streetSelected(thisObj);
								};
	this.ddlHouse.onchange = function()
								{
									thisObj.houseSelected(thisObj);
								};
	
	this.DDLReset(this.ddlCountry, thisObj);
	this.DDLReset(this.ddlMunicipality, thisObj);
	this.DDLReset(this.ddlLocality, thisObj);
	this.DDLReset(this.ddlStreet, thisObj);
	this.DDLReset(this.ddlHouse, thisObj);
	this.txtPostCode.value='';

	
	this.ddlCountry.disabled = true;
}
chainedReceiverSelect.prototype.doStartUp =function() {
	getAJAX('/main_action/cmd=GetCountriesXML&npf=1', this.getCountriesXMLCallback, this);
}
chainedReceiverSelect.prototype.doCascadeSelect =function(country, municipality, locality, street, house, otherHouse, otherStreet) {
	getAJAX('/main_action/cmd=GetCountriesXML&npf=1', this.getCountriesXMLCallback, this);
	this.preselectedCountry = country;
	this.preselectedMunicipality = municipality;
	this.preselectedLocality = locality;
	this.preselectedStreet = street;
	this.preselectedHouse = house;
	if(otherHouse == '2' && otherHouse !=''){
		this.preselectedOtherHouse = true;
	}
	else{
		this.preselectedOtherHouse = false;
	}
	
	if(otherStreet == '2' && otherStreet !=''){
		this.preselectedOtherStreet = true;
	}
	else{
		this.preselectedOtherStreet = false;
	}
}
chainedReceiverSelect.prototype.getCountriesXMLCallback =function(obj) {
	if(checkIfToShow(request)){
	      var xmlDoc= request.responseXML;
	      var countries = xmlDoc.getElementsByTagName('country');
	      var options = [];
	      for (i=0; i < countries.length; i++)
	      {
	    	  var id = countries[i].getElementsByTagName('id')[0].firstChild.nodeValue;
	    	  var name = countries[i].getElementsByTagName('name')[0].firstChild.nodeValue;
	    	  options[options.length]= new Option(name, id);
	      }
	      obj.DDLreload(obj.ddlCountry, options, obj);
	      if(obj.preselectedCountry != ''){
	    	var  cid=obj.preselectedCountry;
	    	  obj.preselectedCountry='';
	    	  obj.DDLselect(obj.ddlCountry, cid, obj);
	      }
	      obj.ddlCountry.disabled = false;
	}
}
chainedReceiverSelect.prototype.getMunicipalitiesXMLCallback =function(req, obj) {
	if(checkIfToShow(req)){
	      var xmlDoc= req.responseXML;
	      var municipalities = xmlDoc.getElementsByTagName('municipality');
	      var options = [];
	      for (i=0; i < municipalities.length; i++)
	      {
	    	  var id = municipalities[i].getElementsByTagName('id')[0].firstChild.nodeValue;
	    	  var name = municipalities[i].getElementsByTagName('name')[0].firstChild.nodeValue;
	    	  options[options.length]= new Option(name, id);
	      }
	      obj.DDLreload(obj.ddlMunicipality, options, obj);
	      if(obj.preselectedMunicipality != ''){
	    	var  mid=obj.preselectedMunicipality;
	    	  obj.preselectedMunicipality='';
	    	  obj.DDLselect(obj.ddlMunicipality, mid, obj); 
	      }
	      obj.ddlMunicipality.disabled = false;
	}
}
chainedReceiverSelect.prototype.getLocalitiesXMLCallback =function(req, obj) {
	if(checkIfToShow(req)){
	      var xmlDoc= req.responseXML;
	      var localities = xmlDoc.getElementsByTagName('locality');
	      var options = [];
	      for (i=0; i < localities.length; i++)
	      {
	    	  var id = localities[i].getElementsByTagName('id')[0].firstChild.nodeValue;
	    	  var name = localities[i].getElementsByTagName('name')[0].firstChild.nodeValue;
	    	  options[options.length]= new Option(name, id);
	      }
	      obj.DDLreload(obj.ddlLocality, options, obj);
	      if(obj.preselectedLocality != ''){
	    	 var lid = obj.preselectedLocality;
	    	  obj.preselectedLocality='';
	    	  obj.DDLselect(obj.ddlLocality, lid, obj);
	    	  
	      }
	      obj.ddlLocality.disabled = false;
	}
}
chainedReceiverSelect.prototype.getStreetsXMLCallback =function(req, obj) {
	
	if(checkIfToShow(req)){
	      var xmlDoc= req.responseXML;
	      var streets = xmlDoc.getElementsByTagName('street');
	      var options = [];
	      var lastValue;
	      for (i=0; i < streets.length; i++)
	      {
	    	  var id = streets[i].getElementsByTagName('id')[0].firstChild.nodeValue;
	    	  var name = streets[i].getElementsByTagName('name')[0].firstChild.nodeValue;
	    	  options[options.length]= new Option(name, id);
	    	  lastValue = id;
	      }
	      obj.DDLreload(obj.ddlStreet, options, obj);
	      if(options.length == 1){
	    	  obj.DDLselect(obj.ddlStreet, lastValue, obj);
	      }
	      
	      if(obj.preselectedStreet != '' && options.length != 1){
	    	  
	    	 var sid=obj.preselectedStreet;
	    	  obj.preselectedStreet='';
	    	  obj.DDLselect(obj.ddlStreet, sid, obj);
	    	  
	      }
	      
	      obj.ddlStreet.disabled = false;
	  	  obj.cbxOtherStreet.disabled = false;
	  	  
	  	  if(obj.preselectedOtherStreet == true){
	  		  	obj.preselectedOtherStreet = false;
	  		 	obj.cbxOtherStreet.checked = true;
	  		 	obj.ddlStreet.style.display = 'none';
	  		 	obj.otherStreet.style.display = 'block';
	  		 
	    	  obj.preselectedOtherHouse = false;
	    	  obj.postCodeActive.style.display = 'block';
	  	  	  obj.txtPostCode.style.display = 'none';
	  	  	  obj.ddlHouse.style.display = 'none';
	  	  	  obj.otherHouse.style.display = 'block';
	  	  	  obj.cbxOtherHouse.checked = true;
	    	  
	      }	
	}
}
chainedReceiverSelect.prototype.getHousesXMLCallback =function(req, obj) {
	if(checkIfToShow(req)){
	      var xmlDoc= req.responseXML;
	      var houses = xmlDoc.getElementsByTagName('house');
	      obj.HousesXML = xmlDoc;
	      var options = [];
	      var lastValue;
	      for (i=0; i < houses.length; i++)
	      {
	    	  var id = houses[i].getElementsByTagName('id')[0].firstChild.nodeValue;
	    	  var name = houses[i].getElementsByTagName('name')[0].firstChild.nodeValue;
	    	  lastValue = id;
	    	  options[options.length]= new Option(name, id);
	      }
	      obj.DDLreload(obj.ddlHouse, options, obj);
	      obj.ddlHouse.disabled = false;
	      obj.cbxOtherHouse.disabled = false;
	      obj.txtPostCode.disabled = false;
	  	  obj.postCodeActive.disabled = false;
	  	  obj.flatNumber.disabled = false;
	      if(options.length == 1){
	    	  obj.DDLselect(obj.ddlHouse, lastValue, obj);
	      }
	      if(obj.preselectedHouse != '' && options.length != 1){
	    	  var hid = obj.preselectedHouse;
	    	  obj.preselectedHouse='';
	    	  obj.DDLselect(obj.ddlHouse, hid, obj);
	    	  
	      }

	      if(obj.preselectedOtherHouse == true || (typeof(obj.preselectedOtherStreet) != "undefined" && obj.preselectedOtherStreet != true)){
	    	  obj.preselectedOtherHouse = false;
	    	  obj.postCodeActive.style.display = 'block';
	  	  	  obj.txtPostCode.style.display = 'none';
	  	  	  obj.ddlHouse.style.display = 'none';
	  	  	  obj.otherHouse.style.display = 'block';
	  	  	  obj.cbxOtherHouse.checked = true;
	    	  
	      }	    
	      
	}
}
chainedReceiverSelect.prototype.countrySelected = function(obj){
	obj.DDLReset(obj.ddlMunicipality, obj);
	obj.DDLReset(obj.ddlLocality, obj);
	obj.DDLReset(obj.ddlStreet, obj);
	obj.DDLReset(obj.ddlHouse, obj);
	obj.ddlMunicipality.disabled = true;
	obj.ddlLocality.disabled = true;
	obj.ddlStreet.disabled = true;
	obj.ddlHouse.disabled = true;
	obj.cbxOtherHouse.disabled = true;
	obj.txtPostCode.disabled = true;
	obj.postCodeActive.disabled = true;
	obj.flatNumber.disabled = true;
	
	
	var val = obj.ddlCountry[obj.ddlCountry.selectedIndex].value;
	obj.txtPostCode.value = '';
	obj.taForeignAddress.value = '';
	obj.cbxOtherHouse.checked = false;
	obj.postCodeActive.style.display = 'none';
	obj.txtPostCode.style.display = 'block';
	obj.ddlHouse.style.display = 'block';
	obj.otherHouse.style.display = 'none';
	
	obj.otherStreet.style.display = 'none';
	obj.cbxOtherStreet.disabled = true;
	
	if(obj.defaultSelection != val && val!='' && val==1){
		
		 url = '/main_action/cmd=GetMunicipalitiesXML&npf=1&countryId='+val;
		 municipalityRequest = createRequest();
		  if (municipalityRequest == null) {
		    alert("Unable to create request");
		    return;
		  }
		  municipalityRequest.open("GET", url, true);
		  municipalityRequest.onreadystatechange = function(){
			  if(checkIfToShow(municipalityRequest)){
				  obj.getMunicipalitiesXMLCallback(municipalityRequest, obj);
			  }
		  }
		  municipalityRequest.send(null);
		  this.forAddress.style.display = 'none';
		  this.natAddress.style.display = 'block';
	}
	if(val > 1){
		this.forAddress.style.display = 'block';
		this.natAddress.style.display = 'none';
	}
	if(val < 1){
		this.forAddress.style.display = 'none';
		this.natAddress.style.display = 'none';
	}
}
chainedReceiverSelect.prototype.municipalitySelected= function(obj){
	obj.DDLReset(obj.ddlLocality, obj);
	obj.DDLReset(obj.ddlStreet, obj);
	obj.DDLReset(obj.ddlHouse, obj);
	obj.ddlLocality.disabled = true;
	obj.ddlStreet.disabled = true;
	obj.ddlHouse.disabled = true;
	obj.cbxOtherHouse.disabled = true;
	obj.txtPostCode.value='';
	obj.txtPostCode.disabled = true;
	obj.postCodeActive.disabled = true;
	obj.flatNumber.disabled = true;
	var val = obj.ddlMunicipality[obj.ddlMunicipality.selectedIndex].value;
	
	obj.cbxOtherHouse.checked = false;
	obj.postCodeActive.style.display = 'none';
	obj.txtPostCode.style.display = 'block';
	obj.ddlHouse.style.display = 'block';
	obj.otherHouse.style.display = 'none';
	obj.otherStreet.style.display = 'none';
	obj.cbxOtherStreet.disabled = true;
	
	if(obj.defaultSelection != val && val!=''){
		
		 url = '/main_action/cmd=GetLocalitiesXML&npf=1&municipalityId='+val;
		 localityRequest = createRequest();
		  if (localityRequest == null) {
		    alert("Unable to create request");
		    return;
		  }
		  localityRequest.open("GET", url, true);
		  localityRequest.onreadystatechange = function(){
			  if(checkIfToShow(localityRequest)){
				  obj.getLocalitiesXMLCallback(localityRequest, obj);
			  }
		  }
		  localityRequest.send(null);
	}
}
chainedReceiverSelect.prototype.localitySelected= function(obj){
	obj.DDLReset(obj.ddlStreet, obj);
	obj.DDLReset(obj.ddlHouse, obj);
	obj.ddlStreet.disabled = true;
	obj.ddlHouse.disabled = true;
	obj.cbxOtherHouse.disabled = true;
	obj.txtPostCode.disabled = true;
	obj.postCodeActive.disabled = true;
	obj.flatNumber.disabled = true;
	obj.txtPostCode.value='';
	var val = obj.ddlLocality[obj.ddlLocality.selectedIndex].value;
	
	obj.cbxOtherHouse.checked = false;
	obj.postCodeActive.style.display = 'none';
	obj.txtPostCode.style.display = 'block';
	obj.ddlHouse.style.display = 'block';
	obj.otherHouse.style.display = 'none';
	
	if(obj.defaultSelection != val && val!=''){
		
		 url = '/main_action/cmd=GetStreetsXML&npf=1&localityId='+val;
		 streetsRequest = createRequest();
		  if (streetsRequest == null) {
		    alert("Unable to create request");
		    return;
		  }
		  streetsRequest.open("GET", url, true);
		  streetsRequest.onreadystatechange = function(){
			  if(checkIfToShow(streetsRequest)){
				  obj.getStreetsXMLCallback(streetsRequest, obj);
			  }
		  }
		  streetsRequest.send(null);
	}
}
chainedReceiverSelect.prototype.streetSelected= function(obj){
	
	obj.DDLReset(obj.ddlHouse, obj);
	obj.txtPostCode.value='';
	obj.ddlHouse.disabled = true;
	obj.cbxOtherHouse.disabled = true;
	obj.txtPostCode.disabled = true;
	obj.postCodeActive.disabled = true;
	obj.flatNumber.disabled = true;
	var val = obj.ddlStreet[obj.ddlStreet.selectedIndex].value;
	
	obj.cbxOtherHouse.checked = false;
	obj.postCodeActive.style.display = 'none'
	obj.txtPostCode.style.display = 'block';
	obj.ddlHouse.style.display = 'block';
	obj.otherHouse.style.display = 'none';
	
	if(obj.defaultSelection != val && val!=''){
		
		 url = '/main_action/cmd=GetHousesXML&npf=1&streetId='+val;
		 housesRequest = createRequest();
		  if (housesRequest == null) {
		    alert("Unable to create request");
		    return;
		  }
		  housesRequest.open("GET", url, true);
		  housesRequest.onreadystatechange = function(){
			  if(checkIfToShow(housesRequest)){
				  obj.getHousesXMLCallback(housesRequest, obj);
			  }
		  }
		  housesRequest.send(null);
	}
}
chainedReceiverSelect.prototype.houseSelected= function(obj){
	var val = obj.ddlHouse[obj.ddlHouse.selectedIndex].value;
	
	obj.cbxOtherHouse.checked = false;
	obj.postCodeActive.style.display = 'none';
	obj.txtPostCode.style.display = 'block';
	obj.ddlHouse.style.display = 'block';
	obj.otherHouse.style.display = 'none';
	
	if(obj.defaultSelection != val && val!=''){
		var xmlDoc= obj.HousesXML;
		var houses = xmlDoc.getElementsByTagName('house');
		var postCode;
		for (i=0; i < houses.length; i++)
		{
			var id = houses[i].getElementsByTagName('id')[0].firstChild.nodeValue;
			if(val == id){
				obj.txtPostCode.value = houses[i].getElementsByTagName('postCode')[0].firstChild.nodeValue;
			}
		}
	}
}
chainedReceiverSelect.prototype.DDLReset= function(ddl, obj){
	ddl.options.length = 0;
	ddl.options[ddl.options.length]= new Option(this.defaultText, this.defaultSelection);
	this.DDLselect(ddl, this.defaultSelection, obj);
}
chainedReceiverSelect.prototype.DDLreload= function(ddl, options, obj){
	for (i=0; i<options.length; i++) { 
		ddl.options[ddl.options.length] = options[i];
	}
}
chainedReceiverSelect.prototype.DDLselect= function(ddl, val, obj){
	
	var selectionMade = false;
	for (i=0; i<ddl.options.length; i++) { 
		ddl.options[i].selected = false;
		if(ddl.options[i].value == val){
			ddl.options[i].selected = true;
			if(ddl.options[i].value != obj.defaultSelection){
				selectionMade = true;
			}
		}
	}
	if(selectionMade == true){
		ddl.onchange();
	}
}



		