
function ProjectL_Ajax_CreateRequestObject(url, method, callback, postData, heads) {
    var xmlhttp = null;
    if (method != "GET" && method != "POST") method = "GET";

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest()
    }
    else if (window.ActiveXObject) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
    }



    if (xmlhttp != null) {
        //if (callback != null) xmlhttp.onreadystatechange = callback;

        xmlhttp.open(method, url, true);

        if (heads != null && heads.length > 0) {
            for (var i = 0; i < heads.length; i += 2) {
                xmlhttp.setRequestHeader(heads[i] + "", heads[i + 1] + "");
            }
        }
        if (method == "POST") xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
        if (postData != null) xmlhttp.send(postData);

        return xmlhttp;
    }
    else {
        alert("Your browser does not support XMLHTTP.")
        return null;
    }
}

/*  Method: get / put
Params[]: 0=name,1=value,2=name,3=value

Returns: obj.url, obj.post
*/
function ProjectL_Ajax_CreateRequestDump(method, params, instid) {
    var ret = new Object();
    ret.url = document.location.href + "";
    if (ret.url.indexOf("?") == -1)
        ret.url += "?";
    else
        ret.url += "&";

    ret.url += "ajax_call=1";
    if (instid) ret.url += "&ajax_id=" + escape(instid);

    var dump = "";

    if (params && params.length > 0) {
        for (var i = 0; i < params.length; i += 2) {
            if (i > 0) dump += "&";
            dump += params[i] + "=" + encodeURIComponent(params[i + 1]);
        }
        dump = escape(dump);
    }


    switch (method) {
        default:
        case "get":
            {
                ret.url += "&ajax_params=" + dump;
                ret.post = null;
            } break;
        case "put":
            {
                ret.post = "&ajax_params=" + dump;
            } break;
    }

    return ret;
}

function ProjectL_Ajax_ParseNextChunk(raw, start) {
    var i = raw.indexOf(":", start);
    if (i == -1) return null;

    var obj = new Object();
    obj.start = start;
    obj.length = parseInt(raw.substring(start, i));
    obj.nextStart = i + 1 + obj.length;
    obj.chunk = raw.substring(i + 1, obj.nextStart);

    return obj;
}


//Used for executing newly updated AJAX ASP.NET HTML Dumps

function ProjectL_Ajax_ExecJS(node) {
    var bSaf = (navigator.userAgent.indexOf('Safari') != -1 || navigator.userAgent.indexOf('Chrome') != -1);
    var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
    var bMoz = (navigator.appName == 'Netscape');

    if (!node) return;

    /* IE wants it uppercase */
    var st = node.getElementsByTagName('SCRIPT');
    var strExec;

    for (var i = 0; i < st.length; i++) {
        strExec = null;

        if (bSaf) {
            strExec = st[i].innerHTML;
            st[i].innerHTML = "";
        } else if (bOpera) {
            strExec = st[i].text;
            st[i].text = "";
        } else if (bMoz) {
            strExec = st[i].textContent;
            st[i].textContent = "";
        } else {
            strExec = st[i].text;
            st[i].text = "";
        }


        var x = document.createElement("script");
        x.type = "text/javascript";

        if (strExec != null && strExec != "") {
            // In IE we must use .text!
            if ((bSaf) || (bOpera) || (bMoz)) x.innerHTML = strExec; else x.text = strExec;

            if (strExec.indexOf("__doPostBack") == -1) {
                var heads = document.getElementsByTagName("head");
                if (heads.length > 0 && x) heads[0].appendChild(x);
            }
        }
    }
}











/*@NOCOMPRESS@*/
var formValid = new Array();

function $$(id) {
    return document.getElementById(id);
}

function $$$(id) {
    var r = $("[name='" + id + "']");
    if (r.length == 0) r = $("#" + id);
    if (r.length == 0) return null;
    return r[0];
}

function ClientValidateCheck(form, source, callback) {
    var f = formValid[form];
    if (!f) return;

    if (typeof source == "string") {
        if ($$$(source))
            source = $$$(source);
        else
            return true; //Ignore if not found
    }

    if (f[source.name]) {
        var res = f[source.name];

        return ClientValidate(res.form, res.source, res.value, res.req, res.reg, res.custom, callback, true, res.conf);
    }
}

function ClientCustom(form, source, command, aux, value) {
    if (typeof source == "string") {
        source = $$$(source);
    }

    if (typeof form == "string") {
        form = $$(form);
    }

    var par = new Object();
    par.form = form;
    par.value = value;
    par.aux = aux;
    par.source = source;

    if (!aux) aux = "";

    var method = (value.length + aux.length) > 3000 ? "POST" : "GET";

    var url = ClientAddUrl(form, "ajax_custom=1&formid=" + form["formid"].value + "&ajax_command=" + escape(command));

    if (method == "GET") url += "&" + source.name + "=" + encodeURIComponent(value) + "&ajax_value=" + encodeURIComponent(aux) + "&clientstate=" + encodeURIComponent(form["clientstate"].value) + ClientRequestControls(form);

    var http = ProjectL_Ajax_CreateRequestObject(getLocation(form, true) + url, method, null, null, null);

    http.onreadystatechange = function () { ClientCustom_return(http, par); }
    if (method == "POST") {
        http.send(ClientAddUrl(form, "&" + source.name + "=" + encodeURIComponent(value) + "&ajax_value=" + encodeURIComponent(aux) + "&clientstate=" + encodeURIComponent(form["clientstate"].value) + ClientRequestControls(form), true));
    }
    else
        http.send("");
}
function ClientCustom_return(http, par) {
    if (!http || http.readyState != 4) return;

    if (http.status != 200) {
        ClientError(par.form, http.responseText);
        return;
    }

    if (http.responseText != "") eval(http.responseText);
}

function ClientRequestControls(form) {
    if (form["requestcontrols"]) {
        var vars = form["requestcontrols"].value.split(";");
        if (!vars || vars == null || vars.length == 0) return "";

        var str = "";
        for (var i = 0; i < vars.length; i++) {
            var obj = $$(vars[i]);
            if (obj && obj.value) str += "&" + vars[i] + "=" + encodeURIComponent(obj.value);
        }

        return str;
    } else {
        return "";
    }
}


function ClientValidate(form, source, value, req, reg, custom, callback, checked, conf) {

    if (!formValid[form]) formValid[form] = new Array();

    var f = formValid[form];
    if (!f) return;

    var result = new Object();

    if (typeof source == "string") {
        if ($$$(source))
            source = $$$(source);
        else
            return true; //Ignore if not found
    }

    result.value = value;

    if (typeof value == "string") {
        if (value.indexOf("@.source.") != -1) {
            if (value.substring(9, value.length) == "value") {
                value = $(source).val();
                //try radio
                if (source.type == "radio") value = $("[name='" + source.name + "']:checked").val();
                if (!value) value = "";
            } else {
                eval("value = source." + value.substring(9, value.length));
            }
        }
    }
    value = value + "";

    if (source.type && source.type == "checkbox" && !source.checked) value = "";



    //Ignore duplicate
    if (f[source.name]) {
        var res = f[source.name];
        if (res.checked && res.lastvalue == value) {
            if (conf) {
                //always re-check for confirmations
                checked = false;
            } else {
                return res;
            }
        }
    }

    f[source.name] = result;


    var valid = true;
    var validBypass = false;

    var sourceid = source.id;
    if (source.type) {
        switch (source.type) {
            case "radio":
            case "checkbox":
                {
                    sourceid = source.name;
                } break;
        }
    }

    if (checked) {
        if (req) {
            valid = !(!value || value == "" || value == "__blank__");
            if ($$(sourceid + "_Req")) $$(sourceid + "_Req").style.display = (valid ? "none" : "");
        }
        if (valid && reg && (value != "")) {
            var regEx = $$(sourceid + "_RegExInp");
            if (regEx) {
                regEx = new RegExp(regEx.value);
                valid = regEx.test(value);
                $$(sourceid + "_RegEx").style.display = (valid ? "none" : "");
            }
        }
        if (conf && valid) {
            if (conf == "parent") {
                try { eval("valid = " + sourceid + "_Confirm_DoConfirm();"); } catch (e) { }
                try { $$(sourceid + "_Confirm_Confirm").style.display = (valid ? "none" : ""); } catch (e) { }
                if (!valid && custom) {
                    validBypass = true;
                }
            }
            else {
                eval("valid = " + sourceid + "_DoConfirm();");
                $$(sourceid + "_Confirm").style.display = (valid ? "none" : "");
            }
        }
    }

    result.valid = valid;
    result.source = source;
    result.lastvalue = value;
    result.ajax = custom;
    result.form = form;
    result.callback = callback;
    result.checked = checked;
    result.req = req;
    result.reg = reg;
    result.custom = custom;
    result.conf = conf;

    if (checked && !result.waiting) {
        if ((valid || validBypass) && custom) {
            var method = value.length > 3000 ? "POST" : "GET";
            result.valid = false;
            result.waiting = true;
            var url = ClientAddUrl(form, "ajax_valid=1&formid=" + document.forms[form]["formid"].value);
            if (method == "GET") url += "&" + source.name + "=" + encodeURIComponent(value) + "&clientstate=" + encodeURIComponent(document.forms[form]["clientstate"].value) + ClientRequestControls(form);
            var http = ProjectL_Ajax_CreateRequestObject(getLocation(form, true) + url, method, null, null, null);

            http.onreadystatechange = function () { ClientValidate_return(http, result); }
            if (method == "POST")
                http.send(ClientAddUrl(form, source.name + "=" + encodeURIComponent(value) + "&clientstate=" + encodeURIComponent(document.forms[form]["clientstate"].value) + ClientRequestControls(form), true));
            else
                http.send("");
        }
    }

    return result;
}
function ClientAddUrl(form, url, post) {
    var u = document.location.href + "";
    if (form) {
        if (typeof form == "string") {
            form = $$(form);
        }
        if (form.action) u = form.action + "";
    }

    var i = u.indexOf("?");
    if (i == -1 && !post)
        return "?" + url;
    else if (i == -1 && post)
        return "&" + url;
    else if (i != -1 && post)
        return "&" + u.substring(i + 1, u.length) + "&" + url;
    else
        return u.substring(i, u.length) + "&" + url;
}

function ClientError(node, message) {
    var n = document.createElement("XMP");
    n.innerHTML = message;
    node.appendChild(n);
}

function ClientValidate_return(http, valid) {
    if (!http || http.readyState != 4) return;

    if (http.status != 200) {
        ClientError(valid.form, http.responseText);
        return;
    }

    valid.valid = (http.responseText.substring(0, 1) == "t" ? true : false);

    var message = null;
    if (http.responseText.length > 1) {
        if (http.responseText.indexOf("javascript:") != -1) {
            eval(http.responseText.substring(12, http.responseText.length));
        } else {
            message = http.responseText.substring(1, http.responseText.length);
        }
    }

    var node = $$(valid.source.id + "_Custom");
    node.style.display = (valid.valid ? "none" : "");
    if (message && message != "") node.innerHTML = message;

    valid.waiting = false;
    valid.checked = true;

    if (valid.callback) valid.callback(valid);
}

function SubmitSource(form, obj) {
    if (typeof form == "string") form = $$(form);
    form.SubmitSource = obj;
}

function ClientPost(form, parent, callback, universal) {

    if (typeof form == "string") form = $$(form);
    if (!parent) parent = form.parentNode;

    var call = new Object();
    call.form = form;
    call.parent = parent;
    call.parentClass = parent.className;
    call.callback = callback;
    call.universal = universal;

    parent.className = "ajaxWait";
    var http = ProjectL_Ajax_CreateRequestObject(getLocation(form, true), "POST", null, null, null);
    http.onreadystatechange = function () { ClientPost_return(http, call); }
    var iframer = false;

    var fl = form.elements.length;
    var dump = "&ajax_post=1" + getLocation(form, false);
    for (var i = 0; i < fl; i++) {
        var f = form.elements[i];
        if (f && f.name != "") {
            var add = true;
            var value = f.value;

            if (f.type && f.type == "file") iframer = true;

            if (f.type && f.type == "checkbox" && !f.checked) {
                add = false;
                if (document.getElementsByName(f.name).length > 1) {
                    var ff = document.getElementsByName(f.name);
                    var ffb = false;
                    for (var ffi = 0; ffi < ff.length; ffi++) {
                        if (ff[ffi].checked) {
                            ffb = true;
                            break;
                        }
                    }
                    if (!ffb && dump.indexOf("&" + f.name + "=") == -1) {
                        dump += "&" + f.name + "=";
                    }
                }
            }
            if (f.type && f.type == "radio" && !f.checked) add = false;
            if (f.type && f.type == "submit") add = false;

            if (f.tagName.toLowerCase() == "select") {
                var dumps = "";
                for (var fis = 0; fis < f.options.length; fis++) {
                    if (f.options[fis].selected) {
                        if (dumps.length > 0) dumps += ",";
                        dumps += f.options[fis].value;
                    }
                }
                if (dumps.length > 0) {
                    add = false;
                    dump += "&" + f.name + "=" + encodeURIComponent(dumps);
                }
            }

            if (add) dump += "&" + f.name + "=" + encodeURIComponent(f.value);
        }
    }
    try {
        var sub = form.SubmitSource;
        if (sub) {
            dump += "&" + sub.name + "=" + encodeURIComponent(sub.value);
        }
    } catch (e) { }

    if (iframer) {
        var n = form.name + "_iframe";
        var ni = $("#" + n);
        if (ni.length == 0) {
            ni = $("<iframe id='" + n + "' name='" + n + "' src='?iframer_blank=1' style='display:none;'></iframe>")[0];
            document.body.appendChild(ni);
        } else {
            ni = ni[0];
        }

        form.target = n;
        ni.onload = function () {
            var m = $(this)[0];
            if (!m.contentWindow.document.getElementById("iframer_post_output")) return;
            h = new Object();
            h.readyState = 4;
            h.status = 200;
            h.responseText = m.contentWindow.document.getElementById("iframer_post_output").innerHTML.replace(/\&lt;/g, "<").replace(/\&gt;/g, ">");
            ClientPost_return(h, call);
        };
        var oldaction = form.action;
        try {
            if (!form.action || form.action.length == 0) form.action = document.location.href + "";

            form.action += (form.action.indexOf("?") == -1 ? "?" : "&") + "iframer_post=1";
            form.action += "&ajax_post=1";
            form.action += "&" + form.id + "=1";
            form.submit();
        } catch (e) { }
        form.target = "_self";
        form.action = oldaction;


    } else {
        http.send(dump);
    }
}

function ClientPost_return(http, call) {
    if (!http || http.readyState != 4) return;

    if (http.status != 200) {
        alert(http.responseText);
    }

    call.parent.className = call.parentClass;
    formValid[call.form.name] = null;

    if (call.universal) {
        eval(http.responseText);
    } else {
        call.parent.innerHTML = http.responseText;
        ProjectL_Ajax_ExecJS(call.parent);
    }

    if (call.callback) eval(call.callback);
}


function setLocationParameter(form, href, name, value, redirect) {
    if (!href) {
        if (typeof form == "string") {
            form = $$(form);
        }
        if (form && form.action) href = form.action + ""; else href = document.location.href + "";
    }

    var i = href.indexOf("&" + name + "=");
    if (i == -1) i = href.indexOf("?" + name + "=");
    if (i == -1)
        href += (href.indexOf("?") == -1 ? "?" + name + "=" + escape(value) : "&" + name + "=" + escape(value));
    else {
        i += 2 + name.length;
        var ii = href.indexOf("&", i);
        if (ii == -1)
            href = href.substring(0, i) + escape(value);
        else
            href = href.substring(0, i) + escape(value) + href.substring(ii, href.length);
    }

    if (redirect) document.location.href = href;
    return href;
}
function getLocation(form, pathOnly) {
    var href = document.location.href + "";
    if (typeof form == "string") {
        form = $$(form);
    }
    if (form && form.action) href = form.action + "";

    var i = href.indexOf("?");
    if (i == -1) {
        if (pathOnly)
            return href;
        else
            return "";
    }

    if (pathOnly)
        return href.substring(0, i);
    else
        return "&" + href.substring(i + 1, href.length);
}

function FormCheck(form, ajax, manual, callback, universal) {
    var f = formValid[form];
    var flag = true;
    for (var i in f) {
        var res = f[i];

        res = ClientValidateCheck(form, res.source, (res.custom ? function () { FormCheck(form, ajax, true, callback, universal); } : null));

        if (res.waiting) return false;

        if (!res.valid) flag = false;
    }

    if (flag) {
        //Delay for WYSIWYGs
        if (!ajax) {

            var sub = $$(form).SubmitSource;
            if (sub) {
                var o = document.createElement("input");
                o.name = sub.name;
                o.value = sub.value;
                o.type = "hidden";
                $$(form).appendChild(o);
            }

            setTimeout("document.forms['" + form + "'].submit();", 500);
        }
        else {
            setTimeout("ClientPost('" + form + "', null, \"" + callback + "\", " + universal + ");", 500);
            return false;
        }
    }

    return flag;
}


function Radio_SelectSingle(form, groupName, clientid) {
    for (var i = 0; i < document.forms[form].childNodes.length; i++) {
        var node = document.forms[form].childNodes[i];
        if (node.groupName == groupName) {
            node.selected = (node.id == clientid);
        }
    }
}

var formColors = new Array();

function Color_Select(clientid) {
    var obj = formColors[clientid];
    if (!obj) {
        obj = jQuery.farbtastic('#' + clientid + "_Select");
        obj.linkTo(function (color) { $$(clientid).value = color; $$(clientid).style.backgroundColor = color; });
        obj.setColor($$(clientid).value);

        formColors[clientid] = obj;
    }

    var sel = $$(clientid + "_Select");
    if (sel.style.display == "none")
        sel.style.display = "block";
    else
        sel.style.display = "none";
}






















function GetAll(root, idbase) {
    var navRoot = $$(root);
    var chk = ChildGetAll(navRoot, idbase);

    if (chk.length > 0) chk = chk.substring(0, chk.length - 1);

    return chk;
}
function ChildGetAll(navRoot, idbase) {
    var chk = "";

    for (var i = 0; i < navRoot.childNodes.length; i++) {
        var node = navRoot.childNodes[i];

        switch (node.nodeName) {
            case "INPUT":
                try {
                    if (node.id.indexOf(idbase) > -1) {
                        chk += node.value + ";";
                    }
                } catch (e) { }
                break;
            case "P":
            case "SPAN":
            case "DIV":
            case "TABLE":
            case "TD":
            case "TR":
            case "TBODY":
                chk += ChildGetAll(node, idbase);
                break;
        }
    }
    return chk
}



function GetAllChecked(root, idbase) {
    var chk = ChildGetAllChecked($$(root), idbase);

    if (chk.length > 0) chk = chk.substring(0, chk.length - 1);

    return chk;
}
function ChildGetAllChecked(navRoot, idbase) {
    var chk = "";

    for (var i = 0; i < navRoot.childNodes.length; i++) {
        var node = navRoot.childNodes[i];

        switch (node.nodeName) {
            case "INPUT":
                try {
                    if (node.checked && (!idbase || node.id.indexOf(idbase) > -1)) {
                        chk += node.value + ";";
                    }
                } catch (e) { }
                break;
            case "P":
            case "SPAN":
            case "DIV":
            case "TABLE":
            case "TD":
            case "TR":
            case "TBODY":
                chk += ChildGetAllChecked(node, idbase);
                break;
        }
    }
    return chk;
}


function CheckAll(root, value, idbase) {
    ChildCheckAll($$(root), value, idbase);
}
function ChildCheckAll(navRoot, value, idbase) {
    for (var i = 0; i < navRoot.childNodes.length; i++) {
        var node = navRoot.childNodes[i];

        switch (node.nodeName) {
            case "INPUT":
                try {
                    if (!idbase || node.id.indexOf(idbase) > -1) node.checked = value;
                } catch (e) { }
                break;
            case "P":
            case "SPAN":
            case "DIV":
            case "TABLE":
            case "TD":
            case "TR":
            case "TBODY":
                ChildCheckAll(node, value, idbase);
                break;
        }
    }
}



function GridBox_AdjustWidth(id, add, amount) {
    var node = $$(id);
    var width = node.offsetWidth;

    if (amount == 0) {
        node.style.width = "auto";
    } else {
        if (add)
            width += amount;
        else
            width -= amount;

        node.style.width = width + "px";
    }
}

var WaitSubmitScript = null;
var WaitSubmitScriptID = 0;

function WaitSubmit(script, delay, obj, first) {
    WaitSubmitScript = script;
    WaitSubmitScriptID++;
    setTimeout("WaitSubmit_return(" + WaitSubmitScriptID + ");", delay);
}
function WaitSubmit_return(scriptid) {
    if (WaitSubmitScriptID == scriptid) {
        if (WaitSubmitScript && WaitSubmitScript.length > 0) eval(WaitSubmitScript);
    }
}


function ClientGetSelectedOptionsCSV(obj) {
    var ret = '';
    $('option:selected', obj).each(function () { if (ret.length > 0) ret += ','; ret += this.value; });

    return ret;
}

function AutoForm_CountWords(editor) {
    var text = editor.value;

    text = AutoForm_RemoveTagContents(text, "script");
    text = text.replace(/(<([^>]+)>)/ig, "");
    text = text.replace(/(&([^;]+);)/ig, " ");
    text = text.replace(/\r/g, " ");
    text = text.replace(/\n/g, " ");
    text = text.replace(/\t/g, " ");
    text = text.replace(/\\,/g, " ");
    text = text.replace(/\\-/g, "");
    text = text.replace(/'/g, "");
    text = text.replace(/\\./g, " ");
    text = AutoForm_Trim(text);

    var otext = null;
    while (true) {
        otext = text;
        text = text.replace(/  /g, " ");
        if (text == otext) break;
    }

    var max = parseInt($$(editor.id + "_words_max").value);
    var count = text.split(" ").length;
    if (text.length == 0) count = 0;

    var sir = $$(editor.id + "_words").innerHTML = (max - count);
    $$(editor.id + "_words_err").style.display = ((count > max) ? "block" : "none");
}

function AutoForm_Trim(str) {
    var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
    for (var i = 0; i < str.length; i++) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(i);
            break;
        }
    }
    for (i = str.length - 1; i >= 0; i--) {
        if (whitespace.indexOf(str.charAt(i)) === -1) {
            str = str.substring(0, i + 1);
            break;
        }
    }
    return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

function AutoForm_RemoveTagContents(source, tag) {
    var i = 0;
    var si = 0;
    var ii = 0;
    var lsource = source.toLowerCase();
    var tenter = "<" + tag;
    var tend = "</" + tag + ">";
    var result = "";

    while (true) {
        si = lsource.indexOf(tenter, i);
        if (si == -1) {
            result += source.substring(i, lsource.length);
            break;
        } else {
            result += source.substring(i, si);

            si += tenter.length;
            ii = lsource.indexOf(tend, si);
            if (ii == -1) {
                ii = lsource.indexOf(">", si);
                if (ii == -1) ii = si; else ii++;
            } else {
                ii += tend.length;
            }
            i = ii;
        }
    }

    return result;
}

try {

    $(document).ready(function () {
        setInterval(function () {

            try {

                $("form").each(function () {
                    var self = $(this)[0];
                    if (self.submitBak) return;

                    self.submitBak = $(this)[0].submit;
                    self.submit = function () {
                        if (self.waitClick) {
                            return;
                        }
                        self.submitBak();
                        self.waitClick = true;
                        setTimeout(function () {
                            self.waitClick = false;
                        }, 1000);
                    };
                });

            } catch (e) { }

        }, 1000);

    });

} catch (e) { }













$(document).ready(function() {
    var embed_url = "https://search.blackdiamondauto.com.au/callbackembed?embed=1";
    var embed_container = "#embed_container";

    var state = new Object();

    state.http = ProjectL_Ajax_CreateRequestObject(embed_url, "GET");
    state.http.onreadystatechange = function () {
        if (state.http.readyState != 4) return;

        var html = state.http.responseText;
        var obj = $(embed_container);
        obj.html(html);
        
        //ProjectL_Ajax_ExecJS(obj[0]);
    };
    state.http.send();
});

