	var xmlrpc = imprt('xmlrpc');
	var domain = location.href.split("/");

	if (domain[2] == "dev.trance.nu") { 
		var server = "http://dev.trance.nu/xmlrpc/";
		var pushServer = "http://dev.trance.nu/v4/";
	} else {
		var server = "http://trance.nu/xmlrpc/";
		var pushServer = "http://trance.nu/v4/";
	}
	var isError;

	// === Get/Hide/Show/Toggle ===

	function ge()	{
	  var ea;
	  for( var i = 0; i < arguments.length; i++ ) {
	    var e = arguments[i];
	    if( typeof e == 'string' )
	      e = document.getElementById(e);
	    if( arguments.length == 1 )
	      return e;
	    if( !ea )
	      ea = new Array();
	    ea[ea.length] = e;
	  }
	  return ea;
	}
	
	function show()	{
	  for( var i = 0; i < arguments.length; i++ ) {
	    var element = ge(arguments[i]);
	    if (element && element.style) element.style.display = '';
	  }
	  return false;
	}
	
	function hide()	{
	  for( var i = 0; i < arguments.length; i++ ) {
	    var element = ge(arguments[i]);
	    if (element && element.style) element.style.display = 'none';
	  }
	  return false;
	}
	
	function shown(el) {
	    el = ge(el);
	    return (el.style.display != 'none');
	}
	
	function toggle()	{
	  for( var i = 0; i < arguments.length; i++ ) {
	    var element = ge(arguments[i]);
	    element.style.display = (element.style.display == 'block') ? 'none' : 'block';
	  }
	  return false;
	}

	//
	// Melodica functions
	//

	function melodicaRegistrationInit(frmObject) {
		//hide loader
		melodicaIndicator('hidden');
		document.getElementById("divError").style.visibility="hidden"; 
		
    try {
    	var method = "testServer";
      var get_data = new xmlrpc.XMLRPCMethod(server,method);  
      var result = get_data();
      if (result != 1) {
        melodicaRegistrationError(4, frmObject, 'Registration server error, please try again later');
      }
    } catch (err) {
    	//alert(err);
      melodicaRegistrationError(4, frmObject, 'Registration server error, please try again later');
    }
	}
	
	function melodicaRegistrationError(errType, frmObject, errString) {
		switch (errType) {
			case 1:
				//visual confirmation, non ending
				alert(errString);
				break;
			case 2:
				//visual confirmation and disable complete form
				for (i=0; i < frmObject.elements.length; i++) {
					ele = frmObject.elements[i];
					ele.disabled = "true";
				}
				isError = 1;
				alert(errString);
				break;
			case 3:
				document.getElementById("divError").style.visibility="visible"; 
				document.getElementById("divError").innerHTML=document.getElementById("divError").innerHTML + errString + "<br>"; 
				break;
				
			case 4:
				//error and kick away user
				for (i=0; i < frmObject.elements.length; i++) {
					ele = frmObject.elements[i];
					ele.disabled = "true";
				}
				isError = 1;
				alert(errString);
				window.location=pushServer;
				break;
				
		}
		
	}

	function melodicaRegistrationCheckForm(frmObject) {
		//check each formvalue, break if anything is wrong
		var theStr;
		melodicaIndicator('visible');
		
		//always hide errorDiv
		document.getElementById("divError").innerHTML=""; 
		document.getElementById("divError").style.visibility="hidden"; 
		
		//disable while running
		frmObject.profile_save.disabled = true;
		
		for (i=0; i < frmObject.elements.length; i++) {
			ele = frmObject.elements[i];
			switch (ele.name) {
				case "txtUname":
					//username logic
					if (ele.value == "") { 
						frmObject.txtUname.style.border = "1px solid #c30";
					} else {
						//check name
						if (frmObject.reAddNew.value != ele.value) {
							if (melodicaCheckAlphanumeric(ele.value)) {
						    try {
						    	var method = "testUsername";
						      var get_data = new xmlrpc.XMLRPCMethod(server,method);  
						      var result = get_data(ele.value);
						      
						      if (result == 0) {
						        //does not exist
						        frmObject.reAddNew.value = ele.value;
						        frmObject.txtUname.style.border = "1px solid green";
						      } else {
						        //assume it exist
						        melodicaRegistrationError(3, frmObject, ele.value + ' already exist');
						        frmObject.txtUname.style.border = "1px solid #c30";
						      }
						    } catch (err) {
						      alert(err);
						      melodicaRegistrationError(2, frmObject, 'Registration server is currently not accepting connections, please try again later');
						    }
						  } else {
						  	melodicaRegistrationError(3, frmObject, 'Username can only consist of letters and numbers, no special characters can be used');
						  	frmObject.txtUname.style.border = "1px solid #c30";
						  }
						}
					}
				break;
				case "email":
					//email logic
					if (ele.value == "") {
						frmObject.email.style.border = "1px solid #c30";
					} else {
						frmObject.email.style.border = "1px solid green";
					}
				break;
				case "reemail":
					//email logic
					if (ele.value == "") {
						frmObject.reemail.style.border = "1px solid #c30";
					} else {
						//confirm both
						if (frmObject.email.value == frmObject.reemail.value) {
							if (melodicaValidateEmailAddress(frmObject.email.value) && melodicaValidateEmailAddress(frmObject.email.value)) {
								//XMLRPC-confirm email
						    try {
						    	var method = "testEmail";
						      var get_data = new xmlrpc.XMLRPCMethod(server,method);  
						      var result = get_data(ele.value);
						      if (result == 0) {
						        //does not exist - lock fields
						        frmObject.email.style.border = "1px solid green";
						        frmObject.reemail.style.border = "1px solid green";
						      } else {
						        //assume it exist
						        melodicaRegistrationError(3, frmObject, 'That email already exist, please select another');
						        frmObject.email.style.border = "1px solid #c30";
						        frmObject.reemail.style.border = "1px solid #c30";
						      }
						    } catch (err) {
						      melodicaRegistrationError(2, frmObject, 'Registration server error, please try again later');
						    }
						  } else {
						  	melodicaRegistrationError(3, frmObject, ele.value + ' don\'t seem to be an email');
				        frmObject.email.style.border = "1px solid #c30";
				        frmObject.reemail.style.border = "1px solid #c30";
						  }
							
						} else {
							frmObject.reemail.style.border = "1px solid #c30";
							alert('E-mails dont match');
						}

					}
				break;
				case "newpass1":
					if (ele.value == "") {
						frmObject.newpass1.style.border = "1px solid #c30";
					} else {
						frmObject.newpass1.style.border = "1px solid green";
					}
				break;
				case "newpass2":
					if (ele.value == "") {
						frmObject.newpass2.style.border = "1px solid #c30";
					} else {
						//confirm both
						if (frmObject.newpass1.value == frmObject.newpass2.value) {							
							frmObject.newpass2.style.border = "1px solid green";
						} else {
					  	melodicaRegistrationError(3, frmObject, 'Passwords dont match');
						}
					}
				break;
				case "country":
					if (ele.value == 0) {
						frmObject.country.style.border = "1px solid #c30";
					} else {
						frmObject.country.style.border = "1px solid green";						
					}
				break;
				
				case "birthdate":
					if (ele.value == "YYYYMMDD" || ele.value == "") {
						frmObject.birthdate.style.border = "1px solid #c30";
					} else {
						frmObject.birthdate.style.border = "1px solid green";						
					}				
				break;
				
				case "city":
					frmObject.city.style.border = "1px solid green";						
				break;
			}
		}
		
		var isOk = 1;
		//only if we never encounterd any error
		
		for (i=0; i < frmObject.elements.length; i++) {
			ele = frmObject.elements[i];
			if (ele.name != 'country') {
				if (ele.style.border == "1px solid rgb(204, 51, 0)") {
					isOk = 0;
					frmObject.doSave.value = 0;
				}
			}
		}
		
		//re-enable button
		frmObject.profile_save.disabled = false;
						
		if (isOk == 1 && isError != 1 && frmObject.country.value != 0) {
			//off we go then
			frmObject.doSave.value = 1;
			return true;
		} else {
			return false;
		}
	
	}
	
	function melodicaTestUsername(strMethod, strSearch) {
	  var method = strMethod;
	  var get_data = new xmlrpc.XMLRPCMethod(server,method);
	
	  var result = get_data(strSearch);
	  
	  if (result == 0) {
	    //does not exist
	    document.forms.frmTest.txtUname.style.border = "1px solid #c30";;
	  } else {
	    //assume it exist
	    document.forms.frmTest.txtUname.style.border = "1px solid green";;
	  }
	  //alert(result);
	}

	function melodicaCheckAlphanumeric(alphane) {
		var numaric = alphane;
		for(var j=0; j<numaric.length; j++) {
			  var alphaa = numaric.charAt(j);
			  var hh = alphaa.charCodeAt(0);
			  if((hh > 47 && hh<59) || (hh > 64 && hh<91) || (hh > 96 && hh<123)) {
			  } else{
				 return false;
			  }
		}
		
	 return true;
	}

	function melodicaValidateEmailAddress(str) {
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	}
	
	function melodicaIndicator(view) {
		//document.images.indicator.style.visibility=view;
	}
	
	
	// StatusUpdate functions
	function melodicaSetStatus(userid, str) {
	  try {
			var method = "setStatus";
		  var get_data = new xmlrpc.XMLRPCMethod(server,method);  
		  var result = get_data(userid, str);

		  if (result == 1) {
		    //does not exist
		    return 1;
		  } else {
		  	alert(result);
		    return 0;
		  }
		} catch (err) {
		  alert(err);
			return 0;
		}
	}
