﻿if (typeof (SEO) == 'undefined') {
    var SEO = new Object();
}

SEO.Export = function() { }

SEO.Export.submitAsync = function(params) {
    var args = null;
    var result = null;
    var onComplete = null;
    var request = SEO.Export._getRequestObject();
    var url = 'Default.aspx?cmd=ExportResults&cmdOutput=json';

    if (!params) {
        params = {};
    }

    onComplete = params.onComplete || function() { };

    if (params.pageID) {
        url += '&ID=' + params.pageID;
    }

    if (params.paragraphID) {
        url += '&PID=' + params.paragraphID;
    }

    if (request && params.email) {
        args = SEO.Export._appendParam(args, 'OptimizeSettings_Email', params.email);

        if (params.url) {
            args = SEO.Export._appendParam(args, 'OptimizeSettings_Url', params.url);
        }

        if (params.keywords && params.keywords.length > 0) {
            for (var i = 0; i < params.keywords.length; i++) {
                args = SEO.Export._appendParam(args, 'OptimizePhrase_' + i, params.keywords[i]);
            }
        }

        if (params.previousState && params.previousState.length > 0) {
            for (var i = 0; i < params.previousState.length; i++) {
                args = SEO.Export._appendParam(args, 'OptimizeElement_' + params.previousState[i].id +
                    '_Original', params.previousState[i].value);
            }
        }

        if (params.currentState && params.currentState.length > 0) {
            for (var i = 0; i < params.currentState.length; i++) {
                args = SEO.Export._appendParam(args, 'OptimizeElement_' + params.currentState[i].id, params.currentState[i].value);
            }
        }

        request.onreadystatechange = function() {
            if (request.readyState == 4) {
                if (request.responseText) {
                    try {
                        result = eval('(' + request.responseText + ')');
                    } catch (ex) { }
                }

                if (!result) {
                    result = { success: false };
                } else if (typeof (result.success) == 'undefined') {
                    result.success = false;
                }

                onComplete(result);
            }
        }

        request.open('post', url, true);
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        request.send(args);
    } else {
        onComplete({ success: false });
    }
}

SEO.Export.submitForm = function(params) {
    var url = 'Default.aspx?cmd=ExportResults&cmdOutput=json';

    if (!params) {
        params = {};
    }

    if (params.pageID) {
        url += '&ID=' + params.pageID;
    }

    if (params.paragraphID) {
        url += '&PID=' + params.paragraphID;
    }

    if (params.form) {
        params.form.action = url;
        params.form.submit();
    }
}

SEO.Export.isValidEmail = function(email) {
    var ret = false;
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;

    if (email) {
        ret = reg.test(email);
    }

    return ret;
}

SEO.Export.setElementIsEnabled = function(element, isEnabled) {
    var elm = SEO.Export._obj(element);

    if (elm) {
        elm.disabled = !isEnabled;
    }
}

SEO.Export.getFields = function(form, prefix, suffix) {
    var ret = [];
    var elm = null;
    var fieldID = '';
    var prefixMatch = false, suffixMatch;

    if (prefix) {
        prefix = prefix + '_';
    }

    if (suffix) {
        suffix = '_' + suffix;
    }

    if (form) {
        if (typeof (form.toLowerCase) != 'undefined') {
            form = document.getElementById(form);
        }
    }

    if (form) {
        for (var i = 0; i < form.length; i++) {
            elm = form[i];

            if (!prefix) {
                prefixMatch = true;
            } else {
                prefixMatch = elm.id.indexOf(prefix) == 0;
            }

            if (!suffix) {
                suffixMatch = true;
            } else {
                suffixMatch = elm.id.indexOf(suffix) ==
                    elm.id.length - suffix.length;
            }

            if (prefixMatch && suffixMatch) {
                fieldID = elm.id;

                if (prefix) {
                    fieldID = fieldID.replace(prefix, '');
                }

                if (suffix) {
                    fieldID = fieldID.replace(suffix, '');
                }

                if (fieldID.indexOf('_') < 0) {
                    fieldID = parseInt(fieldID);
                    if (!isNaN(fieldID)) {
                        ret[ret.length] = {
                            id: fieldID,
                            value: elm.value
                        };
                    }
                }
            }
        }
    }

    return ret;
}

SEO.Export.getFieldValue = function(field) {
    var ret = '';

    if (field) {
        if (typeof (field.toLowerCase) != 'undefined') {
            field = document.getElementById(field);
        }
    }

    if (field) {
        ret = field.value;
        if (typeof (ret) == 'undefined') {
            ret = '';
        }
    }

    return ret;
}

SEO.Export.getValue = function(element) {
    var ret = '';
    var elm = SEO.Export._obj(element);

    if (elm) {
        ret = elm.value;
        if (typeof (ret) == 'undefined') {
            ret = '';
        }
    }

    return ret;
}

SEO.Export.getValues = function(form, prefix, suffix) {
    var ret = [];
    var fields = SEO.Export.getFields(form, prefix, suffix);

    if (fields && fields.length > 0) {
        for (var i = 0; i < fields.length; i++) {
            ret[ret.length] = fields[i].value;
        }
    }

    return ret;
}

SEO.Export._getRequestObject = function() {
    var ret = null;

    if (typeof (XMLHttpRequest) != 'undefined') {
        ret = new XMLHttpRequest();
    } else {
        try {
            ret = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (ex) { }
    }

    return ret;
}

SEO.Export._appendParam = function(currentResult, param, value) {
    var ret = '';

    if (currentResult) {
        ret = currentResult;
    }

    if (param) {
        if(ret.length > 0) {
            ret += '&';
        }
        
        ret += (param + '=' + encodeURIComponent(value));
    }

    return ret;
}

SEO.Export._obj = function(o) {
    var ret = o;

    if (ret) {
        if (typeof (ret.toLowerCase) != 'undefined') {
            ret = document.getElementById(ret);
        }
    }

    return ret;
}

