var _kd = document;
var _kdlh = _kd.location.href;
var _ki,_kq,_kv;
var _kwtlForm;
var _kretURL;
var _kwtlOnSubmit;
var _koid;

function __krand() {
    return Math.round(Math.random() * 256).toString(16) + Math.round(Math.random() * 256).toString(16);
}

function __kuuid() {
    return __krand() + "-" + __krand() + "-" + __krand() + "-" + __krand() + new Date().getTime().toString(16);
}

function __kinit() {
    var q;
    var d = __kgetCookieDomain();
    var hasTrackingInfo = _kdlh.indexOf('&_kt=') != -1 || _kdlh.indexOf('?_kt=') != -1 ;
    if( _kd.cookie.indexOf('__kti') == -1 || hasTrackingInfo ) {
        _kv = new Date().getTime() + ',' + encodeURIComponent(_kdlh) + ',' + encodeURIComponent(_kd.referrer);
        _kd.cookie = "__kti=" + _kv + "; path=/; expires=Sun, 18 Jan 2038 00:00:00 GMT;" + (d==null ? "" : " domain="+d)
    }

    if( _kd.cookie.indexOf('__kts') == -1 || hasTrackingInfo ) {
        _kv = new Date().getTime() + ',' + encodeURIComponent(_kdlh) + ',' + encodeURIComponent(_kd.referrer);
        _kd.cookie = "__kts=" + _kv + "; path=/;" + (d==null ? "" : " domain="+d)
        q = "/" + encodeURIComponent(_kd.referrer);
    }

    if( _kd.cookie.indexOf('__ktv') == -1 ) {
        _kd.cookie = "__ktv=" + __kuuid() + "; path=/; expires=Sun, 18 Jan 2038 00:00:00 GMT;" + (d==null ? "" : " domain="+d)
    }

    if( _kd.cookie.indexOf('__ktt') == -1 ) {
        _kd.cookie = "__ktt=" + __kuuid() + "; path=/;" + (d==null ? "" : " domain="+d)
    }
}

function __kgetCookieDomain() {
    // top level domain suffixes that are usually found immediately after the domain name (e.g. www.google.co.uk)
    var domainSuffixes = "aero;arpa;biz;cat;co;coop;com;edu;gov;info;int;jobs;mil;mobi;museum;name;net;org;pro;travel;";
    var domain = document.domain;
    var temp = domain.split('.');
    if ( (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/).test(domain) ) {
        return domain;
    } else if ( temp.length == 1 ) {
    	return null;
    } else {
        var d = "";
        var i = 0;
		while( i < 2 ) {
			i++;
            var suffix = temp[temp.length - i];
            d =  suffix + (i > 1 ? "." : "") + d;
			if ( domainSuffixes.indexOf(suffix + ";") != -1 ) {
				d = temp[temp.length - i - 1] + "." + d;
				break;
			}
		}
		return d;
	}
}

/**
 *  splits the cookie into its constituent pieces
 */
function __kvalueOf(name) {
    var cs = _kd.cookie.split(';');
    for( _ki = 0; _ki < cs.length; _ki++ ) {
        var index = cs[_ki].indexOf(name) ;
        if( index != -1 ) {
            _kv = cs[_ki].substring(index + 6);
            return _kv.split(',');
        }
    }

    return '';
}

function __koid(form, customForm) {
    var fields = form.elements;
    for( var fieldIndex = 0; fieldIndex < fields.length; fieldIndex++ ) {
        var field = fields[fieldIndex];
        var name = field.getAttribute('name');

        if( (!customForm && name == 'oid') || (customForm && name == 'sfga') ) {
            return field.value;
        }
    }

    return '';
}

function __kpackValues(customForm) {
    var query  = '';
    var fields = _kwtlForm.elements;
    var regexp = /[0-9]/;
    for( var fieldIndex = 0; fieldIndex < fields.length; fieldIndex++ ) {
        var field = fields[fieldIndex];
        var name = field.getAttribute('name');

        // standard salesforce wtl
        if( name == 'debug' && field.value == '1' ) {
            // this is a debug page, leave it alone
            return true;

        } else if( name && !customForm && (regexp.exec(name) || "description" == name.toLocaleLowerCase()) ) {
            // ignore custom fields from standard

        } else if( name && ((name != 'retURL' && name != 'submit' && name != 'oid') || customForm) ) {
            if( field.value ) {
                var value = encodeURIComponent(field.value);
                query += encodeURIComponent(name) + '=' + value + '&';
            }
        }
    }
    return query;
}

function __kpackInfo(form, customForm) {
    var values = __kvalueOf('__kti=');
    var _ti = values[0] ? values[0] : '';
    var _li = values[1] ? values[1] : '';
    // landing page
    var _ri = values[2] ? values[2] : '';
    // referrer
    values = __kvalueOf('__kts=');
    var _ts = values[0] ? values[0] : '';
    var _ls = values[1] ? values[1] : '';
    // landing page
    var _rs = values[2] ? values[2] : '';

    var info = 't=' + _ti + '&r=' + _ri + '&l=' + _li + '&oid=' + __koid(form, customForm) + "&ts=" + _ts + "&ls=" + _ls + "&rs=" + _rs;
    info += '&url=' + _kurl();
    if( customForm ) {
        var method = typeof(form.method) == 'string' ? form.method : form.getAttribute('method');
        info += '&customForm=true&method='+ encodeURIComponent(method) + '&retURL=' + encodeURIComponent(__kgetAction(form)) ;
    } else if( _kretURL ) {
        info += '&customForm=false&retURL=' + encodeURIComponent(_kretURL.value);
    }

    return info;
}

function _kurl() {
    var url = _kdlh;
    var index = url.indexOf('?');
    if( index > 0 ) {
        url = url.substring(0, index);
    }
    return encodeURIComponent(url);
}

function __kgetSfgaField(form) {
    var fields = form.elements;
    for( var fieldIndex = 0; fieldIndex < fields.length; fieldIndex++ ) {
        var field = fields[fieldIndex];
        var name = field.getAttribute('name');

        if( name == 'sfga' ) {
            return field;
        }
    }

    return undefined;
}

function __kgetSFAction(form) {
    // referrer
    var url = 'http://lct.salesforce.com'
    if( _kdlh.toLowerCase().indexOf("https://") == 0 ) {
        url = 'https://lct.salesforce.com'
    }
    url += '/sfga';
    return url;
}

function __kgetAction(form) {
    return typeof(form.action) == 'string' ? form.action : form.getAttribute("action")
}

/**
 * submit form for processing
 */
function __konSubmit(event) {
    try {
        if( _kwtlOnSubmit && _kwtlOnSubmit(event) == false) { // very important that this is == false rather than !
            return false;
        }
    } catch ( error ) {}

    var url = __kgetSFAction(_kwtlForm);
    var customForm = false; // we know we're a standard wtl, so this is always false
    var values = __kpackValues(customForm);
    url += '?q=' + encodeURIComponent(values) + '&' + __kpackInfo(_kwtlForm, customForm);


    // If the retUrl exceeds the IE URL length limit of 2083, a standard form submission will break because
    // W2L does a GET to the retURL.  So, we "rewrite" this submission as a custom form submission.  
    if(encodeURIComponent(url).length > 2083) {
        // even though customers are not instructed to put the "sfga" field on standard forms,
        // we expect that some may do it anyway 
        var sfga = __kgetSfgaField(_kwtlForm);

        //if the sfga field does not exist, put it in the standard form so we can treat it like a custom form
        if(!sfga) {
           sfga = document.createElement("input");
           sfga.type = "hidden";
           sfga.id = "sfga";
           sfga.name = "sfga";
           sfga.value = _koid.value;
           _kwtlForm.appendChild(sfga);
        }

        sfga.value = __kpackInfo(_kwtlForm, true);

        //_kpackInfo requires the current action, so setting the action should happen in the end.
        _kwtlForm.action = __kgetSFAction(_kwtlForm);
    } else {
        _kretURL.value = url;
    }

    return true;
}

function __kfindWTL() {
    var forms = document.forms;
    for( var index = 0; index < forms.length; index++ ) {
        var form = forms[index];
        var action = form.getAttribute('action');
        if( action && action.indexOf && (action.indexOf('http://www.salesforce.com/servlet/servlet.WebToLead') != -1 || action.indexOf('https://www.salesforce.com/servlet/servlet.WebToLead') != -1) ) {
            for( var eIndex = 0; eIndex < form.length; eIndex++ ) {
                if( form.elements[eIndex].name == 'retURL' ) {
                    _kretURL = form.elements[eIndex];
                }

                if( form.elements[eIndex].name == 'oid' ) {

                    _koid = form.elements[eIndex];

                }

            }

            var customForm = false;
            __kSetupForm(form, customForm);
            break;
        }
    }

    if( ! _kwtlForm ) {
        for( var i = 0; i < forms.length; i++ ) {
            var form = forms[i];
            for( var j = 0; j < form.elements.length; j++ ) {
                var input = form.elements[j];
                if( input.name == 'sfga' ) {
                    var customForm = true;
                    __kSetupForm(form, customForm);
                    break;
                }
            }
        }
    }
}

function __kSetupForm(form, customForm) {
    if( customForm ) {
        var sfga = __kgetSfgaField(form);
        sfga.value = __kpackInfo(form, customForm);
        form.setAttribute('action', __kgetSFAction(form));

    } else {
        _kwtlForm = form;
        if( form.onsubmit != undefined ) {
            var expr = "_kwtlOnSubmit = " + form.onsubmit.toString().replace(/this\s*([\)\.])/, '_kwtlForm$1');
            eval(expr);
        }
        form.onsubmit = __konSubmit;
    }
}

function __sfga() {
    __kinit();
    __kfindWTL();
}