function GetXmlHttpObject()
{
    var xmlHttp=null;

    try
    {
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch(e)
            {
                alert("Your browser does not support AJAX!");
            }
        }
    }

    return xmlHttp;
}

function set_values(xml_attribute,tag_name)
{
    var return_value = new Object();
    var xmldoc = xml_attribute.responseXML;
    var root = xmldoc.getElementsByTagName(tag_name).item(0);
    var index = 0;

    for( i=0; i<root.childNodes.length; i++ )
    {
         var node = root.childNodes.item(i);

         if( node.childNodes.length > 0 )
         {
             for( j=0; j < node.childNodes.length; j++ )
             {
                // Reading values inside tags (ie <aaaa>value</aaa>)
                var childNode = node.childNodes.item(j);

                return_value[childNode.parentNode.nodeName] = childNode.data;
             }
         }
         else
         if( node.attributes.length > 0 )
         {
            if( !return_value[node.nodeName] )
            {
                return_value[node.nodeName] = new Object();
            }

            var temp_arr = new Object();

            for( j=0; j < node.attributes.length; j++ )
            {
                // Reading attribute's values (ie <aaa id='xxxx' value='xxx'>)
                var attribute = node.attributes[j];
                temp_arr[attribute.nodeName] =attribute.nodeValue;
            }

            return_value[node.nodeName][index] = temp_arr;

            index++;
         }
    }
    return return_value;
}

function postal_address_5_changed()
{
    if( xGetElementById('postal-address-5').value == 'New Zealand' )
    {
        xGetElementById('timezone').value = 'New Zealand';
        xGetElementById('currency').value = 'NZD';
    }
    else
    {
        xGetElementById('timezone').value = '0';
        xGetElementById('currency').value = '';
    }

    xGetElementById('credit-card-extra').style.display = 'none';
    xGetElementById('credit-card-td').style.display = 'none';
    
    show_payment_options();
}

function currency_changed()
{
    show_payment_options();
    calculate_monthly_fee();
}

function show_payment_options()
{
    if( xGetElementById('postal-address-5').value == 'New Zealand' && xGetElementById('currency').value == 'NZD' )
    {
        innerHTML = "<select id='payment-type' onchange='javascript:payment_type_changed();' class='input-mandatory'>";
        innerHTML += "<option value=''>Please Select...</option>";
        innerHTML += "<option value='DirectDebit'>Direct Debit - Monthly account</option>";
        innerHTML += "<option value='CreditCard'>Credit Card - Monthly account</option>";
        innerHTML += "<option value='Prepay'>Prepay - Topup by Credit Card</option>";
        innerHTML += "</select>(*)";

        xGetElementById('payment-type').parentNode.innerHTML = innerHTML;
    }
    else
    {
        innerHTML = "<select id='payment-type' onchange='javascript:payment_type_changed();' class='input-mandatory'>";
        innerHTML += "<option value=''>Please Select...</option>";
        innerHTML += "<option value='CreditCard'>Credit Card - Monthly account</option>";
        innerHTML += "<option value='Prepay'>Prepay - Topup by Credit Card</option>";
        innerHTML += "</select>(*)";

        xGetElementById('payment-type').parentNode.innerHTML = innerHTML;
    }
}

function payment_type_changed()
{
    if( xGetElementById('payment-type').value == 'CreditCard' )
    {
        xGetElementById('credit-card-extra').style.display = 'block';
        if( xGetElementById('cc-online').checked )
        {
            xGetElementById('credit-card-td').style.display = 'block';
        }
    }
    else
    {
        xGetElementById('credit-card-extra').style.display = 'none';
        xGetElementById('credit-card-td').style.display = 'none';
    }
    
    if( xGetElementById('payment-type').value == 'DirectDebit' )
    {
        xGetElementById('directdebit-extra').style.display = 'block';
    }
    else
    {
        xGetElementById('directdebit-extra').style.display = 'none';
    }
    
    calculate_monthly_fee();
}

function display_cc_details()
{
    if( xGetElementById('cc-online').checked )
    {
        xGetElementById('credit-card-td').style.display = 'block';
    }
    else
    {
        xGetElementById('credit-card-td').style.display = 'none';
    }
}

function display_individual_plan_list()
{
    xGetElementById('individual-plan-list').style.display = (xGetElementById('individual-plan').checked) ? 'block' : 'none';
    calculate_monthly_fee();
}

function calculate_monthly_fee()
{
    var monthly_fee = 0.00;
    
    if( xGetElementById('payment-type').value == 'CreditCard' )
    {
        monthly_fee += 2.50;
    }
    
    if( xGetElementById('individual-plan').checked )
    {
        if( xGetElementById('tfone-number-service').checked )
        {
            monthly_fee += 15.00;
        }
        if( xGetElementById('tfone-multiline-service').checked )
        {
            monthly_fee += 15.00;
        }
        if( xGetElementById('tfaxin-service').checked )
        {
            monthly_fee += 10.00;
        }
        if( xGetElementById('tfaxout-service').checked )
        {
            monthly_fee += 5.00;
        }
        if( xGetElementById('tsmsin-service').checked )
        {
            monthly_fee += 40.00;
        }
        if( xGetElementById('tfaxout-service').checked == false && xGetElementById('tsmsout-service').checked )
        {
            monthly_fee += 5.00;
        }
        if( xGetElementById('monitoring-service').checked )
        {
            monthly_fee += 10.00;
        }
        if( xGetElementById('click2call-service').checked )
        {
            monthly_fee += 50.00;
        }
        if( xGetElementById('webchat-service').checked )
        {
            monthly_fee += 30.00;
        }
        if( xGetElementById('linkanumber-service').checked )
        {
            monthly_fee += 10.00;
        }
        if( xGetElementById('numberport-service').checked )
        {
            monthly_fee += 10.00;
        }
        if( xGetElementById('toll-service').checked )
        {
            monthly_fee += 0.00;
        }
        if( xGetElementById('other-service').checked )
        {
            monthly_fee += 0.00;
        }
    }
    if( xGetElementById('tnzstarter-plan').checked )
    {
        monthly_fee = 15.00;
    }
    if( xGetElementById('tnzbasic-plan').checked )
    {
        monthly_fee = 50.00;
    }
    if( xGetElementById('tnzadvanced-plan').checked )
    {
        monthly_fee = 100.00;
    }
    if( xGetElementById('tnzprofessional-plan').checked )
    {
        monthly_fee = 500.00;
    }
    if( xGetElementById('tnzultimate-plan').checked )
    {
        monthly_fee = 1000.00;
    }
    
    xGetElementById('minimum-monthly-fee').innerHTML = "<b>"+xGetElementById('currency').value+" "+number_format(monthly_fee,2)+" + GST</b>";
}

function select_service(service)
{
    var service_type = "individual";
    
    switch( service )
    {
        case "TFoneNumber":
            xGetElementById('tfone-number-service').checked = true;
            break;
        case "TFoneMultiLine":
            xGetElementById('tfone-multiline-service').checked = true;
            break;
        case "TFaxServices":
            xGetElementById('tfaxin-service').checked = true;
            xGetElementById('tfaxout-service').checked = true;
            break;
        case "TFaxIn":
            xGetElementById('tfaxin-service').checked = true;
            break;
        case "TFaxOut":
            xGetElementById('tfaxout-service').checked = true;
            break;
        case "TSMSServices":
            xGetElementById('tsmsin-service').checked = true;
            xGetElementById('tsmsout-service').checked = true;
            break;
        case "TSMSIn":
            xGetElementById('tsmsin-service').checked = true;
            break;
        case "TSMSOut":
            xGetElementById('tsmsout-service').checked = true;
            break;
        case "Monitoring":
            xGetElementById('monitoring-service').checked = true;
            break;
        case "Click2Call":
            xGetElementById('click2call-service').checked = true;
            break;
        case "WebChat":
            xGetElementById('webchat-service').checked = true;
            break;
        case "LinkANumber":
            xGetElementById('linkanumber-service').checked = true;
            break;
        case "NumberPortability":
            xGetElementById('numberport-service').checked = true;
            break;
        case "TollServices":
            xGetElementById('toll-service').checked = true;
            break;
        case "TNZStarter":
            service_type = "plan";
            xGetElementById('tnzstarter-plan').checked = true;
            break;
        case "TNZBasic":
            service_type = "plan";
            xGetElementById('tnzbasic-plan').checked = true;
            break;
        case "TNZAdvanced":
            service_type = "plan";
            xGetElementById('tnzadvanced-plan').checked = true;
            break;
        case "TNZProfessional":
            service_type = "plan";
            xGetElementById('tnzprofessional-plan').checked = true;
            break;
        case "TNZUltimate":
            service_type = "plan";
            xGetElementById('tnzultimate-plan').checked = true;
            break;
    }
    
    if( service_type == "individual" )
    {
        xGetElementById('individual-plan').checked = true;
        display_individual_plan_list();
    }
    
    calculate_monthly_fee();
}

function check_subscription_details()
{
    var elems = xGetElementsByClassName('input-missed');
    
    for( var prop in elems )
    {
        elems[prop].className = 'input-mandatory';
    }

    if( xGetElementById('company-name').value == "" )
    {
        alert("Please enter name/company name");
        xGetElementById('company-name').className = 'input-missed';
        xGetElementById('company-name').focus();
        return false;
    }
    if( xGetElementById('contact-person').value == "" )
    {
        alert("Please enter contact person");
        xGetElementById('contact-person').className = 'input-missed';
        xGetElementById('contact-person').focus();
        return false;
    }
    if( xGetElementById('company-phone').value == "" )
    {
        alert("Please enter phone number");
        xGetElementById('company-phone').className = 'input-missed';
        xGetElementById('company-phone').focus();
        return false;
    }
    if( xGetElementById('company-email').value == "" )
    {
        alert("Please enter billing email address");
        xGetElementById('company-email').className = 'input-missed';
        xGetElementById('company-email').focus();
        return false;
    }
    if( !isEmail(xGetElementById('company-email').value) )
    {
        alert("Invalid email address format!");
        xGetElementById('company-email').className = 'input-missed';
        xGetElementById('company-email').focus();
        return false;
    }
    if( xGetElementById('company-email-confirm').value == "" )
    {
        alert("Please enter confirmation of billing email address");
        xGetElementById('company-email-confirm').className = 'input-missed';
        xGetElementById('company-email-confirm').focus();
        return false;
    }
    if( !isEmail(xGetElementById('company-email-confirm').value) )
    {
        alert("Invalid email address format!");
        xGetElementById('company-email-confirm').className = 'input-missed';
        xGetElementByid('company-email-confirm').focus();
        return false;
    }
    if( xGetElementById('company-email').value != xGetElementById('company-email-confirm').value )
    {
        alert("Billing email address and confirm billing address do not match!");
        xGetElementById('company-email').className = 'input-missed';
        xGetElementById('company-email-confirm').className = 'input-missed';
        xGetElementById('company-email').focus();
        return false;
    }
    if( xGetElementById('postal-address-1').value == "" )
    {
        alert("Please enter postal address");
        xGetElementById('postal-address-1').className = 'input-missed';
        xGetElementById('postal-address-1').focus();
        return false;
    }
    if( xGetElementById('postal-address-5').value == "" )
    {
        alert("Please select country");
        xGetElementById('postal-address-5').className = 'input-missed';
        xGetElementById('postal-address-5').focus();
        return false;
    }
    if( xGetElementById('timezone').value == "" )
    {
        alert("Please select your time zone");
        xGetElementById('timezone').className = 'input-missed';
        xGetElementById('timezone').focus();
        return false;
    }
    if( xGetElementById('currency').value == "" )
    {
        alert("Please select billing currency");
        xGetElementById('currency').className = 'input-missed';
        xGetElementByid('currency').focus();
        return false;
    }
    if( xGetElementById('payment-type').value == "" )
    {
        alert("Please select payment type");
        xGetElementById('payment-type').className = 'input-missed';
        xGetElementById('payment-type').focus();
        return false;
    }
    if( xGetElementById('individual-plan').checked == false && xGetElementById('tnzstarter-plan').checked == false && 
        xGetElementById('tnzbasic-plan').checked == false && xGetElementById('tnzadvanced-plan').checked == false && 
        xGetElementById('tnzprofessional-plan').checked == false && xGetElementById('tnzultimate-plan').checked == false )
    {
        alert("Please select a plan");
        return false;
    }
    if( xGetElementById('individual-plan').checked )
    {
        if( xGetElementById('tfone-number-service').checked == false && xGetElementById('tfone-multiline-service').checked == false &&
            xGetElementById('tfaxin-service').checked == false && xGetElementById('tfaxout-service').checked == false &&
            xGetElementById('tsmsin-service').checked == false && xGetElementById('tsmsout-service').checked == false &&
            xGetElementById('monitoring-service').checked == false && xGetElementById('click2call-service').checked == false &&
            xGetElementById('webchat-service').checked == false && xGetElementById('linkanumber-service').checked == false &&
            xGetElementById('numberport-service').checked == false && xGetElementById('toll-service').checked == false &&
            xGetElementById('other-service').checked == false )
        {
            alert("Please select at least 1 service");
            return false;
        }
        if( xGetElementById('toll-service').checked && xGetElementById('payment-type').value != 'DirectDebit' )
        {
            alert("Sorry, you can only select 'Direct Debit - Monthly Account' for your payment method with any toll service(s).");
            xGetElementById('payment-type').className = 'input-missed';
            xGetElementById('payment-type').focus();
            return;
        }
    }
    return true;
}

function signup()
{
    var passed = check_subscription_details();

    if( passed == true )
    {
        xmlHttp=GetXmlHttpObject();
        if (xmlHttp==null)
        {
          alert ("Your browser does not support AJAX!");
          return;
        }

        url = xGetElementById('server-path').value + "/include/xml/subscription-functions.php";

        post_variables = "function=createAccount";
        post_variables += "&company-name="+escape(xGetElementById('company-name').value);
        post_variables += "&selected-service="+xGetElementById('selected-service').value;
        post_variables += "&contact-person="+escape(xGetElementById('contact-person').value);
        post_variables += "&company-phone="+xGetElementById('company-phone').value;
        post_variables += "&company-mobile="+xGetElementById('company-mobile').value;
        post_variables += "&company-fax="+xGetElementById('company-fax').value;
        post_variables += "&company-email="+xGetElementById('company-email').value;
        post_variables += "&postal-address-1="+xGetElementById('postal-address-1').value;
        post_variables += "&postal-address-2="+xGetElementById('postal-address-2').value;
        post_variables += "&postal-address-3="+xGetElementById('postal-address-3').value;
        post_variables += "&postal-address-4="+xGetElementById('postal-address-4').value;
        post_variables += "&postal-address-5="+xGetElementById('postal-address-5').value;
        post_variables += "&physical-address-1="+xGetElementById('physical-address-1').value;
        post_variables += "&physical-address-2="+xGetElementById('physical-address-2').value;
        post_variables += "&physical-address-3="+xGetElementById('physical-address-3').value;
        post_variables += "&physical-address-4="+xGetElementById('physical-address-4').value;
        post_variables += "&physical-address-5="+xGetElementById('physical-address-5').value;
        post_variables += "&timezone="+xGetElementById('timezone').value;
        post_variables += "&payment-type="+xGetElementById('payment-type').value;
        post_variables += "&cc-tel="+xGetElementById('cc-tel').checked;
        post_variables += "&cc-fax="+xGetElementById('cc-fax').checked;
        post_variables += "&cc-online="+xGetElementById('cc-online').checked;
        post_variables += "&credit-card-type="+xGetElementById('credit-card-type').value;
        post_variables += "&credit-card-number="+xGetElementById('credit-card-number').value;
        post_variables += "&credit-card-csc="+xGetElementById('credit-card-csc').value;
        post_variables += "&credit-card-expire-month="+xGetElementById('credit-card-expire-month').value;
        post_variables += "&credit-card-expire-year="+xGetElementById('credit-card-expire-year').value;
        post_variables += "&credit-card-name="+xGetElementById('credit-card-name').value;
        post_variables += "&currency="+xGetElementById('currency').value;
        
        if( xGetElementById('individual-plan').checked )
        {
            post_variables += "&individual-plan=true";
            
            if( xGetElementById('tfone-number-service').checked )
            {
                post_variables += "&tfone-number-service=true";
            }
            if( xGetElementById('tfone-multiline-service').checked )
            {
                post_variables += "&tfone-multiline-service=true";
            }
            if( xGetElementById('tfaxin-service').checked )
            {
                post_variables += "&tfaxin-service=true";
            }
            if( xGetElementById('tfaxout-service').checked )
            {
                post_variables += "&tfaxout-service=true";
            }
            if( xGetElementById('tsmsin-service').checked )
            {
                post_variables += "&tsmsin-service=true";
            }
            if( xGetElementById('tsmsout-service').checked )
            {
                post_variables += "&tsmsout-service=true";
            }
            if( xGetElementById('monitoring-service').checked )
            {
                post_variables += "&monitoring-service=true";
            }
            if( xGetElementById('click2call-service').checked )
            {
                post_variables += "&click2call-service=true";
            }
            if( xGetElementById('webchat-service').checked )
            {
                post_variables += "&webchat-service=true";
            }
            if( xGetElementById('linkanumber-service').checked )
            {
                post_variables += "&linkanumber-service=true";
            }
            if( xGetElementById('numberport-service').checked )
            {
                post_variables += "&numberport-service=true";
            }
            if( xGetElementById('toll-service').checked )
            {
                post_variables += "&toll-service=true";
            }
            if( xGetElementById('other-service').checked )
            {
                post_variables += "&other-service=true";
            }
        }
        if( xGetElementById('tnzstarter-plan').checked )
        {
            post_variables += "&tnzstarter-plan=true";
        }
        if( xGetElementById('tnzbasic-plan').checked )
        {
            post_variables += "&tnzbasic-plan=true";
        }
        if( xGetElementById('tnzadvanced-plan').checked )
        {
            post_variables += "&tnzadvanced-plan=true";
        }
        if( xGetElementById('tnzprofessional-plan').checked )
        {
            post_variables += "&tnzprofessional-plan=true";
        }
        if( xGetElementById('tnzultimate-plan').checked )
        {
            post_variables += "&tnzultimate-plan=true";
        }
        
        post_variables += "&receive-terms-and-conditions="+xGetElementById('receive-terms-and-conditions').checked;
        post_variables += "&notes="+escape(xGetElementById('notes').value);

        xGetElementById('button-signup').disabled = true;
        xGetElementById('button-signup').value = 'Processing...';
       
        xmlHttp.open("POST",url,true);
        xmlHttp.onreadystatechange=xml_subscription;
        xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xmlHttp.send(post_variables);
    }
}

function xml_subscription()
{
    if (xmlHttp.readyState==4)
    {
        //alert(xmlHttp.responseText);
        xmlResult = set_values(xmlHttp,'root');

        if( xmlResult['ErrorMessage'] )
        {
            alert(xmlResult['ErrorMessage']);

            xGetElementById('button-signup').disabled = false;
            xGetElementById('button-signup').value = 'Sign Up';
        }
        else
        {
            alert(xmlResult['Message']);
            window.location.href = xGetElementById('server-path').value;
        }
    }
}

function validate_signup()
{
    if( xGetElementById('authorise-signup').checked && xGetElementById('seen-terms-and-conditions').checked )
    {
        xGetElementById('button-signup').disabled = false;
    }
    else
    {
        xGetElementById('button-signup').disabled = true;
    }
}