//<![CDATA[
/*This function is borrowed from the RSV isValidEmail method.*/
function isValidEmail(str) {
    var str2 = str.replace(/^\s*/, "");
    var s = str2.replace(/\s*$/, "");

    var at = "@";
    var dot = ".";
    var lat = s.indexOf(at);
    var lstr = s.length;
    var ldot = s.indexOf(dot);

    if (s.indexOf(at)==-1 ||
       (s.indexOf(at)==-1 || s.indexOf(at)==0 || s.indexOf(at)==lstr) ||
       (s.indexOf(dot)==-1 || s.indexOf(dot)==0 || s.indexOf(dot)==lstr) ||
       (s.indexOf(at,(lat+1))!=-1) ||
       (s.substring(lat-1,lat)==dot || s.substring(lat+1,lat+2)==dot) ||
       (s.indexOf(dot,(lat+2))==-1) ||
       (s.indexOf(" ")!=-1))
    {
      return false;
    }

    return true;
}

function format_number(pnumber,decimals){
	if (isNaN(pnumber)) { return 0};
	if (pnumber=='') { return 0};
	
	var snum = new String(pnumber);
	var sec = snum.split('.');
	var whole = parseFloat(sec[0]);
	var result = '';
	
	if(sec.length > 1){
		var dec = new String(sec[1]);
		dec = String(parseFloat(sec[1])/Math.pow(10,(dec.length - decimals)));
		dec = String(whole + Math.round(parseFloat(dec))/Math.pow(10,decimals));
		var dot = dec.indexOf('.');
		if(dot == -1){
			dec += '.'; 
			dot = dec.indexOf('.');
		}
		while(dec.length <= dot + decimals) { dec += '0'; }
		result = dec;
	} else{
		var dot;
		var dec = new String(whole);
		dec += '.';
		dot = dec.indexOf('.');		
		while(dec.length <= dot + decimals) { dec += '0'; }
		result = dec;
	}	
	return result;
}

function verifyLoginID(p_LoginID) {
    var m_strTargetURL = './httprequest/isuniqueloginid.asp';
    var m_RetVal;
        
    new Ajax.Request(m_strTargetURL, {
        method: 'post'
        , asynchronous: false
        , parameters: {servicename: $('servicename').value, login: p_LoginID}
        , onSuccess: function(transport) {
            m_RetVal = transport.responseText.toLowerCase();
        }
        , onFailure: function() {
            m_RetVal = 'false';
        }
    });
    
    if (m_RetVal=='true') {
        return true;
    } else {
        return false;
    }
}
                
function isUniqueLoginID() {
    if ($('email').value.length>0 && isValidEmail($('email').value)) {
        var m_isUniqueLoginID = verifyLoginID($('email').value);
        var m_MessageTemplate = 'We have found an existing [service_desc] account already associated to the email address you provide. Since we use the email address as the User login, please provide a different email address for this new purchase. Or you may <a href="mailto:customer.service@naxos.com?subject=Subscription%20Issues">contact us</a> for assistance.';
        var m_ServiceDesc = '';
        
        if (!m_isUniqueLoginID) {
            switch($('servicename').value) {
                case 'nml': m_ServiceDesc = 'Naxos Music Library'; break;
                case 'nmlj': m_ServiceDesc = 'Naxos Music Library / Jazz'; break;
                case 'nswl': m_ServiceDesc = 'Naxos Spoken Word Library'; break;
                case 'nwr': m_ServiceDesc = 'Naxos Radio'; break;
                case 'nxs': m_ServiceDesc = 'Naxos'; break;
            }
            
            m_MessageTemplate = m_MessageTemplate.replace(/\[service_desc\]/g,m_ServiceDesc);
            return [[$('email'), m_MessageTemplate]];
        } else {
            return true;
        }
    } else {
        return true;
    }
}

function isPaidPlanAgreedToAutoCharge() {
    var m_strServiceName = $('servicename').value;
    var m_blnCheckAutoChargeValue;
    
    if (m_strServiceName.toLowerCase()=='nxs') {
        if (!$('product-0-0').checked) {
            m_blnCheckAutoChargeValue = true;
        } else {
            m_blnCheckAutoChargeValue = false;
        }
    } else {
        m_blnCheckAutoChargeValue = true;
    }
    
    if (m_blnCheckAutoChargeValue) {
        if (!$('agreeToAutoCharge').checked) {
            return [[$('agreeToAutoCharge'), 'You must agree that your credit card will be automatically charged when your subscription is renewed.']];
        } else {
            return true;
        }
    } else {
        return true;
    }
}

function setValidationRoutine() {
    var validationRules = [
        "required,title,Please select your title."
        , "required,firstName,Please enter your first name."
        , "required,lastName,Please enter your last name."
        , "required,email,Please enter your email address."
        , "valid_email,email,Please enter a valid email address."
        , "function,isUniqueLoginID"
        , "same_as,emailVerify,email,Retyped email does not matched previously typed email."
        , "length=8-15,pwd,The password must be 8-15 alphanumeric characters."
        , "is_alpha,pwd,Password must be alphanumeric characters only."
        , "same_as,pwdVerify,pwd,Retyped password does not matched previously typed password."
        , "required,countryResidence,Please select your country of residence."
        , "required,product,Please select a plan subscription."
        , "required,agreeToTOA,You must agree to this subscription terms of agreement."
        , "function,isPaidPlanAgreedToAutoCharge"
    ];
    
    new RSV({
        formID: "frmInfo"
        , displayType: "display-html"
        , errorFieldClass: "hasError"
        , errorHTMLItemBullet: "&#187;&#160;"
        , onCompleteHandler: function() {
            $('rsvErrors').setStyle({display:'none'});
        }
        , rules: validationRules
    });
}

function setSubmitButtonEvent() {
    var s = $('submitter');
    s.setStyle({display:'block'});
    s.observe('mouseover', function() {
        this.setStyle({backgroundPosition:'bottom'});
    });
    s.observe('mouseout', function() {
        this.setStyle({backgroundPosition:'top'});
    });
}

function setGetDetailsEvent() {
    var a = $('a_getdetails'); var d = $('div_getdetails');  var b = $('btn_getdetails');
    
    a.observe('click', function() {
        d.setStyle({display:'block'});
    });
    
    b.observe('click', function() {
        var m_loginid = $('gd_loginid').value; 
        var m_password = $('gd_password').value;
        
        getExistingLoginIDDetails(m_loginid,m_password);
    });
}

function getExistingLoginIDDetails(p_LoginID, p_Password) {
    var m_Response, m_intIndex;
    var m_strTargetURL = './httprequest/getloginiddetails.asp';
    var m_oI = $('gd_processingindicator');
    var m_jsonSubscriptionDetails = {};
    var m_strServiceName = $('servicename').value;
    
    if (m_strServiceName.toLowerCase()=='nxs') {
        //if the service is Naxos, make the servicename blank in order for the getExistingLoginIDDetails get the info from the NML subscription tables.
        m_strServiceName = '';
    }
    
    if (p_LoginID.length>0) {
        if (isValidEmail(p_LoginID)) {
            m_oI.setStyle({display:'inline'});
            
            new Ajax.Request(m_strTargetURL, {
                method: 'post'
                , asynchronous: false
                , parameters: {ctype:'json', uid:p_LoginID, pwd:p_Password, servicename:m_strServiceName}
                , onSuccess: function(transport) {
                    m_Response = transport.responseText;
                    if (m_Response.isJSON()) {
                        m_jsonSubscriptionDetails = m_Response.evalJSON(true).Details;
                    }
                    
                    if (m_jsonSubscriptionDetails.length) {
                        var m_oS = m_jsonSubscriptionDetails[0];
                        
                        var m_oTitle = $('title');
                        var m_oFirstName = $('firstName');
                        var m_oLastName = $('lastName');
                        var m_oEmail = $('email');
                        var m_oEmailVerify = $('emailVerify');
                        var m_oPwd = $('pwd');
                        var m_oPwdVerify = $('pwdVerify');
                        var m_oCountryResidence = $('countryResidence');
                        
                        var m_intIndex;
                        
                        /* Remove the error highlights, if any. */
                        m_oTitle.removeClassName('hasError');
                        m_oFirstName.removeClassName('hasError');
                        m_oLastName.removeClassName('hasError');
                        m_oEmail.removeClassName('hasError');
                        m_oEmailVerify.removeClassName('hasError');
                        m_oPwd.removeClassName('hasError');
                        m_oPwdVerify.removeClassName('hasError');
                        m_oCountryResidence.removeClassName('hasError');
                        
                        $('rsvErrors').innerHTML = '';
                        $('rsvErrors').setStyle({display:'none'});
                        /****************************************/
                           
                        m_oFirstName.value = m_oS.firstname;
                        m_oLastName.value = m_oS.lastname;
                        m_oEmail.value = m_oS.email;
                        m_oEmailVerify.value = m_oS.email;
                        m_oPwd.value = m_oS.password;
                        m_oPwdVerify.value = m_oS.password;
                        
                        for (m_intIndex=0; m_intIndex<m_oTitle.length; m_intIndex++) {
                            if (m_oTitle.options[m_intIndex].value==m_oS.title) {
                                m_oTitle.options[m_intIndex].selected = true;
                                break;
                            }
                        }
                        
                        for (m_intIndex=0; m_intIndex<m_oCountryResidence.length; m_intIndex++) {
                            if (m_oCountryResidence.options[m_intIndex].value==m_oS.a3countrycode) {
                                m_oCountryResidence.options[m_intIndex].selected = true;
                                
                                var m_SelectedValueCurrency = g_arrCountryByID[m_oS.a3countrycode].defcurrency;
                                
                                updateProductAttributes(g_prevSelectedCurrency,m_SelectedValueCurrency);
                                g_prevSelectedCurrency = m_SelectedValueCurrency;
                                break;
                            }
                        }
                        
                        //hide the "get details" form and clear the input values.
                        $('div_getdetails').setStyle({display:'none'});
                        $('gd_loginid').value = ''; 
                        $('gd_password').value = '';
                    } else {
                        alert('Invalid Login ID and password.');
                    }
                    
                    m_oI.setStyle({display:'none'});
                }
                , onFailure: function() {
                    m_oI.setStyle({display:'none'});
                    alert('Failed to retrieve details!');
                }
            });
        }
    }
}

function setCountryResidenceEvent() {
    var c = $('countryResidence');
    g_prevSelectedCurrency = 'USD';
    
    c.observe('change', function() {
        var m_SelectedValue = this.options[this.selectedIndex].value;
        var m_SelectedValueCurrency = g_arrCountryByID[m_SelectedValue].defcurrency;
        
        updateProductAttributes(g_prevSelectedCurrency,m_SelectedValueCurrency);
        g_prevSelectedCurrency = m_SelectedValueCurrency;
    });
}

function updateProductAttributes(p_PreviousCurrency,p_NewCurrency) {
    var m_Response, m_Index;
    var m_strTargetURL = './httprequest/getproductlist.asp';
    
    if (p_PreviousCurrency!=p_NewCurrency) {
        g_jsonProductList = "";
        
        new Ajax.Request(m_strTargetURL, {
            method: 'post'
            , asynchronous: false
            , parameters: {ctype:'json', servicename:$('servicename').value, currency:p_NewCurrency}
            , onSuccess: function(transport) {
                m_Response = transport.responseText;
                if (m_Response.isJSON()) {
                    g_jsonProductList = m_Response.evalJSON(true).Product;
                }
            }
        });
        
        if (g_jsonProductList.length) {
            var m_CurrencyElement, m_PriceElement, m_ProductElement;
            var P = g_jsonProductList;
             
            for (m_Index=0; P.length>m_Index; m_Index+=1) {
                m_CurrencyElement = 'currencyname-' + P[m_Index].nmlproductid + '-' + P[m_Index].durationid; 
                m_PriceElement = 'price-' + P[m_Index].nmlproductid + '-' + P[m_Index].durationid; 
                m_ProductElement = 'product-' + P[m_Index].nmlproductid + '-' + P[m_Index].durationid;
                
                $(m_CurrencyElement).innerHTML = P[m_Index].currency;
                $(m_PriceElement).innerHTML = format_number(P[m_Index].price,2);
                $(m_ProductElement).value = P[m_Index].radiopackageid;
            }
            
        }
    }
}

function initJSONVariables() {
    var m_Response, m_Index;
    var m_strTargetURL = './httprequest/getcountrylist.asp';
    
    new Ajax.Request(m_strTargetURL, {
        method: 'post'
        , parameters: {ctype:'json'}
        , onSuccess: function(transport) {
            m_Response = transport.responseText;
            if (m_Response.isJSON()) {
                g_jsonCountryList = m_Response.evalJSON(true).Country;
                for (m_Index=0; g_jsonCountryList.length>m_Index; m_Index+=1) {
                    g_arrCountryByID[g_jsonCountryList[m_Index].a3code] = g_jsonCountryList[m_Index];
                }
            }
        }
    });
}

var g_jsonCountryList; var g_arrCountryByID = {};
var g_jsonProductList;
var g_prevSelectedCurrency;

document.observe("dom:loaded", function() {
    initJSONVariables();
    setSubmitButtonEvent();
    setGetDetailsEvent();
    setCountryResidenceEvent();
    setValidationRoutine();
});
//]]>
