	// set inital actions right after loading
	function constructor(){
		set_initial_domains();	
	}
	
	
	// get the currente checked package group
	function get_checked_package_group(){
		
		var form = document.getElementById("formUpgrade");
		var elem = form.elements;

		for (i = 0; i < elem.length; i++) { 
		
			if (elem[i].type == 'radio'){
				  if(elem[i].checked == true){
						return(elem[i].value);
						break;
				  }
				  	
			} 
		
		}
	
	}
	
	//get the selected package
	function get_selected_package(){
		
		var package_group = get_checked_package_group();
		var package_id = document.getElementById("package_id_"+package_group).value;
		
		return package_id;
	}
	
	
	//get the first checked domain and set the number of inputs to display inittialy
	function set_initial_domains(){
		
		var form = document.getElementById("formUpgrade");
		var elem = form.elements;

		for (i = 0; i < elem.length; i++) { 
		
			if (elem[i].type == 'radio'){
				  if(elem[i].checked == true){
						add_domains(elem[i].value);
						break;
				  }
				  	
			} 
		
		}
		
		document.getElementById("package_id").value = get_selected_package();
	
	}
	
	// get the number of domain inputs
	function get_total_input_domains(){
		var cn = document.getElementById( "input_domains" );
		var domains = cn.getElementsByTagName("input");
		
		return(domains.length);
		
	}
	
	
	// get the number of domains inputs NOT EMPTY
	function get_total_given_domains(){
		
		var quant = 0;
		var cn = document.getElementById( "input_domains" );
		var domains = cn.getElementsByTagName("input");
		var total_domains = domains.length;
		
		for(var i = 0; i < total_domains; i++){
			
			if(domains[i].value != "")
				quant++;
						
		}
		
		return quant;
	}
	
	
	// update the current total price for the order
	function set_total(){
		
		var quant = get_total_given_domains();
		
		var package_id = get_selected_package();
		var package_price = document.getElementById("package_price_"+package_id).value;
		
		var order_total = parseFloat(package_price) * parseFloat(quant);
		var promo_percent = document.getElementById("promo_percent").value;
		
		//alert(promo_percent);
		
		if(promo_percent != ""){
			
			order_total = order_total - (order_total * (parseFloat(promo_percent) / 100));	
		
		}
		
		document.getElementById("order_total").value 	= order_total;
		document.getElementById("price").innerHTML 		= order_total;
		
	}
	
	
	//build domain inputs based in the package selected
	function add_domains( package_group ){
		
		// initialise variables
		var html = '';
		var add_one = false;
		var total = 0;
		
		if(package_group == 0){
			total = parseInt(get_total_input_domains()) + 1;
			if (total > 30){
				alert('Maximum of 30 domains!');
				total = total - 1;
			}else {
				add_one = true;
			}
		
		}else {
			
			// get maximum and minimum number of domains for the choses package_group
			var max_domains = document.getElementById("max_domains_"+package_group).value;
			var min_domains = document.getElementById("min_domains_"+package_group).value;
						 
			// set how many inputs will be created and if "add one" will be active
			if(max_domains == 0){
				total = parseInt(min_domains) + 1;
				add_one = true;
			}else {
				total = parseInt(max_domains);
			}
		
		}
		
		
		
		//build the html with the number of inputs requested
		
		for (var i = 0; i < total; i++){
			
			var value = "";
			
			if(document.getElementById('domain_'+i) != null){
				value = document.getElementById('domain_'+i).value;
			}
			
			
			html = html + '<table width="500" border="0" cellspacing="0" cellpadding="0"><tr><td class="form_www"><table width="120" border="0" cellspacing="0" cellpadding="0"><tr><td class="form_radio_ar">'+(i+1)+'.</td><td class="form_ar">www.</td></tr></table></td><td class="form2" id="Domain" width="450"><input name="domain['+i+']" id="domain_'+i+'" type="text" size="40" value="'+value+'" onkeyup="javascript: return process_domain(this,true);" style="margin-left: 7px;" /></td></tr></table>';
						
		}
				
		// update content
		document.getElementById("input_domains").innerHTML = html;
		
		//update total
		set_total();
		
		//update package id
		document.getElementById("package_id").value = get_selected_package();
		
	}
	
	
	//checks if the it was informed the minimum number of domains accordingly to the chosen package
	function check_domains_package(){
		
		var total_domains = get_total_given_domains();
		var package_group = get_checked_package_group();
		
		// get maximum and minimum number of domains for the choses package_id
		var min_domains = document.getElementById("min_domains_"+package_group).value;
		
		//alert(parseInt(total_domains));
		
		if( total_domains < min_domains )
			return false;
		else
			return true;
	
	}
	
	function check_tab(obj,e){  
	   
		var whichcode = (document.all) ? e.keyCode : e.which;
		
		if(whichcode == 9){  // TAB KEY 

			if( !process_domain(obj,true) ) {
				return false;
			}
		} 
		
	}
	
	// function to process the domain the user have just entered
	function process_domain(obj,msg){
			
			
			set_total();
			
			/*
			var domain_name	= 	obj.value
			var url 		= 	"booster_add_check_domain.php";
			var data		=	"domain_name=" + escape(domain_name);	
			
			
			var ajax = ajax_request("POST",url,data);
			ajax.onreadystatechange=function() {
				
				if (ajax.readyState==4) {
					resp = ajax.responseText;
					resp = resp.split("|");
					if(resp[0] == 'ok'){
						set_total();
						return true;
					}else{
						alert(resp[1]);
						obj.value = '';
						obj.focus();
						//window.setTimeout('fix_focus('+obj.id+')', 500);
						set_total();
						return false;
					}
						
				}
			}
			*/
				
	}
	
	function fix_focus(obj){
		
		document.getElementById(obj.id).focus();	
	}
	

	
	function change_package(package_id){
		document.getElementById("package_id").value = package_id;
		
		//protection for select element
		var group = get_checked_package_group();
		document.getElementById("package_id_"+group).value = package_id;
		
		set_total();	
	}
	
	//validate form submission
	function validate_form(){
		
		set_total();
		
		//update_form_class ------------------------------
		var form = document.getElementById('formUpgrade');
		var elem = form.elements;
		var form_size = elem.length;
				
		for (i = 0; i < form_size; i++) { 
			if(elem[i].type != 'submit' && elem[i].type != 'button'){
				if(elem[i].type != 'select-one')
					elem[i].className = '';
				else
					elem[i].className = 'se';
			}
		}
		//----------------------------------------------------
		
		document.getElementById("submit_form").disabled = true;
		
		var url 	= 	"order_validate_form.php";
		var data 	=	"package_group_id="			+	escape(get_checked_package_group()) +
						"&package_id=" + escape(get_selected_package());
		
		// get domains entered by the user
		var cn = document.getElementById( "input_domains" );
		var domains = cn.getElementsByTagName("input");
		var total_domains = domains.length;
		
		data = data +  "&total_domains=" + escape(total_domains);
		for(var i = 0; i < total_domains; i++){		
			if(domains[i].value != ""){
				data = data +  "&" + domains[i].id + "=" + escape(domains[i].value);		
			}
		}
		
		
		
		var ajax = ajax_request("POST",url,data);
		ajax.onreadystatechange=function() {
			
			if (ajax.readyState == 4) {
				resp = ajax.responseText;
				
				var error = eval('(' + resp + ')');	
				
				//alert(resp);
				
				var total_errors = error.length;
				var error_label = (total_errors > 1) ? 'Errors' : 'Error';		
				
				if(total_errors > 0){
					var error_messages = '<b>' + total_errors + ' ' + error_label + ' Found: </b><br />';
					for(i = 0; i < total_errors; i++){
						if(error[i].element != '')
							document.getElementById(error[i].element).className  = 'element_highlight';
						error_messages =  error_messages + error[i].message + '<br />';		
					}
					
					document.getElementById("form_errors").innerHTML = '<br />' + error_messages + '<br />';
					document.getElementById("form_errors").style.display = 'block';
					document.getElementById("submit_form").disabled = false;
					window.location = '#form_errors';
				
				} else {
					
					document.getElementById("form_validated").value = 'yes';
					document.getElementById("formUpgrade").submit();
				
				}
	
			}
		}
		
		return false; 
				
	}
	
	
	function send_form(){
		
		//update total
		set_total();
		
		//sends the form only if javascript is activated
		if(validate_form()){
			document.getElementById("formUpgrade").submit();
		}
	}
	
	
	function set_promo(code){
		
		var url 	= 	"order_set_promo.php";
		var data 	=	"code="	+ escape(document.getElementById("promo_code").value);
		
		var ajax = ajax_request("POST",url,data);
		ajax.onreadystatechange = function() {
			
			if (ajax.readyState == 4) {
				resp = ajax.responseText;
				
				if(resp == ""){
					document.getElementById("promo_percent").value = "";
					document.getElementById("fixed_promo_code").value = "";
					document.getElementById("promo").innerHTML = "";
					
				}else if(resp == "ERROR"){	
					alert("Invalid or Expired promotional code entered!");
					document.getElementById("promo_percent").value = "";
					document.getElementById("fixed_promo_code").value = "";
					document.getElementById("promo").innerHTML = "";
				
				}else{
					
					var array = resp.split("|");
					
					document.getElementById("promo_percent").value = array[0];
					document.getElementById("fixed_promo_code").value = array[1];
					document.getElementById("promo").innerHTML = "(" + array[0] + "% discount included)";
				}
				
				set_total();
							
			}
		}

	}