/*
 * Version 1.1.1
 * Last update 2007-09-26
 */
// Public Variables
var fieldsPrefix = '__f';
var SESSION_ID = Math.random().toString().replace('.', '');
//alert(SESSION_ID);
var language = 'el';
var searchArray = new Array();
var verifyAr = new Array();
//var parentVerifyAr = new Array();
var childVerifyAr = new Array();
var ajaxWaitMsg = '<small style="color:green;font-size:9px;text-decoration: blink;">Loading...</small>';

// Standard AJAX Functions //
function GetXmlHttpObject(){
    var xmlHttp = null;
    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
        if (xmlHttp.overrideMimeType) {
            // set type accordingly to anticipated content type
            //xmlHttp.overrideMimeType('text/xml');
            xmlHttp.overrideMimeType('text/html');
        }
    } 
    catch (e) {
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function openUrl(url, targetDivID){
    var xmlHttp;
    xmlHttp = GetXmlHttpObject();
    var target;
    if (targetDivID == '') 
        target = document.body;
    else 
        target = document.getElementById(targetDivID);
    if (xmlHttp == null) {
        alert("Your browser does not support AJAX!");
    }
    else {
        target.innerHTML = ajaxWaitMsg;
        url = encodeURI(url);
        xmlHttp.onreadystatechange = function(){
            ajaxResponse(xmlHttp, target);
        }
        xmlHttp.open("GET", url, true);
        xmlHttp.send(null);
    }
}

function urlPost(formName, url, targetDivID){
    var form = document.getElementById(formName);
    var parameters = '';
    for (i = 0; i < form.elements.length; i++) {
        if (parameters != '') 
            parameters += '&';
        parameters += form.elements[i].name;
        parameters += '=';
        parameters += encodeURIComponent(form.elements[i].value);
    }
    var xmlHttp;
    xmlHttp = GetXmlHttpObject();
    var target;
    if (targetDivID == '') 
        target = document.body
    else 
        target = document.getElementById(targetDivID);
    if (xmlHttp == null) {
        alert("Your browser does not support AJAX!");
    }
    else {
        target.innerHTML = ajaxWaitMsg;
        url = encodeURI(url);
        xmlHttp.onreadystatechange = function(){
            ajaxResponse(xmlHttp, target);
        }
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Content-length", parameters.length);
        xmlHttp.setRequestHeader("Connection", "close");
        xmlHttp.send(parameters);
    }
}

function urlPostNT(formName, url, readyFunc, readyFuncParams){
    var form = document.getElementById(formName);
    var parameters = '';
    for (var i = 0; i < form.elements.length; i++) {
        if (parameters != '') 
            parameters += '&';
        parameters += form.elements[i].name;
        parameters += '=';
        parameters += encodeURIComponent(form.elements[i].value);
    }
    var xmlHttp;
    xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
        alert("Your browser does not support AJAX!");
    }
    else {
        url = encodeURI(url);
        xmlHttp.onreadystatechange = function(){
            eval(readyFunc + '(xmlHttp, ' + readyFuncParams + ')');
        }
        xmlHttp.open("POST", url, true);
        xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Content-length", parameters.length);
        xmlHttp.setRequestHeader("Connection", "close");
        xmlHttp.send(parameters);
    }
}

function ajaxResponse(xmlHttp, target){
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        target.innerHTML = xmlDoc;
    }
}

function openUrlNT(url, readyFunc, readyFuncParams){
    var xmlHttp;
    xmlHttp = GetXmlHttpObject();
    if (xmlHttp == null) {
        alert("Your browser does not support AJAX!");
    }
    else {
        url = encodeURI(url);
        if (readyFuncParams) {
            xmlHttp.onreadystatechange = function(){
                eval(readyFunc + '(xmlHttp, ' + readyFuncParams + ')');
            }
        }
        else {
            xmlHttp.onreadystatechange = function(){
                eval(readyFunc + '(xmlHttp)');
            }
        }
        xmlHttp.open("GET", url, true);
        xmlHttp.send(null);
    }
}


// Special AJAX Ready State Handlers //


function tableFilter(xmlHttp){
    objShow('browser');
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        var ar = xmlDoc.split('\t');
        if (ar[1] == '0') {
            objHide('browser');
        }
        document.getElementById('infoFilter').value = ar[0];
        document.getElementById('infoTotalRecs').innerHTML = ar[1];
        document.getElementById('infoTotalPages').innerHTML = ar[2];
        document.getElementById('infoCurPage').innerHTML = ar[3];
        document.getElementById('tableListRecs').innerHTML = ar[4];
    }
    else {
        document.getElementById('infoFilter').value = '';
        document.getElementById('infoTotalRecs').innerHTML = ajaxWaitMsg;
        document.getElementById('infoTotalPages').innerHTML = ajaxWaitMsg;
        document.getElementById('infoCurPage').innerHTML = ajaxWaitMsg;
        document.getElementById('tableListRecs').innerHTML = ajaxWaitMsg;
    }
}

function tableOrder(xmlHttp, tableId){
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        var ar = xmlDoc.split('\t');
        //document.getElementById('infoOrder').innerHTML = ar[0];
        document.getElementById('infoOrder').value = ar[0];
        document.getElementById('infoCurPage').innerHTML = ar[1];
        document.getElementById('tableListRecs').innerHTML = ar[2];
    }
    else {
        //document.getElementById('infoOrder').innerHTML = ajaxWaitMsg;
        document.getElementById('infoOrder').value = '';
        document.getElementById('infoCurPage').innerHTML = ajaxWaitMsg;
        document.getElementById('tableListRecs').innerHTML = ajaxWaitMsg;
    }
}

function tableBrowser(xmlHttp, tableId){
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        var ar = xmlDoc.split('\t');
        document.getElementById('infoTotalRecs').innerHTML = ar[0];
        document.getElementById('infoTotalPages').innerHTML = ar[1];
        document.getElementById('infoCurPage').innerHTML = ar[2];
        document.getElementById('tableListRecs').innerHTML = ar[3];
    }
    else {
        document.getElementById('infoTotalRecs').innerHTML = ajaxWaitMsg;
        document.getElementById('infoTotalPages').innerHTML = ajaxWaitMsg;
        document.getElementById('infoCurPage').innerHTML = ajaxWaitMsg;
        document.getElementById('tableListRecs').innerHTML = ajaxWaitMsg;
    }
}

function recordSave(xmlHttp){
    var target;
    var td = targetDiv();
    if (td == '') 
        target = document.body;
    else 
        target = document.getElementById(td);
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        var ar = xmlDoc.split('\t');
        target.innerHTML = ar[0];
    }
    else {
        target.innerHTML = ajaxWaitMsg;
    }
}


// Cookies Functions //

function setCookie(c_name, value, expiredays){
    var exdate = new Date()
    exdate.setDate(exdate.getDate() + expiredays)
    document.cookie = c_name + "=" + escape(value) +
    ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString())
}

function getCookie(c_name){
    if (document.cookie.length > 0) {
        var c_start = document.cookie.indexOf(c_name + "=")
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1
            var c_end = document.cookie.indexOf(";", c_start)
            if (c_end == -1) 
                c_end = document.cookie.length
            return unescape(document.cookie.substring(c_start, c_end))
        }
    }
    return ""
}

// Validation Functions //

function escapeForm(formName){
    var form = document.getElementById(formName);
    for (var i = 0; i < form.length; i++) {
        form.elements[i].value = escape(form.elements[i].value);
    }
}

function trim(string){
    return (string.replace(/^\s+|\s+$/g, ''));
}

function trimComma(str){
    for (var i = str.length - 1; str.charAt(i) == "," || str.charAt(i) == " "; i--) {
        str = str.substring(0, i);
    }
    return str;
}

function isEmpty(string){
    if (string == null) 
        return false;
    string = trim(string);
    return string.length == 0;
}

function isOverMaxLength(string, maxLength){
    string = trim(string);
    return string.length > maxLength;
}

function isUnderMinLength(string, minLength){
    string = trim(string);
    return string.length < minLength;
}

function isDecimal(string){
    string = trim(string);
    var ok;
    if (language == 'el') 
        ok = /^\d+\,\d+$/.test(string);
    else 
        /^\d+\.\d+$/.test(string);
    return ok;
    
}

function isInteger(string){
    string = trim(string);
    if (string.substring(0, 1) == "-") {
        string = string.substring(1);
    }
    return /^\d/.test(string);
    
}

function isEmail(string){
    if (!string) 
        return true;
    string = trim(string);
    return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(string));
}

function daysInFebruary(year){
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}

function DaysArray(n){
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i == 4 || i == 6 || i == 9 || i == 11) {
            this[i] = 30
        }
        if (i == 2) {
            this[i] = 29
        }
    }
    return this
}


function isDate(fld){
    var blankPos = fld.indexOf(' ');
    if (blankPos > 0) {
        try {
            var tmStr = fld.substring(blankPos + 1);
            var dtStr = fld.substring(0, blankPos);
            var timeParts = tmStr.split(':');
            if (timeParts.length < 2) {
                return false;
            }
            var h = parseInt(timeParts[0]);
            var m = parseInt(timeParts[1]);
            if (!timeParts[2]) 
                timeParts[2] = '00';
            var s = parseInt(timeParts[2]);
            if (h > 24 || m > 60 || s > 60) {
                return false;
            }
        } 
        catch (e) {
            return false;
        }
    }
    else {
        var dtStr = fld;
    }
    if (language == 'el') {
        if (dtStr.indexOf('-') >= 0) 
            var dtCh = "-";
        else 
            if (dtStr.indexOf('/') >= 0) 
                var dtCh = "/";
            else {
                return false;
            }
        var pos1 = dtStr.indexOf(dtCh);
        var pos2 = dtStr.indexOf(dtCh, pos1 + 1);
        var str1 = dtStr.substring(0, pos1);
        var str2 = dtStr.substring(pos1 + 1, pos2);
        var str3 = dtStr.substring(pos2 + 1);
        var strDay = str1;
        var strMonth = str2;
        var strYear = str3;
        dtStr = strMonth + dtCh + strDay + dtCh + strYear;
    }
    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    if ((dtStr.match(RegExPattern)) && (dtStr != '')) {
        return true;
    }
    else {
        return false;
    }
}


var isIE = (window.navigator.userAgent.indexOf("MSIE") > 0);
if (typeof HTMLElement != "undefined" && !HTMLElement.prototype.insertAdjacentElement) {
    HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode){
        if (where == 'BeforeBegin') {
            this.parentNode.insertBefore(parsedNode, this);
        }
        else 
            if (where == 'AfterBegin') {
                this.insertBefore(parsedNode, this.firstChild);
            }
            else 
                if (where == 'BeforeEnd') {
                    this.appendChild(parsedNode);
                }
                else 
                    if (where == 'AfterEnd') {
                        if (this.nextSibling) 
                            this.parentNode.insertBefore(parsedNode, this.nextSibling);
                        else 
                            this.parentNode.appendChild(parsedNode);
                    }
                    else 
                        if (where == 'Body') {
                            document.body.appendChild(parsedNode);
                        }
    }
    
    
    HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr){
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML = r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where, parsedHTML)
    }
    
    HTMLElement.prototype.insertAdjacentText = function(where, txtStr){
        var parsedText = document.createTextNode(txtStr);
        this.insertAdjacentElement(where, parsedText)
    }
}

// Object visibility Functions //


function objHide(obj){
    if (!obj) {
        alert('Error on objHide function. No obj passed');
        return;
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    if (document.layers) {
        o.visibility = 'hide';
        o.display = 'none';
    }
    else 
        if (document.all) {
            o.style.visibility = 'hidden';
            o.style.display = 'none';
        }
        else 
            if (document.getElementById) {
                o.style.visibility = 'hidden';
                o.style.display = 'none';
            }
}

function objShow(obj){
    if (!obj) {
        alert('Error on objShow function. No obj passed');
        return;
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    if (document.layers) {
        o.visibility = 'show';
        o.display = 'block';
    }
    else 
        if (document.all) {
            o.style.visibility = 'visible';
            o.style.display = 'block';
        }
        else 
            if (document.getElementById) {
                o.style.visibility = 'visible';
                o.style.display = 'block';
            }
}

function objToggle(obj){
    if (!obj) {
        alert('Error on objToggle function. No obj passed');
        return;
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    if (objIsVisible(obj)) 
        objHide(obj);
    else 
        objShow(obj);
}

function objIsVisible(obj){
    if (!obj) 
        return false;
    if (document.layers) {
        if (obj.visibility == 'hide') 
            return false
    }
    else 
        if (document.all) {
            if (obj.style.visibility == 'hidden') 
                return false
        }
        else 
            if (document.getElementById) {
                if (obj.style.visibility == 'hidden') 
                    return false
            }
    return true
}

function setHTML(obj, html){
    if (!obj) {
        alert('Error on setHTML function. No obj passed');
        return
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    o.innerHTML = html;
}

function getHTML(obj, html){
    if (!obj) {
        alert('Error on getHTML function. No obj passed');
        return ''
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    return o.innerHTML;
}

function setValue(obj, value){
    if (!obj) {
        alert('Error on setValue function. No obj passed');
        return;
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    o.value = value;
}

function getValue(obj){
    if (!obj) {
        alert('Error on getValue function. No obj passed');
        return '';
    }
    if (typeof(obj) != 'object') 
        var o = document.getElementById(obj);
    else 
        var o = obj;
    return o.value;
}

// Search Window

//function openSearchWin(sourceTableId, sourceFieldId, targetForm, targetField) {
//    var w = window.open('crm.py?script=manager&do=TableList&tableId=' + sourceTableId +
//                            '&sourceFieldId=' + sourceFieldId +
//                            '&targetForm=' + targetForm +
//                            '&targetField=' + targetField +
//                            '&listType=Search',
//                            'searchWindow_' + sourceTableId,
//    'toolbar=0, scrollbars=1, status=0, resizable=1, width=500, height=500, top=0, left=0');
//    w.focus();
//    return w
//}

function popup(uri, windowName){
    var scW = parseInt(screen.availWidth ? screen.availWidth : screen.width);
    var scH = parseInt(screen.availHeight ? screen.availHeight : screen.height);
    var width = 10;
    var height = 10;
    var left = Math.round((scW - width) / 2);
    var top = Math.round((scH - height) / 2);
    var w = window.open(uri, windowName, 'toolbar=0, scrollbars=1, status=0, resizable=1, width=' + width +
    ', height=' +
    height +
    ', top=' +
    top +
    ', left=' +
    left);
    w.focus();
    return w
}

function popupResize(){
    var scW = parseInt(screen.availWidth ? screen.availWidth : screen.width);
    var scH = parseInt(screen.availHeight ? screen.availHeight : screen.height);
    var newWidth, newHeight;
    var obj = document.body;
    var mainOW = obj.offsetWidth;
    var mainSW = obj.scrollWidth;
    var mainOH = obj.offsetHeight;
    var mainSH = obj.scrollHeight;
    newWidth = 890;
    newHeight = 600;
    var left, top, w, h;
    for (var i = 10; i > 0; i--) {
        w = parseInt(newWidth / i);
        h = parseInt(newHeight / i);
        window.resizeTo(w, h);
        left = Math.round((scW - w) / 2);
        top = Math.round((scH - h) / 2);
        window.moveTo(left, top);
    }
    var left = Math.round((scW - newWidth) / 2);
    var top = Math.round((scH - newHeight) / 2);
    window.moveTo(left, top);
}

function targetDiv(){
    if (opener) {
        return '';
    }
    else {
        return 'ajax_main';
    }
}

function setTargetFields(fieldsPrefix, targetsArray, valuesArray, form, toolTip){
    for (var i = 0; i < targetsArray.length; i++) {
        var field = eval('form.' + fieldsPrefix + targetsArray[i]);
        field.value = valuesArray[i];
    }
    //var tt = opener.document.getElementById(fieldsPrefix + targetsArray[0] + '_toolTip');
    //tt.innerHTML = toolTip;
}


function updateTotalsRowValues(form){
    if (!form.totalRowFields) 
        return;
    var t = form.totalRowFields.value;
    if (t == '') 
        return;
    var fIDs = t.split(',');
    
    var t = form.rowsList.value;
    t = t.substring(0, t.length - 1);
    if (t == '') {
        for (var i = 0; i < fIDs.length; i++) {
            var s = '';
            eval('form.totalsRow_' + fieldsPrefix + fIDs[i] + '.value = s');
        }
        return;
    }
    var rows = t.split(',');
    var decPre = 0;
    for (var i = 0; i < fIDs.length; i++) {
        var s = '';
        var total = 0.00;
        for (var j = 0; j < rows.length; j++) {
            var x = eval('form.row_' + rows[j] + '_' + fieldsPrefix + fIDs[i] + '.value');
            x = x.replace(',', '.');
            var temp = x.indexOf('.');
            if (temp > -1 && x.length - temp - 1 > decPre) 
                decPre = x.length - temp - 1;
            total += parseFloat(x);
        }
        if (!isNaN(total)) {
            s = total.toFixed(decPre).toString();
        }
        if (language == 'el') 
            s = s.replace('.', ',');
        eval('form.totalsRow_' + fieldsPrefix + fIDs[i] + '.value = s');
    }
}

function verifyField(field, fieldRow){
    var _required = fieldRow[0];
    var _minLen = fieldRow[1];
    var _integer = fieldRow[2];
    var _decimal = fieldRow[3];
    var _date = fieldRow[4];
    var _email = fieldRow[5];
    var _minValue = fieldRow[6];
    var _maxValue = fieldRow[7];
    if (_required == 0 && isEmpty(field.value)) {
        return true;
    }
    else 
        if (_required == 1 && isEmpty(field.value) == true) {
            return false;
        }
        else 
            if (_minLen != 0 && isUnderMinLength(field.value, fieldRow[1]) == true) {
                return false;
            }
            else 
                if (_integer == 1 && isInteger(field.value) == false) {
                    return false;
                }
                else 
                    if (_decimal == 1 && isDecimal(field.value) == false) {
                        return false;
                    }
                    else 
                        if (_date == 1 && isDate(field.value) == false) {
                            return false;
                        }
                        else 
                            if (_email == 1 && isEmail(field.value) == false) {
                                return false;
                            }
                            else 
                                if (_minValue != '' && (field.value < _minValue)) {
                                    return false;
                                }
                                else 
                                    if (_maxValue != '' && (field.value > _maxValue)) {
                                        return false;
                                    }
                                    else {
                                        return true;
                                    }
}

function visitAllFields(form){
    for (var i = 0; i < form.elements.length; i++) {
        try {
            form.elements[i].focus();
        } 
        catch (e) {
            continue;
        }
    }
}

function verify(formName, verifyAr){
    var form = document.getElementById(formName);
    visitAllFields(form);
    var errors = 0;
    var val = verifyAr.length;
    for (var i = 1; i < val; i++) {
        if (verifyAr[i] == undefined) 
            continue;
        field = document.getElementById(fieldsPrefix + i);
        errObj = document.getElementById('fieldError_' + fieldsPrefix + i);
        if (verifyField(field, verifyAr[i]) == false) {
            errors = 1;
            objShow(errObj);
        }
        else {
            objHide(errObj);
        }
    }
    if (errors != 0) {
        return false;
    }
    else {
        return true;
    }
}

function verifyChild(formName, verifyAr){
    var form = document.getElementById(formName);
    visitAllFields(form);
    var errors = 0;
    var rowsList = form.rowsList.value;
    rowsList = trimComma(rowsList);
    if (rowsList == '') 
        return true;
    var rowsAr = rowsList.split(',');
    var rowFields = form.rowFields.value;
    rowFields = trimComma(rowFields);
    var fieldsAr = rowFields.split(',');
    var cval = childVerifyAr.length;
    var totalRows = rowsAr.length;
    for (var r = 0; r < totalRows; r++) {
        for (var i = 1; i < cval; i++) {
            if (childVerifyAr[i] == undefined) 
                continue;
            var field = document.getElementById('row_' + rowsAr[r] + '_' + fieldsPrefix + i);
            var errObj = document.getElementById('row_' + rowsAr[r] + '_' + 'childFieldError_' + fieldsPrefix + i);
            if (verifyField(field, childVerifyAr[i]) == false) {
                errors = 1;
                objShow(errObj);
            }
            else {
                objHide(errObj);
            }
        }
    }
    if (errors != 0) {
        return false;
    }
    else {
        return true;
    }
}


/* xstooltip functions */
function xstooltip_findPosX(obj){
    var curleft = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
    else 
        if (obj.x) 
            curleft += obj.x;
    return curleft;
}

function xstooltip_findPosY(obj){
    var curtop = 0;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }
    else 
        if (obj.y) 
            curtop += obj.y;
    return curtop;
}

document.onmousemove = capture_mouse_position;
var mouse_x, mouse_y, mouse_xMax, mouse_yMax;
function capture_mouse_position(e){
    if (document.all) {
        mouse_x = event.clientX;
        mouse_y = event.clientY;
        mouse_xMax = document.body.clientWidth + document.body.scrollLeft + 20;
        mouse_yMax = document.body.clientHeight + document.body.scrollTop + 20;
    }
    else {
        mouse_x = e.pageX;
        mouse_y = e.pageY;
        mouse_xMax = window.innerWidth + window.pageXOffset;
        mouse_yMax = window.innerHeight + window.pageYOffset;
    }
}

function xstooltip_show(name, sourceTableId, sourceFieldsIds){
    var iv = document.getElementById(name + '_toolTip_key_value');
    var fi = document.getElementById(name);
    var it = document.getElementById(name + '_toolTip');
    if (it.style.visibility != 'hidden') 
        return;
    var value, oldvalue;
    if (name != 'filterValue0') {
        value = fi.value;
        oldvalue = iv.value;
        if (isEmpty(value)) 
            return;
        if (oldvalue != value) {
            document.getElementById(name + '_toolTip').innerHTML = ajaxWaitMsg;
            var url = 'crm.py?script=toolTipUpdate&sourceTableId=' + sourceTableId + '&sourceFieldsIds=' + sourceFieldsIds + '&value=' + value;
            openUrlNT(url, 'updateToolTip', '\'' + name + '\'');
        }
    }
    it.style.top = mouse_y + 'px';
    it.style.left = mouse_x + 'px';
    it.style.visibility = 'visible';
}

function updateToolTip(xmlHttp, name){
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        var res = xmlDoc.split('\t');
        if (res[0] == '0') {
            xstooltip_hide(name + '_toolTip');
            document.getElementById(name + '_toolTip_key_value').value = '';
            document.getElementById(name + '_toolTip').innerHTML = '';
            return;
        }
        document.getElementById(name + '_toolTip_key_value').value = res[1];
        document.getElementById(name + '_toolTip').innerHTML = res[2];
    }
}



function xstooltip_hide(id){
    var it = document.getElementById(id);
    it.style.visibility = 'hidden';
}


function shiftSpace_show(obj){
    if (obj.style.visibility != 'hidden') 
        return;
    obj.style.top = mouse_y + 'px';
    obj.style.left = mouse_x + 'px';
    //obj.style.visibility = 'visible';
    showObj(obj);
}

function shiftSpace_hide(obj){
    //obj.style.visibility = 'hidden';
    hideObj(obj);
}

function sleep(naptime){
    naptime = naptime * 1000;
    var sleeping = true;
    var now = new Date();
    var alarm;
    var startingMSeconds = now.getTime();
    var alarmMSeconds;
    while (sleeping) {
        alarm = new Date();
        alarmMSeconds = alarm.getTime();
        if (alarmMSeconds - startingMSeconds > naptime) {
            sleeping = false;
        }
    }
}

function changeCSS(theClass, element, value){
    var cssRules;
    if (document.all) {
        cssRules = 'rules';
    }
    else 
        if (document.getElementById) {
            cssRules = 'cssRules';
        }
    for (var S = 0; S < document.styleSheets.length; S++) {
        for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
            if (document.styleSheets[S][cssRules][R].selectorText == theClass) {
                document.styleSheets[S][cssRules][R].style[element] = value;
            }
        }
    }
}

function round(x, d){
    var m = 10;
    if (d == 2) 
        m = 100;
    else 
        if (d == 3) 
            m = 1000;
        else 
            if (d == 4) 
                m = 10000;
    var result = Math.round(x * m) / m;
    return result;
}

function getObjAll(obj){
    var s = '';
    for (var i in obj) {
        try {
            s += (i + ' ' + obj[i] + '<br>');
        } 
        catch (e) {
            continue
        }
    }
    return s;
}

function debug(s){
    var w = popup('', 'Debugger');
    w.document.write(s);
}

function startsWith(s, what){
    if (isEmpty(s)) 
        return false;
    if (isEmpty(what)) 
        return false;
    if (s.indexOf(what) == 0) {
        return true;
    }
    else {
        return false;
    }
}

function endsWith(s, what){
    if (isEmpty(s)) 
        return false;
    if (isEmpty(what)) 
        return false;
    if (s.substring(s.length - what.length) == what) {
        return true;
    }
    else {
        return false;
    }
}

function selectInputPart(obj, from, to){
    if (!to) 
        to = obj.value.length;
    if (isIE) {
        rng = obj.createTextRange();
        rng.moveStart("character", from);
        rng.moveEnd("character", to);
        rng.select();
    }
    else 
        if (obj.setSelectionRange) {
            obj.setSelectionRange(from, to);
        }
}

var focusedObj;
var searchedTableId;
var searchValues = new Array();
var searchInitLength = 0;
var lastSearchValueSelected = 1;
var searchIsChildField = false;

function handleKey(evt){
    evt = (evt) ? evt : window.event;
    if (evt.shiftKey && evt.keyCode == 32) {
        focusedObj.value = trim(focusedObj.value)
        var pName;
        if (searchIsChildField == false) {
            pName = 'field';
        }
        else {
            pName = 'childField';
        }
        searchValue = encodeURIComponent(focusedObj.value);
        var url = 'crm.py?script=tableSearch&tableId=' + searchedTableId + '&' + pName + '=' + focusedObj.name + '&value=' + searchValue;
        openUrlNT(url, 'proposeValues', '');
        return false;
    }
    else 
        if (evt.keyCode == 40) {
            if (lastSearchValueSelected < searchValues.length - 1) {
                lastSearchValueSelected += 1;
                focusedObj.value = searchValues[lastSearchValueSelected];
                selectInputPart(focusedObj, searchInitLength);
            }
            return false;
        }
        else 
            if (evt.keyCode == 38) {
                if (lastSearchValueSelected > 1) {
                    lastSearchValueSelected -= 1;
                    focusedObj.value = searchValues[lastSearchValueSelected];
                    selectInputPart(focusedObj, searchInitLength);
                }
                return false;
            }
    return true;
}

document.onmousedown = handleMouse;
var rightclick = false;
function handleMouse(evt){
    rightclick = false;
    evt = (evt) ? evt : window.event;
    if (evt.which) {
        rightclick = (evt.which == 3);
        if (rightclick) 
            return false;
    }
}

function proposeValues(xmlHttp){
    if (xmlHttp.readyState == 4) {
        var xmlDoc = xmlHttp.responseText;
        searchValues = xmlDoc.split('\t');
        lastSearchValueSelected = 0;
        if (searchValues[0] == '0') {
            return;
        }
        lastSearchValueSelected += 1;
        searchInitLength = focusedObj.value.length;
        focusedObj.value += searchValues[lastSearchValueSelected].substring(searchInitLength);
        selectInputPart(focusedObj, searchInitLength);
    }
}

function trapShiftSpace(obj, tableId, child){
    if (!child) {
        searchIsChildField = false;
    }
    else {
        if (child == true) {
            searchIsChildField = true;
        }
        else {
            searchIsChildField = false;
        }
    }
    document.onkeyup = handleKey;
    focusedObj = obj;
    searchedTableId = tableId;
}

function releaseShiftSpace(){
    document.onkeyup = '';
    focusedObj = '';
}


function resizeIFrame(id){
	/*
	 Resize iframe to fit contents
	 html code:
		 <iframe width="400" id="iframe" name="iframe" src="h2.html" frameborder="no" scrolling="no" frameborder="yes" onload="resizeIFrame('iframe');">
         </iframe>
	 */
    var moz = document.getElementById && !document.all;
    var mozHeightOffset = 20;
    document.getElementById(id).height = 100; // required for Moz bug, value can be "", null, or integer
    document.getElementById(id).height = window.frames[id].document.body.scrollHeight + (moz ? mozHeightOffset : 0);
}
