var SignUp = {

	Init:function(){
	
		try{
			if( $F("company") == "" ) $("company").focus();
			else if( $F("userfirstname") == "" ) $("userfirstname").focus();
			else if( $F("userlastname") == "" ) $("userlastname").focus();
			else if( $F("useremail") == "" ) $("useremail").focus();
		}catch(e){}
		
		/* calc GMT offset
		var d = new Date();
		var tz = ((d.getTimezoneOffset()+60)*-1)/60; */

		SignUp.AJAXCheckDomainNameOK();
		SignUp.Validate(1);
	}
	,testEmail:function(x){
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (filter.test(x.strip())) return true;
		return false;
	}
	,HighlightFieldRow:function( field, className ){
		if( field == "userfirstname" || field == "userlastname" ) field = "userfullname";
		$("tr_"+field).className = className;
	}	
	,TestTextField:function(field){
		var newVal = $(field).value;
		newVal = newVal.strip();
		newVal = newVal.replace(/[^\-0-9a-zA-Z .\']/g, '');//remove crap chars
		$(field).value = newVal;
		
		if( $F(field).length == 0 ){
			this.HighlightFieldRow( field, "" );
			return false;
		}
		else if( $F(field).length < 2 ){
			this.HighlightFieldRow( field, "err" );
			return false;
		}
		this.HighlightFieldRow( field, "ok" );
		return true;
	}
	,TestEmailField:function(field){
		$(field).value = $F(field).strip();
		if( $F(field).length == 0 ){
			this.HighlightFieldRow( field, "" );
			return false;
		}
		else if( $F(field).length < 6 || !this.testEmail( $F(field) ) ){
			this.HighlightFieldRow( field, "err" );
			return false;
		}
		this.HighlightFieldRow( field, "ok" );
		return true;
	}
	,TestPassword2Field:function(field){
		$(field).value = $F(field).strip();
		if( $F(field+"2") != $F(field) ){
			this.HighlightFieldRow( field+"2", "err" );
			return false;
		}
		if( $F(field+"2").length > 0 ) this.HighlightFieldRow( field+"2", "ok" );
		return true;
	}
	,TestPasswordField:function(field){
		$(field).value = $F(field).strip();
		if( $F(field).length == 0 ){
			this.HighlightFieldRow( field, "" );
			return false;
		}
		else if( $F(field).length < 4 ){
			this.HighlightFieldRow( field, "err" );
			return false;
		}
		this.HighlightFieldRow( field, "ok" );
		if( $F(field+"2").length ) this.TestPassword2Field( field );
		return true;	
	}
	,Validate:function( bOnLoadFlag ){
	
		var errMsg = "";
	
		//Trim all strings and remove crap characters
		var trimFields = ["username"];
		for( var i=0;i<trimFields.length;i++ )
		{
			var field = trimFields[i];
			var newVal = $F(field);
			newVal = newVal.strip();
			newVal = newVal.replace(/^\s+|\s+$/g, '');//dump space
			newVal = newVal.replace(/[^\-0-9a-zA-Z .\']/g, '');//remove crap chars
			$(field).value = newVal;			
		}
	
		var isOK = true, fieldToFocus = null;
		var requiredFields = ["userfirstname","userlastname","username","company"];
		var requiredFieldsFriendly = ["Please provide your First Name.","Please provide your Last Name.","Please provide your Username.","Please provide your Company name."];
		for( var i=0;i<requiredFields.length;i++ )
		{
			var field = requiredFields[i];
			var fieldIsOK = this.TestTextField(field);
			if( !fieldIsOK && fieldToFocus == null ) fieldToFocus = field;
			
			if( !fieldIsOK ){
				if( errMsg == "" ) errMsg = errMsg + "\n" + requiredFieldsFriendly[i];
				isOK = isOK && fieldIsOK;
			}
		}
		
		var fieldIsOK = this.TestEmailField("useremail");
		if( !fieldIsOK && fieldToFocus == null ) fieldToFocus = "useremail";
		if( !fieldIsOK ){
			if( errMsg == "" ) errMsg = errMsg + "\nYour email doesn't look right.";
			isOK = isOK && fieldIsOK;
		}
		
		fieldIsOK = this.TestPasswordField("password");
		if( !fieldIsOK && fieldToFocus == null ) fieldToFocus = "password";
		if( !fieldIsOK ){
			if( errMsg == "" ) errMsg = errMsg + "\nYour password isn't long enough.";
			isOK = isOK && fieldIsOK;
		}
		fieldIsOK = this.TestPassword2Field("password");
		if( !fieldIsOK && fieldToFocus == null ) fieldToFocus = "password2";
		if( !fieldIsOK ){
			if( errMsg == "" ) errMsg = errMsg + "\nYour password confirmation doesn't match your password.";
			isOK = isOK && fieldIsOK;
		}
		
		//check the flag that the domain is OK
		if( $("domainPrefix").value == "" )
		{
			if( fieldToFocus == null ) fieldToFocus = "domainPrefix";
			isOK = false;
			if( errMsg == "" ) errMsg = errMsg + "\nPlease choose a domain - see part 2.";
		}
		else if( $("domainPrefixOK").value != "1" )
		{
			if( fieldToFocus == null ) fieldToFocus = "domainPrefix";
			isOK = false;
			if( errMsg == "" ) errMsg = errMsg + "\nThe domain you want is already taken, please choose another - see part 2.";
		}
	
		if( isOK ) $("signupForm1").action = "index.cfm";
		else{
			if( !bOnLoadFlag ){
				$$('div.nextPrevButtons').each(function(butGroup){butGroup.style.display='none'});
				$$('fieldset').each(function(fs){fs.style.display='block'});
			}
			if( fieldToFocus != null ){ try{ $( fieldToFocus ).focus(); }catch(e){} }
			if( bOnLoadFlag == null ) alert( "Please just fix these little things first:\n" + errMsg );
		}
		if( $("sfc") ) { $("sfc").value = "OK";	}
		return isOK;
	}
	,SuggestInstallationName:function(){
		var company = $F("company");
		var domainPrefixSuggestion = company.toLowerCase().replace(/[^0-9^a-z]/g, '');
		if( $F("domainPrefix") == domainPrefixSuggestion ) return;
		$("domainPrefix").value = domainPrefixSuggestion;
		this.TestDomainPrefix("domainPrefix");
	}
	,TestDomainPrefix:function(field){
		SignUp.HighlightFieldRow( field, "maybeOK" );
		if( SignUp.checkDomainTimeout ) clearTimeout( SignUp.checkDomainTimeout );
		SignUp.checkDomainTimeout = setTimeout( SignUp.AJAXCheckDomainNameOK, 500 );
		return true;
	}
	,UpdateDisplaySite:function(){
		var fullDomainName = $F("domainPrefix") + "." + $F("domain");
		
		var bUseHTTPS = domainSupportHTTPS[ $("domain").selectedIndex ];
		$("th_domainMethod").innerHTML = "http" + (bUseHTTPS?"s":"") + "://";
		$("spanDomainMethod").innerHTML = "http" + (bUseHTTPS?"s":"") + "://";
		$("useHTTPS").value = bUseHTTPS;

		var domainPreviewMsg = fullDomainName + "/";
		if( !bUseHTTPS ) domainPreviewMsg = domainPreviewMsg + "<br/><small>Note: HTTPS security is not available unless you choose the <i>teamworkpm.net</i> option.</small>";
		$("siteURL").innerHTML = domainPreviewMsg;

	}
	,AJAXCheckDomainNameOK:function(){

		var updDomainPrefix = $F("domainPrefix").toLowerCase().replace(/[^0-9^a-z]/g, '');
		if( $("domainPrefix").value != updDomainPrefix ) $("domainPrefix").value = updDomainPrefix;//dump invalid chars
		
		var fullDomainName = $F("domainPrefix") + "." + $F("domain");

		if( $F("domainPrefix").length < 3 ){
			SignUp.HighlightFieldRow( "domainPrefix", "" );
			$("siteURLDiv").style.display = "none";
			return false;
		}
		if( $("domainMsg") ) Element.remove("domainMsg");

		SignUp.HighlightFieldRow( "domainPrefix", "maybeOK" );
		if( $("ajaxMsg") ) Element.remove( "ajaxMsg" );
		$("domainPrefixOK").value = "0";
		//new Insertion.After( $("domainTable"), '<div id="ajaxMsg">Checking Domain <span class="domain">'+fullDomainName+'</span> is OK..</div>' );
		var url = "index.cfm?action=checkDomainOK&code=" + $F("domainPrefix") + "&domain=" + $F("domain");
		new Ajax.Request( url, {asynchronous:true, evalScripts:false, onSuccess:SignUp.AJAXVerifyDomainNameIsOK_onSuccess, onFailure:errFunc});
	}
	,AJAXVerifyDomainNameIsOK_onSuccess:function(t){
		z = SignUp.parseJSON( t.responseText );
		if( $("ajaxMsg") ) Element.remove( "ajaxMsg" );
		if( z.status && z.status == "OK" ){
			$("domainPrefixOK").value = "1";
			SignUp.HighlightFieldRow( "domainPrefix", "ok" );
			SignUp.UpdateDisplaySite();
			$("siteURLDiv").style.display = "";
		}else{
			$("domainPrefixOK").value = "0";
			SignUp.HighlightFieldRow( "domainPrefix", "err" );
			if( $("domainMsg") ) Element.remove( "domainMsg" );
			new Insertion.After( $("domainTable"), '<div id="domainMsg">Sorry, <span class="domain">'+z.code+"."+z.domain+'</span> is already taken.</div>' );
			$("siteURLDiv").style.display = "none";
		}
		return false;
	}
	,parseJSON:function( json ){
		var o = eval('(' + json + ')');
		return o;
	}

};
Event.observe(window, "load", SignUp.Init );

var errFunc = function(t) {
	var win = window.open("", "win", "width=1024,height=700,resizable=yes,scrollbars=yes,status=no"); // a window object
	win.document.open("text/html", "replace");
	win.document.write( "<html><body style='margin:0'><div style='border-bottom:1px solid #222;background:#666;padding:10px;'><h1 style='color:#FFF;margin:0;padding:0;'>Teamwork Ajax Error</h1></div><div style='padding:10px;'>"+t.responseText.replace(/^\s+|\s+$/, '') + "</div></body></html>" );
	win.document.close();
}