//
// P L E A S E  do not re-adjust the sajax_uri, it should now work as-is !
//

// ONLY in case AJAX DOESN'T work you may want to double-check this path:
var sajax_uri = '/wp-content/plugins/cforms/lib_ajax.php';

// if you do change the above: CLEAR your BROWSER CACHE & RESTART you BROWSER

// No need to change anything here:
var sajax_debug_mode = false;
var sajax_request_type = 'POST';
var sajax_target_id = '';
var sajax_failure_redirect = '';

// got a key?
var sajax_key = '';
function sajax_debug(text) {
    if (sajax_debug_mode) alert(text)
}
function sajax_init_object() {
    sajax_debug("sajax_init_object() called..");
    var A;
    var msxmlhttp = new Array('Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
    for (var i = 0; i < msxmlhttp.length; i++) {
        try {
            A = new ActiveXObject(msxmlhttp[i])
        } catch(e) {
            A = null
        }
    }
    if (!A && typeof XMLHttpRequest != "undefined") A = new XMLHttpRequest();
    if (!A) sajax_debug("Could not create connection object.");
    return A
}
var sajax_requests = new Array();
function sajax_cancel() {
    for (var i = 0; i < sajax_requests.length; i++) sajax_requests[i].abort()
}
function sajax_do_call(func_name, args) {
    var i, x, n;
    var uri;
    var post_data;
    var target_id;
    sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
    target_id = sajax_target_id;
    if (typeof(sajax_request_type) == "undefined" || sajax_request_type == "") sajax_request_type = "GET";
    uri = sajax_uri;
    if (sajax_request_type == "GET") {
        if (uri.indexOf("?") == -1) uri += "?rs=" + encodeURIComponent(func_name);
        else uri += "&rs=" + encodeURIComponent(func_name);
        uri += "&rst=" + encodeURIComponent(sajax_target_id);
        uri += "&rsrnd=" + new Date().getTime();
        for (i = 0; i < args.length - 1; i++) uri += "&rsargs[]=" + encodeURIComponent(args[i]);
        post_data = null
    } else if (sajax_request_type == "POST") {
        post_data = "rs=" + encodeURIComponent(func_name);
        post_data += "&rst=" + encodeURIComponent(sajax_target_id);
        post_data += "&rsrnd=" + new Date().getTime();
        for (i = 0; i < args.length - 1; i++) post_data = post_data + "&rsargs[]=" + encodeURIComponent(args[i])
    } else {
        alert("Illegal request type: " + sajax_request_type)
    }
    x = sajax_init_object();
    if (x == null) {
        if (sajax_failure_redirect != "") {
            location.href = sajax_failure_redirect;
            return false
        } else {
            sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
            return false
        }
    } else {
        x.open(sajax_request_type, uri, true);
        sajax_requests[sajax_requests.length] = x;
        if (sajax_request_type == "POST") {
            x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
            x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
        }
        x.onreadystatechange = function() {
            if (x.readyState != 4) return;
            sajax_debug("received " + x.responseText);
            var status;
            var data;
            var txt = x.responseText.replace(/^\s*|\s*$/g, "");
            var offset = (txt.charCodeAt(0) > 255) ? 1 : 0;
            status = txt.charAt(0 + offset);
            data = txt.substring(2 + offset);
            if (status == "") {} else if (status == "-") alert("Error: " + data);
            else {
                if (target_id != "") document.getElementById(target_id).innerHTML = eval(data);
                else {
                    try {
                        var callback;
                        var extra_data = false;
                        if (typeof args[args.length - 1] == "object") {
                            callback = args[args.length - 1].callback;
                            extra_data = args[args.length - 1].extra_data
                        } else {
                            callback = args[args.length - 1]
                        }
                        callback(eval(data), extra_data)
                    } catch(e) {
                        sajax_debug("Caught error " + e + ": Could not eval " + data)
                    }
                }
            }
        }
    }
    sajax_debug(func_name + " uri = " + uri + "*/post = " + post_data);
    x.send(post_data);
    sajax_debug(func_name + " waiting..");
    delete x;
    return true
}
function x_cforms_submitcomment() {
    sajax_do_call("cforms_submitcomment", x_cforms_submitcomment.arguments)
}
function x_reset_captcha() {
    sajax_do_call("reset_captcha", x_reset_captcha.arguments)
}
function reset_captcha(no) {
    x_reset_captcha(no, reset_captcha_done)
}
function reset_captcha_done(newimage) {
    no = newimage.split('|');
    document.getElementById('cf_captcha_img' + no[1]).src = no[2] + '&rnd=' + Math.round(Math.random() * 999999)
}
function call_err(no, err, custom_error, popFlag) {
    document.getElementById('sendbutton' + no).style.cursor = "auto";
    document.getElementById('sendbutton' + no).disabled = false;
    if (custom_error != '') custom_error = '<ol>' + custom_error + '</ol>';
    err = unescape(decodeURI(err.value)) + custom_error;
    stringXHTML = err.replace(/(\r\n)/g, '<br />');
    msgbox = 'usermessage' + no;
    ucm = (parseInt(no) > 1) ? ' failure' + no: '';
    if (document.getElementById(msgbox + 'a')) document.getElementById(msgbox + 'a').className = "cf_info failure" + ucm;
    if (document.getElementById(msgbox + 'b')) document.getElementById(msgbox + 'b').className = "cf_info failure" + ucm;
    doInnerXHTML(msgbox, stringXHTML.replace(/\\/g, ""), '');
    err = err.replace(/\\/g, "");
    if (document.getElementById('cf_popup' + no).value.charAt(popFlag) == 'y') {
        err = err.replace(/<li>/g, "\r\n");
        err = err.replace(/<.?strong>/g, '*');
        err = err.replace(/(<([^>]+)>)/ig, '');
        err = err.replace(/&raquo;/ig, '');
        alert(err)
    }
}
function clearField(thefield) {
    if (thefield.defaultValue == thefield.value) thefield.value = ''
};
function setField(thefield) {
    if (thefield.value == '') thefield.value = thefield.defaultValue
};
function cforms_validate(no, upload) {
    if (!no) no = '';
    msgbox = 'usermessage' + no;
    if (document.getElementById(msgbox + 'a')) {
        document.getElementById(msgbox + 'a').className = "cf_info waiting"
    }
    if (document.getElementById(msgbox + 'b')) {
        document.getElementById(msgbox + 'b').className = "cf_info waiting"
    }
    waiting = unescape(decodeURI(document.getElementById('cf_working' + no).value));
    waiting = waiting.replace(/\\/g, "");
    function getStyle(oElm, strCssRule) {
        var strValue = "";
        try {
            if (document.defaultView && document.defaultView.getComputedStyle) {
                strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule)
            } else if (oElm.currentStyle) {
                strCssRule = strCssRule.replace(/\-(\w)/g,
                function(strMatch, p1) {
                    return p1.toUpperCase()
                });
                strValue = oElm.currentStyle[strCssRule]
            }
        } catch(ee) {
            strValue = ""
        }
        if (strValue && (strValue.match(/px/) || strValue.match(/em/))) return strValue.substring(0, strValue.length - 2);
        else return strValue
    }
    function sameParentBG(col, el) {
        if (el) {
            var colStyle = getStyle(el, 'background-color');
            if (colStyle == col) return true;
            else if (el.parentNode && el.parentNode.tagName.toLowerCase() != "html") return sameParentBG(col, el.parentNode)
        }
        return false
    }
    var key = document.location.host.substring(1, document.location.host.length - 1);
/*
    if (hex_md5(key) != sajax_key) {
        var pEl = document.getElementById('ll' + no);
        var aEl = pEl.firstChild;
        if (pEl) llove = pEl.innerHTML.toLowerCase();
        else return true;
        if (llove.match('href="http://www.deliciousdays.com/cforms-plugin"') == null) return true;
        if (aEl.href.match('http://www.deliciousdays.com/cforms-plugin') == null) return true;
        if (pEl.style.display == "none" || pEl.style.visibility == "hidden") return true;
        if (aEl.style.display == "none" || aEl.style.visibility == "hidden") return true;
        if (getStyle(pEl, "width") == '0' || sameParentBG(getStyle(aEl, "color"), aEl) == true) return true;
        if (getStyle(pEl, "font-size") == '0' || getStyle(aEl, "font-size") == '0') return true;
        if (getStyle(pEl, "visibility") == 'hidden' || getStyle(aEl, "visibility") == 'hidden') return true;
        if (getStyle(pEl, "display") == 'none' || getStyle(aEl, "display") == 'none') return true;
        if (getStyle(pEl, "height") == '0' || getStyle(aEl, "line-height") == '0') return true;
        if (parseInt(getStyle(pEl, "text-indent")) < -600) return true
    }
*/
    var insert_err = new Array();
    var insert_err_p = new Array();
    var insert_err_count = 0;
    var all_custom_error = new Array();
    rest = document.getElementById('cf_customerr' + no).value.substr(3);
    show_err_li = document.getElementById('cf_customerr' + no).value.substr(0, 1);
    show_err_ins = document.getElementById('cf_customerr' + no).value.substr(1, 1);
    jump_to_err = document.getElementById('cf_customerr' + no).value.substr(2, 1);
    var error_container = decodeURIComponent(rest);
    error_container = error_container.split('|');
    for (i = 0; i < error_container.length; i++) {
        keyvalue = error_container[i].split('$#$');
        all_custom_error[keyvalue[0]] = keyvalue[1]
    }
    custom_error = '';
    var regexp_field_id = new RegExp('^.*field_([0-9]{1,3})$');
    if (doInnerXHTML(msgbox, waiting)) {
        var all_valid = true;
        var code_err = false;
        var regexp_e = new RegExp('^[\\w+-_\.]+@[\\w-_]+[\.][\\w-_\.]+$');
        objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('li');
        for (var i = 0; i < objColl.length; i++) if (objColl[i].className == 'cf_li_err') objColl[i].className = '';
        objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('ul');
        while (objColl.length > 0) objColl[0].parentNode.removeChild(objColl[0]);
        objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('*');
        last_one = false;
        for (var i = 0,
        j = objColl.length; i < j; i++) {
            temp = objColl[i].className;
            if (temp.match(/secinput/)) newclass = 'secinput';
            else if (temp.match(/cf-box-./)) newclass = temp.match(/cf-box-./);
            else if (temp.match(/cformselect/)) newclass = 'cformselect';
            else if (temp.match(/upload/)) newclass = 'cf_upload';
            else if (temp.match(/cf_date/)) newclass = 'single cf_date';
            else if (temp.match(/single/)) newclass = 'single';
            else if (temp.match(/area/)) newclass = 'area';
            else if (temp.match(/cfselectmulti/)) newclass = 'cfselectmulti';
            else newclass = '';
            fld = objColl[i].nodeName.toLowerCase();
            typ = objColl[i].type;
            if ((fld == "input" || fld == "textarea" || fld == "select") && !(typ == "hidden" || typ == "radio" || typ == "submit")) {
                if (temp.match(/required/) && !temp.match(/email/)) {
                    newclass = newclass + ' fldrequired';
                    n = objColl[i].nextSibling;
                    p = objColl[i].previousSibling;
                    if (temp.match(/cf-box-./)) {
                        if (objColl[i].checked == false) {
                            custom_error = check_for_customerr(objColl[i].id);
                            newclass = newclass + ' cf_error';
                            if (n && n.nodeName.toLowerCase() == "label" && !n.className.match(/errortxt/)) n.className = n.className + " cf_errortxt";
                            else if (p && p.nodeName.toLowerCase() == "label" && !p.className.match(/errortxt/)) p.className = p.className + " cf_errortxt";
                            all_valid = false;
                            if (!last_one) last_one = objColl[i].name
                        } else {
                            if (n && n.nodeName.toLowerCase() == "label" && n.className.match(/cf_errortxt/)) n.className = n.className.substr(0, n.className.search(/ cf_errortxt/));
                            else if (p && p.nodeName.toLowerCase() == "label" && p.className.match(/cf_errortxt/)) p.className = p.className.substr(0, p.className.search(/ cf_errortxt/))
                        }
                    } else if (temp.match(/cformselect/)) {
                        if (objColl[i].value == '' || objColl[i].value == '-') {
                            newclass = newclass + ' cf_error';
                            all_valid = false;
                            if (!last_one) last_one = objColl[i].name;
                            custom_error = check_for_customerr(objColl[i].id)
                        }
                    } else if (objColl[i].value == '') {
                        newclass = newclass + ' cf_error';
                        all_valid = false;
                        if (!last_one) last_one = objColl[i].name;
                        custom_error = check_for_customerr(objColl[i].id)
                    }
                }
                if (temp.match(/email/)) {
                    newclass = newclass + ' fldemail';
                    if (objColl[i].value == '' && !temp.match(/required/));
                    else if (!objColl[i].value.match(regexp_e)) {
                        newclass = newclass + ' fldrequired cf_error';
                        all_valid = false;
                        if (!last_one) last_one = objColl[i].name;
                        custom_error = check_for_customerr(objColl[i].id)
                    } else newclass = newclass + ' fldrequired'
                }
                objColl[i].className = newclass
            }
            regexp = 1;
            if (objColl[i] && document.getElementById(objColl[i].id + '_regexp')) {
                obj_regexp = document.getElementById(objColl[i].id + '_regexp');
                INPval = objColl[i].value;
                if (obj_regexp && obj_regexp.value != '') {
                    if (document.getElementById(obj_regexp.value)) {
                        if (INPval != document.getElementById(obj_regexp.value).value) regexp = null
                    } else {
                        if (INPval != '') {
                            regexp = new RegExp(obj_regexp.value);
                            regexp = INPval.match(regexp)
                        }
                    }
                    if (regexp == null) {
                        newclass = newclass + ' cf_error';
                        all_valid = false;
                        if (!last_one) last_one = objColl[i].name;
                        custom_error = check_for_customerr(objColl[i].id)
                    }
                }
            }
        }
        if (document.getElementById('cforms_q' + no) && (document.getElementById('cforms_a' + no).value != hex_md5(encodeURI(document.getElementById('cforms_q' + no).value.toLowerCase())))) {
            document.getElementById('cforms_q' + no).className = "secinput cf_error";
            if (all_valid) {
                all_valid = false;
                code_err = true;
                if (!last_one) last_one = 'cforms_q' + no
            }
            custom_error = check_for_customerr('cforms_q' + no)
        }
        if (document.getElementById('cforms_captcha' + no)) {
            var read_cookie = readcookie(no);
            var cookie_part = read_cookie.split('+');
            a = cookie_part[1];
            b = document.getElementById('cforms_captcha' + no).value;
            if (cookie_part[0] == 'i') b = b.toLowerCase();
            b = hex_md5(b);
            if (a != b) {
                document.getElementById('cforms_captcha' + no).className = "secinput cf_error";
                if (all_valid) {
                    all_valid = false;
                    code_err = true;
                    if (!last_one) last_one = 'cforms_captcha' + no
                }
                custom_error = check_for_customerr('cforms_captcha' + no)
            }
        }
        if (show_err_ins == 'y') write_customerr();
        if (last_one != '' && jump_to_err == 'y') {
            location.href = '#' + last_one;
            document.getElementById(last_one).focus()
        }
        if (all_valid && upload) {
            document.getElementById('sendbutton' + no).style.cursor = "progress";
            return true
        } else if (all_valid) {
            document.getElementById('sendbutton' + no).style.cursor = "progress";
            document.getElementById('sendbutton' + no).disabled = true;
            cforms_submitcomment(no)
        }
        if (!all_valid && !code_err) {
            call_err(no, document.getElementById('cf_failure' + no), custom_error, 1);
            return false
        }
        if (!all_valid) {
            call_err(no, document.getElementById('cf_codeerr' + no), custom_error, 1);
            return false
        }
        return false
    } else return true;
    function check_for_customerr(id) {
        parent_el = document.getElementById(id).parentNode;
        if (show_err_li == 'y') parent_el.className = "cf_li_err";
        if (all_custom_error[id] && (gotone = all_custom_error[id]) != '') {
            if (show_err_ins == 'y') {
                insert_err_p[insert_err_count] = parent_el.id;
                ul = document.createElement('UL');
                li = document.createElement('LI');
                err = document.createTextNode('');
                li.innerHTML = stripslashes(gotone);
                cl = document.createAttribute('class');
                cl.nodeValue = 'cf_li_text_err';
                ul.appendChild(li);
                ul.setAttributeNode(cl);
                insert_err[insert_err_count++] = ul
            }
            if (parent_el.id != '') return custom_error + '<li><a href="#' + parent_el.id + '">' + gotone + ' &raquo;</li></a>';
            else return custom_error + '<li>' + gotone + '</li>'
        } else return custom_error
    }
    function write_customerr() {
        for (n = 0; n < insert_err_p.length; n++) {
            if (document.getElementById(insert_err_p[n])) document.getElementById(insert_err_p[n]).insertBefore(insert_err[n], document.getElementById(insert_err_p[n]).firstChild)
        }
    }
}
function stripslashes(str) {
    str = str.replace(/\\'/g, '\'');
    str = str.replace(/\\"/g, '"');
    str = str.replace(/\\\\/g, '\\'); //'
    str = str.replace(/\\0/g, '\0');
    return str
}


function doInnerXHTML(elementId, stringXHTML, stringDOM) {
    try {
        if (document.getElementById(elementId + 'a')) document.getElementById(elementId + 'a').innerHTML = stringXHTML;
        if (document.getElementById(elementId + 'b')) document.getElementById(elementId + 'b').innerHTML = stringXHTML;
        return true
    } catch(ee) {
        return false
    }
}
function cforms_submitcomment(no) {
    var regexp = new RegExp('[$][#][$]', ['g']);
    var prefix = '$#$';
    if (no == '') params = '1';
    else params = no;
    objColl = document.getElementById('cforms' + no + 'form').getElementsByTagName('*');
    for (var i = 0,
    j = objColl.length; i < j; i++) {
        fld = objColl[i].nodeName.toLowerCase();
        typ = objColl[i].type;
        if (fld == "input" || fld == "textarea" || fld == "select") {
            if (typ == "checkbox") {
                if (objColl[i].name.match(/\[\]/)) {
                    group = '';
                    while (i < j && isParentChkBoxGroup(objColl[i])) {
                        if (objColl[i].type == 'checkbox' && objColl[i].name.match(/\[\]/) && objColl[i].checked) {
                            group = group + objColl[i].value + ','
                        }
                        i++
                    }
                    if (group.length > 1) params = params + prefix + group.substring(0, group.length - 1);
                    else params = params + prefix + "-"
                } else params = params + prefix + (objColl[i].checked ? ((objColl[i].value != "") ? objColl[i].value: "X") : "-")
            } else if (typ == "radio") {
                group = objColl[i].checked ? ((objColl[i].value != "") ? objColl[i].value: "X") : '';
                while (i < j && isParentChkBoxGroup(objColl[i + 1])) {
                    if (objColl[i + 1].type == 'radio' && objColl[i + 1].checked) {
                        group = group + ',' + objColl[i + 1].value
                    }
                    i++
                }
                if (group.charAt(0) == ',') params = params + prefix + group.substring(1, group.length);
                else params = params + prefix + group
            } else if (typ == "select-multiple") {
                all_child_obj = '';
                for (z = 0; z < objColl[i].childNodes.length; z++) {
                    if (objColl[i].childNodes[z].nodeName.toLowerCase() == 'option' && objColl[i].childNodes[z].selected) {
                        all_child_obj = all_child_obj + objColl[i].childNodes[z].value.replace(regexp, '$') + ','
                    }
                }
                params = params + prefix + all_child_obj.substring(0, all_child_obj.length - 1)
            } else if (typ == "hidden" && objColl[i].name.match(/comment_post_ID/)) {
                params = params + '+++' + objColl[i].value
            } else if (typ == "hidden" && objColl[i].name.match(/cforms_pl/)) {
                params = params + '+++' + objColl[i].value
            } else if (typ == "hidden" && objColl[i].className.match(/cfhidden/)) {
                params = params + prefix + objColl[i].value
            } else if (typ != "hidden" && typ != "submit" && typ != "radio") {
                params = params + prefix + objColl[i].value.replace(regexp, '$')
            }
        }
    }
    if (document.getElementById('cforms' + no + 'form').action.match('lib_WPcomment.php')) params = params + '***';
    x_cforms_submitcomment(params, cforms_setsuccessmessage)
}
function isParentChkBoxGroup(el) {
    while (el.parentNode) {
        if (el.parentNode.className == 'cf-box-group') return true;
        else el = el.parentNode
    }
    return false
}
function cforms_setsuccessmessage(message) {
    hide = false;
    if (message.indexOf('*$#') == -1 && message.match(/http/)) {
        location.href = message;
        return
    } else if (message.match(/---/)) {
        result = " failure";
        end = message.indexOf('|')
    } else if (message.match(/!!!/)) {
        result = " mailerr";
        end = message.indexOf('|')
    } else if (message.match(/~~~/)) {
        result = "success";
        end = message.indexOf('|');
        hide = true
    } else {
        result = "success";
        end = message.length
    }
    var offset = message.indexOf('*$#');
    var no = message.substring(0, offset);
    var pop = message.charAt(offset + 3);
    if (no == '1') no = '';
    document.getElementById('cforms' + no + 'form').reset();
    document.getElementById('sendbutton' + no).style.cursor = "auto";
    document.getElementById('sendbutton' + no).disabled = false;
    stringXHTML = message.substring(offset + 4, end);
    if (stringXHTML.match(/\$#\$/)) {
        newcomment = stringXHTML.split('$#$');
        commentParent = newcomment[0];
        newcommentText = newcomment[1];
        stringXHTML = newcomment[2];
        if (document.getElementById(commentParent)) {
            var alt = '';
            var allLi = document.getElementById(commentParent).childNodes.length - 1;
            for (i = allLi; i >= 0; i--) {
                var elLi = document.getElementById(commentParent).childNodes[i];
                if (elLi.nodeType != '3' && elLi.tagName.toLowerCase() == 'li') {
                    if (elLi.className.match(/alt/)) alt = 'alt';
                    i = -1
                }
            }
            if (alt == 'alt') newcommentText = newcommentText.replace('class="alt"', '');
            document.getElementById(commentParent).innerHTML = document.getElementById(commentParent).innerHTML + newcommentText;
            if (window.AjaxEditComments) AjaxEditComments.init()
        }
        var dEl = newcommentText.match(/edit-comment-(user|admin)-link(s|-)[^" ]+/); //"
        if (dEl != null && dEl[0] != '' && document.getElementById(dEl[0])) {
            document.getElementById(dEl[0]).style.display = 'block'
        }
    }
    isA = false;
    ucm = (parseInt(no) > 1) ? ' ' + result + no: '';
    if (document.getElementById('usermessage' + no + 'a')) {
        document.getElementById('usermessage' + no + 'a').className = "cf_info " + result + ucm;
        isA = true
    }
    if (document.getElementById('usermessage' + no + 'b') && !(hide && isA)) document.getElementById('usermessage' + no + 'b').className = "cf_info " + result + ucm;
    doInnerXHTML('usermessage' + no, stringXHTML, '');
    if (hide) {
        document.getElementById('cforms' + no + 'form').style.display = 'none';
        document.getElementById('ll' + no).style.display = 'none';
        location.href = '#usermessage' + no + 'a'
    }
    if (pop == 'y') {
        stringXHTML = stringXHTML.replace(/<br.?\/>/g, '\r\n');
        stringXHTML = stringXHTML.replace(/(<.?strong>|<.?b>)/g, '*');
        stringXHTML = stringXHTML.replace(/(<([^>]+)>)/ig, '');
        alert(stringXHTML)
    }
}
var hexcase = 0;
var b64pad = "";
var chrsz = 8;
function hex_md5(s) {
    return binl2hex(core_md5(str2binl(s), s.length * chrsz))
}
function b64_md5(s) {
    return binl2b64(core_md5(str2binl(s), s.length * chrsz))
}
function str_md5(s) {
    return binl2str(core_md5(str2binl(s), s.length * chrsz))
}
function hex_hmac_md5(key, data) {
    return binl2hex(core_hmac_md5(key, data))
}
function b64_hmac_md5(key, data) {
    return binl2b64(core_hmac_md5(key, data))
}
function str_hmac_md5(key, data) {
    return binl2str(core_hmac_md5(key, data))
}
function md5_vm_test() {
    return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}
function core_md5(x, len) {
    x[len >> 5] |= 0x80 << ((len) % 32);
    x[(((len + 64) >>> 9) << 4) + 14] = len;
    var a = 1732584193;
    var b = -271733879;
    var c = -1732584194;
    var d = 271733878;
    for (var i = 0; i < x.length; i += 16) {
        var olda = a;
        var oldb = b;
        var oldc = c;
        var oldd = d;
        a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
        d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
        c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
        b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
        a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
        d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
        c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
        b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
        a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
        d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
        c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
        b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
        a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
        d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
        c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
        b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
        a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
        d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
        c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
        b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302);
        a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
        d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
        c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
        b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
        a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
        d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
        c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
        b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
        a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
        d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
        c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
        b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
        a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
        d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
        c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
        b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
        a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
        d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
        c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
        b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
        a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
        d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222);
        c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
        b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
        a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
        d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
        c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
        b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
        a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844);
        d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
        c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
        b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
        a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
        d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
        c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
        b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
        a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
        d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
        c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
        b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
        a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
        d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
        c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
        b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
        a = safe_add(a, olda);
        b = safe_add(b, oldb);
        c = safe_add(c, oldc);
        d = safe_add(d, oldd)
    }
    return Array(a, b, c, d)
}
function md5_cmn(q, a, b, x, s, t) {
    return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function md5_ff(a, b, c, d, x, s, t) {
    return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function md5_gg(a, b, c, d, x, s, t) {
    return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function md5_hh(a, b, c, d, x, s, t) {
    return md5_cmn(b ^ c ^ d, a, b, x, s, t)
}
function md5_ii(a, b, c, d, x, s, t) {
    return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
}
function core_hmac_md5(key, data) {
    var bkey = str2binl(key);
    if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);
    var ipad = Array(16),
    opad = Array(16);
    for (var i = 0; i < 16; i++) {
        ipad[i] = bkey[i] ^ 0x36363636;
        opad[i] = bkey[i] ^ 0x5C5C5C5C
    }
    var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
    return core_md5(opad.concat(hash), 512 + 128)
}
function safe_add(x, y) {
    var lsw = (x & 0xFFFF) + (y & 0xFFFF);
    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
    return (msw << 16) | (lsw & 0xFFFF)
}
function bit_rol(num, cnt) {
    return (num << cnt) | (num >>> (32 - cnt))
}
function str2binl(str) {
    var bin = Array();
    var mask = (1 << chrsz) - 1;
    for (var i = 0; i < str.length * chrsz; i += chrsz) bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
    return bin
}
function binl2str(bin) {
    var str = "";
    var mask = (1 << chrsz) - 1;
    for (var i = 0; i < bin.length * 32; i += chrsz) str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask);
    return str
}
function binl2hex(binarray) {
    var hex_tab = hexcase ? "0123456789ABCDEF": "0123456789abcdef";
    var str = "";
    for (var i = 0; i < binarray.length * 4; i++) {
        str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF)
    }
    return str
}
function binl2b64(binarray) {
    var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var str = "";
    for (var i = 0; i < binarray.length * 4; i += 3) {
        var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
        for (var j = 0; j < 4; j++) {
            if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
            else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F)
        }
    }
    return str
}
function readcookie(no) {
    var nameEQ = "turing_string_" + no + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length, c.length))
    }
    return ''
}