﻿var SignUp = 
{
    init: function()
    {
        var companyNameTxt = $(".companyNameTxt")[0];
        var siteAddressTxt = $(".siteAddressTxt")[0];

        if (typeof(companyNameTxt) != "undefined")
        {
            $(companyNameTxt).bind("keyup", SignUp.OrganisationNameKeyUp);
            $(companyNameTxt).bind("change", SignUp.OrganisationNameKeyUp);
            $(companyNameTxt).bind("blur", SignUp.OrganisationNameBlur);

            $(siteAddressTxt).bind("keyup", SignUp.SiteAddressKeyUp);
        }

        var helpIcons = $(".helpIcon");
        for (i = 0, ii = helpIcons.length; i < ii; i++)
        {
            $(helpIcons[i]).bind("mouseover", {action: 1}, SignUp.ToggleHelpPopup);
            $(helpIcons[i]).bind("mouseout", {action: 2}, SignUp.ToggleHelpPopup);
        }
    },

    companyNameTimeoutHolder: '',
    OrganisationNameKeyUp: function()
    {
        var companyNameTxt = $(".companyNameTxt")[0];
        if (! $(companyNameTxt).hasClass("companyNameFinished"))
        {
            var siteAddressTxt = $(".siteAddressTxt")[0];

            var newValue = SignUp.ParseSubDomain($(companyNameTxt).val());
//            if ($(siteAddressTxt).val() == "")
//            {
                $(siteAddressTxt).val(newValue);

                clearTimeout(SignUp.companyNameTimeoutHolder);
                SignUp.companyNameTimeoutHolder = setTimeout("SignUp.CheckDomainAvailability('" + newValue + "')", 500);
            //}
        }
        else 
        {
            //clearTimeout(SignUp.companyNameTimeoutHolder);
        }
    },

    SiteAddressKeyUp: function () 
    {
//        var companyNameTxt = $(".companyNameTxt")[0];
//        if (! $(companyNameTxt).hasClass("companyNameFinished"))
//        {
            var siteAddressTxt = $(".siteAddressTxt")[0];

            var newValue = SignUp.ParseSubDomain($(siteAddressTxt).val());
            $(siteAddressTxt).val(newValue);
            
            //SignUp.CheckDomainAvailability("'" + newValue + ""');
            SignUp.OrganisationNameBlur();

            clearTimeout(SignUp.companyNameTimeoutHolder);
            SignUp.companyNameTimeoutHolder = setTimeout("SignUp.CheckDomainAvailability('" + newValue + "')", 800);
//        }
    },

    OrganisationNameBlur: function () 
    {
        var companyNameTxt = $(".companyNameTxt")[0];    
        if (! $(companyNameTxt).hasClass("companyNameFinished"))
        {
            $(companyNameTxt).addClass("companyNameFinished");
        }
    },

    CheckDomainAvailability: function(newValue)
    {
        $.ajax(
        { type: 'POST'
                , url: '/CheckDomain.asmx/CheckDomain'
                , contentType: 'application/json; charset=utf-8'
                , data: '{"SiteAddress":"' + newValue + '"}'
                , dataType: 'json'
                , success: function (data) {

                    //Domain OK to be used
                    var status = data.d;

                    var SiteAddressCheck = $(".SiteAddressCheck")[0];
                    SiteAddressCheck.style.display = "block";

                    switch (status) {
                        case "1":
                            //Domain OK to be used
                            SiteAddressCheck.innerHTML = "This URL is available";
                            $(SiteAddressCheck).addClass("available");
                            break;
                        case "2":
                            //Domain pending
                            SiteAddressCheck.innerHTML = "This URL is not available";
                            $(SiteAddressCheck).removeClass("available");
                            break;
                        case "3":
                            //Domain not available
                            SiteAddressCheck.innerHTML = "This URL is not available";
                            $(SiteAddressCheck).removeClass("available");
                            break;
                    }


                }
                , error: function (XMLHttpRequest, textStatus, errorThrown) {
                    //There was an error
                }
        });
    },

    ParseSubDomain: function (s)
    {
        //Build string
        var result = "";

        //Only allow AlphaNumeric and Hyphon (no consecutive hyphons)
        var isHyphon = false;
        for (i = 0; i < s.length; i++) 
        {
            var d = s.charCodeAt(i);
            if ((d > 47 && d < 58) || (d > 64 && d < 91) || (d > 96 && d < 123)) 
            {
                isHyphon = false;
                result += s[i];
            }
            else if (d == 45) 
            {
                if (!isHyphon)
                    result += s[i];
                isHyphon = true;
            }
        }

        //Remove leading hyphons
        while (result[0] == "-")
            result = result.substr(1);
        //Remove trailing hyphons
        while (result[result.length - 1] == "-")
            result = result.substr(0, result.length - 1);
        //Ensure is maximum of 63 chars
        if (result.length > 63)
            return result.substr(0, 63);

        return result;
    },

    timeoutHolder: '',
    ToggleHelpPopup: function(event)
    {
        timeoutHolder = clearTimeout(SignUp.timeoutHolder);

        var helpIcon = this;
        var siblingHolder = helpIcon.nextSibling;
        
        while (siblingHolder.nodeType != 1)
        {
            siblingHolder = siblingHolder.nextSibling;
        }

        var helpPopup = siblingHolder;

        if (event.data.action == 1)
        {
            SignUp.timeoutHolder = setTimeout(function(){$(helpPopup).addClass("show")}, 500);
        }
        else
        {
            SignUp.timeoutHolder = setTimeout(function () { $(helpPopup).removeClass("show") }, 500);
        }
        
    }
}

SignUp.init();
