var g_obj_id_country_us = 10277;
var g_obj_id_country_canada = 10132;
var g_obj_id_industry_segment_other = 6902642;
var g_mform_id_country_selector = "mform_country_selector";
var g_mform_id_state_selector = "mform_state_selector";
var g_mform_id_primary_field_selector = "mform_primary_field_selector";
var g_mform_id_other_industry_selector = "mform_other_industry_selector";
var g_mform_id_not_current_visitor = "id_disp_not_current_visitor";
var g_mform_id_remember_me_block = "id_remember_me_block";
var g_mform_submitted = false;
var g_mform_url_notme = core_getContextPath() + "/servlet/notme";
var g_mform_customOpts = 0x00;
var g_mform_customOpts_hideRememberMe = 0x04;
var g_mform_customOpts_hideNotMe = 0x08;
var g_mform_defaultDeleteProfMsg = "If you click \"OK\" all profile information will be deleted.\nDo you want to continue?";


function mform_getForm() {
    return document.getElementById("form1");
}

function mform_onload() {
    if ( (g_mform_customOpts & g_mform_customOpts_hideRememberMe) > 0 ) {
        mform_hideRememberMe();
    }
    mform_updateCountryStates();
    mform_updatePrimaryFieldSelector();
}

function mform_loadDefaultValues( userInfo ) {

    function loadValue(fieldName, attribName, postOp) {
        var e = f[fieldName];
        var v = userInfo[attribName];
        if ( e != null && v != null ) {
            if ( e.type == "text" || e.type == "textarea" || e.type == "hidden" || e.type == "select-one" || e.type == "select-multiple" ) {
                e.value = v;
            } else if ( e.length > 0 && (e[0].type == "radio" || e[0].type == "checkbox") ) {
                for (var i=0; i<e.length; i++) {
                    if ( v == e[i].value ) {
                        e[i].checked = true;
                        if (e[0].type == "radio") break;
                    }
                }
            }
        }
        if ( postOp != null ) eval(postOp);
    }

    if ( userInfo == null ) {
        return;
    }
    var f = mform_getForm();
    if ( f == null ) return;
    var dataFields = new Array(
         ["prefix_id", "prefixId"]
        ,["firstname", "firstName"]
        ,["lastname", "lastName"]
        ,["title", "title"]
        ,["company", "company"]
        ,["addr1", "address1"]
        ,["addr2", "address2"]
        ,["city", "city"]
        ,["zip", "zip"]
        ,["country_id", "countryId", "mform_updateCountryStates();"]
        ,["state_id", "stateId"]    // state must be populated after country
        ,["phone", "phone"]
        ,["email", "email"]
        ,["verifyemail", "email"]
        ,["business_id", "businessId"]
        ,["primary_field_id", "primaryFieldId", "mform_updatePrimaryFieldSelector();"]
        ,["primary_field_other", "marketId"]
        ,["email_updates", "emailUpdates"]
    );
    for (var i=0; i<dataFields.length; i++) {
        var postOp = null;
        if ( dataFields[i].length >= 3 ) postOp = dataFields[i][2];
        loadValue(dataFields[i][0], dataFields[i][1], postOp);
    }
    if ( ! core_isStringBlank( userInfo["full_name"] ) ) {
        if ( (g_mform_customOpts & g_mform_customOpts_hideNotMe) == 0 ) {
            mform_renderNotCurrentVisitor( userInfo["full_name"] );
        }
        if ( (g_mform_customOpts & g_mform_customOpts_hideRememberMe) == 0 ) {
            mform_hideRememberMe();
        }
    }
}

function mform_getSelectedCountryID(objCountry) {
    if ( objCountry == null ) {
        objCountry = document.getElementById(g_mform_id_country_selector);
    }
    if ( objCountry == null ) return null;
    if ( objCountry.selectedIndex == null || objCountry.selectedIndex < 0 ) return null;
    return ( objCountry.options[objCountry.selectedIndex].value );
}

function mform_updateCountryStates(objCountry) {
    if ( objCountry == null ) {
        objCountry = document.getElementById(g_mform_id_country_selector);
        if ( objCountry == null ) return;
    }
    var objStates = document.getElementById(g_mform_id_state_selector);
    if ( objStates == null ) return;
    if ( objCountry.selectedIndex == null || objCountry.selectedIndex < 0 ) {
    	mform_disableObject(objStates); 
    	return;
    }
    var countryID = objCountry.options[objCountry.selectedIndex].value;
    if ( countryID == null || countryID == "" ) {
    	mform_disableObject(objStates); 
    	return;
    }
    mform_updateStatesSelector(countryID, objStates);
}

function mform_updateStatesSelector(countryID, objStates) {
    objStates.options.length = 1;
    var csAry = mform_csAry;
    
    if ( csAry == null ) return;
    for (var i=0; i<csAry.length; i++) {  
        if ( countryID == csAry[i][0] ) {
            bHasStates = true;
            objStates.options[objStates.length] = new Option(csAry[i][1], csAry[i][2]);
        }
    }    
    if ( objStates.options.length > 1 ) {
        objStates.disabled = false;
    } else {
        objStates.disabled = true;
    }
}

function mform_getNumStatesInSelector() {
    var objStates = document.getElementById(g_mform_id_state_selector);
    if ( objStates == null || objStates.disabled ) return 0;
    return ( objStates.options.length - 1 );
}

function mform_updatePrimaryFieldSelector(objPrimary) { //primary_field
    if ( objPrimary == null ) {
        objPrimary = document.getElementById(g_mform_id_primary_field_selector);
        if ( objPrimary == null ) {
            return;
        }
    }
    var objOther = document.getElementById(g_mform_id_other_industry_selector);
    if ( objOther == null ) return;
    if ( objPrimary.selectedIndex == null
        || objPrimary.selectedIndex <= 0
        || objPrimary[objPrimary.selectedIndex].value != g_obj_id_industry_segment_other
    ) {
        objOther.selectedIndex = 0;
        mform_disableObject(objOther);
    } else {
        mform_enableObject(objOther);
    }
    return;
}

function mform_disableObjectById(objID) {
    mform_disableObject(document.getElementById(objID));
}

function mform_enableObjectById(objID) {
    mform_enableObject(document.getElementById(objID));
}

function mform_disableObject(obj) {
    if ( obj != null ) obj.disabled = true;
}

function mform_enableObject(obj) {
    if ( obj != null ) obj.disabled = false;
}

function mform_elementHasValue(e) {
    var val = mform_getElementValue(e);
    return ( val != null && val != "" );
}

function mform_getElementValue(e) {
    if ( e == null ) return null;
    var val = null;
    if ( e.type == "text" || e.type == "textarea" || e.type == "hidden" ) {
        val = e.value;
    } else if ( e.type == "select-one" ) {
        if ( e.selectedIndex >= 1 ) val = e[e.selectedIndex].value;
    } else if ( e.type == "select-multiple" ) { // return an array of selected values
        if ( e.selectedIndex >= 0 ) {
            val = new Array();
            for (var i=0; i<e.options.length; i++) {
                if ( e.options[i].selected ) val[val.length] = e.options[i].value;
            }
        }
    } else if ( e.length > 0 && e[0].type == "radio" ) {    // radio
        for (var k=0; k<e.length; k++) {
            if ( e[k].checked ) {
                val = e[k].value;
                break;
            }
        }
    } else if ( e.length > 0 && e[0].type == "checkbox" ) {    // checkbox
        val = new Array();
        for (var k=0; k<e.length; k++) {
            if ( e[k].checked ) {
                val[val.length] = e[k].value;
            }
        }
    } else if ( e.length > 0 ) {    // some arbitrary collection--just return the value of the first element
        val = e[0].value;
    }
    return (val);
}

function mform_submit() {
    if( g_mform_submitted ) {
        return false;
    }
    var f = mform_getForm();
    if ( f == null ) return;
    var errReqd = "";
    var errMisc = "";

    // g_mf_q: 0=id, 1=req'd, 2=type, 3=fieldName, 4=name, 5=maxlength
    for (var i=0; i<g_mf_q.length; i++) {
        var fieldName = g_mf_q[i][3];
        var fullName = g_mf_q[i][4];
        var e = f[fieldName];
        var maxLength = g_mf_q[i][5];
        var bMissing = false;
        // trim leading & trailing whitespace from text inputs
        mform_trimTextElements(e);
        if ( g_mf_q[i][1] == 1 ) {  // req'd
            // handle special fields first
            if ( fieldName == "primary_field_other" ) {
                bMissing = false;
                var ePF = f["primary_field_id"];
                if ( mform_getElementValue(ePF) == g_obj_id_industry_segment_other && ! mform_elementHasValue(e) ) bMissing = true;
            } else if ( fieldName == "zip" ) {  // zip is req'd only if country is g_obj_id_country_us or g_obj_id_country_canada
                bMissing = false;
                if ( ! mform_elementHasValue(e) ) {
                    var countryID = mform_getSelectedCountryID();
                    if ( ! core_isStringBlank(countryID) && (countryID == g_obj_id_country_us || countryID == g_obj_id_country_canada) ) bMissing = true;
                }
            } else if ( fieldName == "state_id" ) { // state req'd only if selected country contains associated states
                bMissing = false;
                if ( ! mform_elementHasValue(e) ) {
                    var countryID = mform_getSelectedCountryID();
                    if ( ! core_isStringBlank(countryID) && mform_getNumStatesInSelector() > 0 ) bMissing = true;
                }
            } else if ( ! mform_elementHasValue(e) ) {
                bMissing = true;
            }
            if ( bMissing ) errReqd += "\n     - " + fullName;
        }

        // max lengths
        if ( e.type == "text" || e.type == "textarea" ) {
            // limit value to maxLength - err msg if textarea, truncate if text
            if ( core_isInteger(maxLength) && maxLength > 0 && e.value.length > maxLength ) {
                if ( e.type == "textarea" ) {
                    var maxMsg = g_ExceededMaxLength.replace( /\{0-field_name\}/, fullName );
                    maxMsg = maxMsg.replace( /\{1-max_length\}/, maxLength );
                    errMisc += "\n" + maxMsg;
                } else {
                    e.value = e.value.substr(0,maxLength);
                }
            }
        }

        // validate email fields
        if ( ! bMissing && ( fieldName == "email" || fieldName == "verifyemail") ) {
            if ( ! core_isEmailAddressValid(e.value) ) errMisc += "\n" + g_InvalidEmail;
            if ( fieldName == "email" && f["verifyemail"] != null && (e.value != f["verifyemail"].value) ) {
                errMisc += "\n" + g_EmailsNoMatch;
            }
        }

        // validate zip
        if ( ! bMissing && fieldName == "zip" ) {
            var countryID = mform_getSelectedCountryID();
            if ( ! core_isStringBlank(countryID) && (countryID == g_obj_id_country_us || countryID == g_obj_id_country_canada) ) {
                // pass zip object to validation method
                if ( ! mform_isValidZip(countryID, e) )  errMisc += "\n" + g_InvalidZipCode
            }
        }

    }
    if ( errReqd == "" && errMisc == "" ) {
        g_mform_submitted = true;
        return true;
    }

    var errMsg = "__________________________________________________\n\n";
    errMsg += g_FormErrorsTitle + "\n";
    errMsg += "__________________________________________________\n\n";
    if ( errReqd != "" ) {
        errMsg += "\n\n" + g_RequiredErrors +"\n" + errReqd;
    }
    if ( errMisc != "" ) {
        errMsg += "\n\n" + errMisc;
    }

    alert(errMsg);
    return false;
}

function mform_trim(str) {
    if ( str == null ) return (null);
    return (core_trimString(str));
}

function mform_trimTextElements(obj) {  // trim element value if element type is text or textarea
    // obj may be a form element, or a collection of form elements
    if ( typeof(obj.length) != "undefined" && obj.length > 0 ) {
        for (var i=0; i<obj.length; i++) {
            if ( "text" == obj[i].type || "textarea" == obj[i].type ) obj[i].value = mform_trim(obj[i].value);
        }
    } else {
        if ( "text" == obj.type || "textarea" == obj.type ) obj.value = mform_trim(obj.value);
    }
}

function mform_isValidZip(countryID, zip) {
    // validation rules copied from EventRegistration.EventRegistration_checkZip()
    var patternUS = /^[0-9]{5}.*/;
    var patternCAN = /^([a-zA-Z][0-9][a-zA-Z](\s)?[0-9][a-zA-Z][0-9])$/;
    var pattern = "";

    if ( countryID == null || countryID == "" ) return false;
    switch ( Number(countryID) )
    {
        case g_obj_id_country_us: // US
            return ( zip.value.match(patternUS) );
            break;
        case g_obj_id_country_canada: // Canada
            pattern = patternCAN;
            if ( zip.value.match(patternCAN) ) {
                var s = zip.value;
                s = s.toUpperCase();
                s = s.replace(/(\s)/, "");
                s = s.replace(/([A-Z][0-9][A-Z])/, "$1 ");
                zip.value = s;
                return true;
            } else {
                return false;
            }
            break;
    }
    if ( pattern == "" ) return false;
}

function mform_renderNotCurrentVisitor(visitorName) {
    var obj = document.getElementById(g_mform_id_not_current_visitor);
    if ( obj == null ) return;
    var html = ( typeof(g_Label_if_you_are_not) != "undefined" ? g_Label_if_you_are_not : "If you are not" )
        + " "
        + visitorName
        + ", "
        + "<a href=\"javascript: mform_notCurrentVisitor();\">"
        + ( typeof(g_Label_click_here) != "undefined" ? g_Label_click_here : "click here" )
        + "</a>"
        + " "
        + ( typeof(g_Label_to_clear_form) != "undefined" ? g_Label_to_clear_form : " to clear the form" )
        + "."
    ;
    obj.innerHTML = html;
}

function mform_notCurrentVisitor() {
    var msg = g_mform_defaultDeleteProfMsg;
    if ( typeof(g_Message_deleteProfile) != "undefined" && g_Message_deleteProfile != "" ) msg = g_Message_deleteProfile;
    if ( confirm(msg) ) mform_notme();
}

function mform_notme() {
    var url = "http://" + location.host + g_mform_url_notme
        + "?url="
        + encodeURIComponent(location)
        + "&validate=no"
    ;
    document.location = url;
}

function mform_showRememberMe() {
    var div = document.getElementById(g_mform_id_remember_me_block);
    if ( div == null ) return;
    div.style.display = "block";
}

function mform_hideRememberMe() {
    var div = document.getElementById(g_mform_id_remember_me_block);
    if ( div == null ) return;
    div.style.display = "none";
}
