var jevix_cgi = '/cgi-bin/jevix.cgi'
var confData = '';
var confDataDefault = 'lineBreaks=1&dashes=1&dots=1&redundantSpaces=1&edgeSpaces=1&multiSpaces=1&nbsp=1&compositeWordsLength=10&quotes=1&misc=1&isHTML=1&tagsAllow=&tagsDeny=&tagLf=1&qaType=0&qbType=1&codeMode=2&tagNames=0&tagAttributes=0&tagQuoteValues=0&links=1';
var undoText = '';
var tid;
document.onkeydown = whatsup;

var maxlen = 20000;
var msg_timeout = 'Время ожидания ответа сервера истекло. Возможно, произошла ошибка.';
var msg_overflow = 'Текст слишком велик! Чтобы избежать чрезмерной нагрузки на сервер, длина текста не должна превышать ' + maxlen + ' символов. Воспользоваться средством на полную катушку вы можете на своих мощностях, загрузив туда исходный код.';
var msg_visError = 'Ошибка! Результат преобразования отобразить не удалось.';
var msg_httpMode = 'В режиме получения исходный данных с внешнего ресурса визуализация результата не производится.';

function swSetup(cancel) {
    if(document.getElementById('setupDiv').style.display == 'none') {
        initForm('confForm', confData);
        MoveTo('setupDiv', getAbsLeft('setupButton') - 550, 30);
        document.getElementById('setupDiv').style.display = 'block';
    } else {
        document.getElementById('setupDiv').style.display = 'none';
        if(!cancel) saveConfig();
    }

    return false;
}

function saveConfig() {
    confData = Form.serialize('confForm');

    var expireDate = new Date;

    expireDate.setMonth(expireDate.getMonth() + 12);
    document.cookie = "config=" + confData +";expires=" + expireDate.toGMTString();
}

function restoreConfig() {
    confData = getCookie('config');
    if(!confData) confData = confDataDefault;
}

function initForm(formName, dump) {
    if(!dump) return;

    var pairs = dump.split('&');
    var state = Array();

    for (var i=0; i<pairs.length; i++) {
        var key = pairs[i].split('=')[0];
        var value = pairs[i].split('=')[1];
        state[key] = value;
    }

    var elements = Form.getElements($(formName));

    for(var i=0; i<elements.length; i++) {
        var element = elements[i].name;
	if(state[element]) {
            switch (document.forms[formName][element].type.toLowerCase()) {
                case 'checkbox':
                    document.forms[formName][element].checked = state[element] ? true : false;
                    break;
                case 'text':
                case 'password':
                    document.forms[formName][element].value = unescape(state[element]);
                break;
                case 'select':
                case 'select-one':
                    document.forms[formName][element].selectedIndex = state[element];
            }
	}
    }
}

function rock() {
    var formData = Form.serialize('textForm');
    if(confData) confData = '&' + confData;

    if(document.getElementById('text').value.length > maxlen) {
        alert(msg_everflow);
    } else {
        document.getElementById('progress').style.visibility = "visible";
        document.getElementById('submitButton').disabled = true;
        var r = new Ajax.Request(jevix_cgi, {parameters:formData + confData, onSuccess:ajax_impose_ok, onFailure:ajax_impose_error});
        // Starting timer
        tid = setTimeout("timeout()", 8000);
    }

    return false;
}

function timeout() {
    document.getElementById('progress').style.visibility = "hidden";
    document.getElementById('submitButton').disabled = false;    

    alert(msg_timeout);
}

function newsletter() {
    var email = document.getElementById('email').value;

    if(email != '') {
        email = "email=" + email;
        document.getElementById('newsletterSubmit').disabled = true;
        var r = new Ajax.Request('/cgi-bin/jevix_newsletter.cgi', {parameters:email, onSuccess:ajax_newsletter_ok, onFailure:ajax_newsletter_error});
    }
}

function undo() {
   if(undoText == '') return false;

   document.forms.textForm.text.value = undoText;
   document.getElementById('previewDiv').innerHTML = undoText;
   document.getElementById('undoButton').disabled = true;
   undoText = '';

   return false;
}

function whatsup(e) {
    var code;
    var isIE = document.all;
    var event = isIE ? event : e;

    if(!event) var event = window.event;

    if (event.keyCode) code = event.keyCode; else if (event.which) code = event.which;
    if ((code == 8) && (event.altKey == true)) undo();
    if ((code == 13) && (event.ctrlKey == true)) rock();
}

function MoveTo(obj, x, y) {
    tgt = document.getElementById(obj);

    tgt.style.left = x;
    tgt.style.top = y;

    return false;  
}

function getAbsLeft(el) {
    obj = document.getElementById(el);
    var curleft = 0;

    if(obj.offsetParent)
        while(1) {
            curleft += obj.offsetLeft;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;

    return curleft;
}


function getAbsTop(el) {
    obj = document.getElementById(el);
    var curtop = 0;

    if(obj.offsetParent)
        while(1) {
            curtop += obj.offsetTop;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;

    return curtop;
}

function getCookie(name) {
    var prefix = name + "=";
    var cookieStartIndex = document.cookie.indexOf(prefix);
    if (cookieStartIndex == -1) return null;
    var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
    if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
    return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}