/**
 * set value to the element
 * parameters: elm=form name, itm=field name, val=value [, sbm=submit indicator (1=submit)]
 */ 
function setValue(elm, itm, val, sbm) {
    sbm = sbm == null ? 0 : sbm;
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;
    eval("form."+itm+".value = val");
    
    if (sbm){
        form.submit();
        return false;
    } else {
        return true;
    }
}

/**
 * set value to the element
 * parameters: id=element id, val=value [, frm=form name to submit its]
 */ 
function setIdValue(elm, val, frm) {
    if ($(elm)) $(elm).value = val;
    if ($(frm)){
        $(frm).submit();
        return false;
    } else {
        return true;
    }
}
/**
 *  set focus on the element
 */
function setFocus(elm, itm) {
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;
    eval("form."+itm+".focus()");
}

/**
 *  check password confirmation
 */
function confirmPassword(frm, itm, itm2, msg) {
    var form = document.getElementById(frm);
    if (!form)
        form = elm.form;
    var pass = '';
    var pass2 = '';
    eval("pass = form."+itm+".value");
    eval("pass2 = form."+itm2+".value");
    if (pass2 == pass){
        return true;
    } else {
        alert(msg);
        return false;
    }
}

/**
 *  check if selected item exist
 */
function checkSelected(frm, itm, msg) {
    var form = document.getElementById(frm);
    if (!form)
        form = elm.form;
    var idx = 0;
    eval("idx = form."+itm+".selectedIndex");
    if (idx > 0){
        return true;
    } else {
        alert(msg);
        return false;
    }
}

/**
 *  check email address
 */
function checkEmail(frm, itm, msg) {
    var form = document.getElementById(frm);
    if (!form)
        form = elm.form;
    eval("var fld = form."+itm);
    var suc = true;
    var str = new String(fld.value);
    if (str != ""){
        if (str.indexOf("@") == -1 || str.indexOf(".") == -1) {    
            alert(msg);
            fld.focus();
            suc = false;
        }
    }
    return suc;
}

/**
 *  check email subject
 */
function checkSubject(frm, itm, msg) {
    var form = document.getElementById(frm);
    if (!form)
        form = elm.form;
        
    eval("var fld = form."+itm);
    
    var str = new String(fld.value);
    
    if  (str.indexOf(":") == -1) {    
        return true;
    } else {
        alert(msg);
        fld.focus();
        return false;
    }
}

/**
 * get position of the element...
 */
function findElement(id){
    element = getElement(id);
    if (!element)
        return false;
        
    return position = getPosition(element); 
}
function getElement(id){
    if (document.getElementById(id))
        return document.getElementById(id);
    return null;
}
function getPosition(element){
    var x = 0;
    var y = 0;
    while (element != null){
        x += element.offsetLeft - element.scrollLeft;
        y += element.offsetTop - element.scrollTop;
        element = element.offsetParent;
    }
    return {x:x,y:y};
}

/**
 * YesNo confirmation
 */
function yesNo(q) {
    q = q || "Are you sure you want to delete this item?";
    if (confirm(q)) {
        return true;
    }
    return false;
}

/**
 * select or deselect all grid rows
 */
function selectAllRows(elm, ind, itm) {
    itm = itm == null ? "sel_row" : itm;
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;
    
    for(i=0; i<form.elements.length; i++) {
        e = form.elements[i];
        if (e.type == "checkbox" && e.name != null && e.name.indexOf(itm) >= 0 && !e.disabled){
            e.checked = ind == 1 ? true : false;
        }
    }
}

/**
 * confirm delete selected rows
 */
function delSelRows(elm, itm) {
	itm = itm == null ? "sel_row" : itm;
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;

    var chkd = false;
    
    for (i=0; i<form.elements.length; i++) {
        e = form.elements[i];
        if (e.checked && e.name != null && e.name.indexOf(itm) >= 0 && !e.disabled){
            chkd = true;
        }
    }
    if (chkd) {
        if (confirm("Are you sure you want to delete selected row(s)?")) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

/**
 * implode checked elements (with hidden element optionally)
 * NOTE: if is hidden element used, it must be next element of a checkbox
 */
function implodeChecked(elm, itm, sep, itm_v) {
    itm = itm == null ? "sel_row" : itm;
    sep = sep == null ? ";" : sep;
    itm_v = itm_v == null ? "" : itm_v;
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;
        
    var istr = "";
    var itm_index = "";
    
    for(i=0; i<form.elements.length; i++) {
        cb = form.elements[i];
        if (cb.name != null && cb.name.indexOf(itm) >= 0 && cb.checked){
            // get index of the element
            itm_index = cb.name.substr(itm.length + 1, cb.name.length - itm.length - 2);
            
            if (itm_v != ""){
                hd = form.elements[i+1]; // get hidden element as next element of a checkbox
                if (hd.type == "hidden" && hd.name != null && hd.name == itm_v+"["+itm_index+"]"){
                    istr += itm_index + "#" + hd.value + sep;
                }
            } else {
                istr += itm_index + sep;
            }
        }
    }
    istr = istr.substr(0, istr.length - 1);
    
    return istr;
}
/**
 * explode string array to a select element
 */
function explodeToSelect(elm, srce, targ, sep) {
    sep = sep == null ? ";" : sep;
    var form = document.getElementById(elm);
    if (!form)
        form = elm.form;

    eval("se = form."+srce+".value");

    if (se != ""){
        se_ = se.split(";");
        eval("te = form."+targ);
        t_len = te.length;
        
        for(i=0; i<se_.length; i++) {
            eval("te["+(i + t_len)+"] = new Option('"+se_[i]+"', 1)");
        }
    }
    
    return true;
}

/**
 * navi functions
 */
function naviOver(elm){
    elm.style.color = '#ffffff';
    elm.style.backgroundColor = '#4B87D7';
}
function naviOut(elm){
    elm.style.color = '';
    elm.style.backgroundColor = '';
}

/**
 * function to open popup window
 */
var popupWin = false;
function popUp(getVar, wwidth, wheight) {
    var wwidth = wwidth != null ? wwidth : 800;
    var wheight = wheight != null ? wheight : 600;
    var winPrm = "width="+wwidth+",height="+wheight+",resizable=no,menubar=no,status=yes,location=no,toolbar=no,titlebar=no,scrollbars=no";
    var top_ = Math.round(getWindowHeight()/2 + getWindowYOffset() - wheight/2 - 10);
    var lft_ = Math.round(getWindowWidth()/2 - wwidth/2);
    top_ = top_ < 0 ? 0 : top_;
    lft_ = lft_ < 0 ? 0 : lft_;
    
    popupWin = window.open("index.php?popup=1&"+getVar, "popupWin", winPrm);
    popupWin.moveTo(lft_, top_);
    popupWin.focus();
}

function checkPopUp(e, check){
    if (check && popupWin){
        while (!popupWin.closed){
            if (confirm('Do you want to close popUp window?')){
                popupWin.close();
            } else {
                popupWin.focus();
                return false;
            }
        }
    }
}

function resizeWin(elm){
    elem = document.getElementById(elm);
    var height_value = elem.offsetHeight;
    var width_value = elem.offsetWidth;
    var diff = 65;
    if (height_value < 700){
        self.resizeTo(parseInt(width_value)+diff, parseInt(height_value)+diff+45);
    } else {
        self.resizeTo(parseInt(width_value)+diff, 700);
    }
}

/**
 * 
 */
function exportToExcel(getVar) {
    location.assign("export_csv.php?"+getVar);
}

/**
* check currency of selected batch template - is it equal as defined currency of the batch
*/
function checkBatchCurrency(elm, elm_c) {
    var batch_option = elm.options[elm.selectedIndex].text;
    var batch_currency = elm_c.options[elm_c.selectedIndex].text;
    
    if (elm.selectedIndex > 0 && batch_option.substr(batch_option.length - 3, 3) != batch_currency) {
        alert("Batch currencies must be equal!");
        elm.selectedIndex = 0;
        return false;
    } else {
        return true;
    }
}

function setCursor(obj, crs) {
    if (crs == 'over') {
        obj.style.cursor = 'pointer';
    } else {
        obj.style.cursor = 'default';
    }
}

/**
* functions used in time.inc.php class
*/
function displayTime(elm, ind) {
    if (ind == 1) {
        $(elm + '-time').style.display = 'block';
        $(elm + '-icon').style.display = 'none';
    } else {
        $(elm + '-time').style.display = 'none';
        $(elm + '-icon').style.display = 'block';
    }
    setTime(elm, ind)
}
function setTime(elm, set) {
    if (set) {
        $(elm).value = $(elm + '-hour').value + ':' + $(elm + '-minute').value;
        if ($(elm + '-second')) $(elm).value += ':' + $(elm + '-second').value;
    } else {
        $(elm).value = '';
    }
}

/**
* add checked element into a hidden field (as list of checked elements)
*/
function updateElementList(frm, elm, idx, list) {
    var form = document.getElementById(frm);
    if (!form)
        form = elm.form;
        
    var sep = ";";
    var listElem = false;
    var theElem  = false;
    var elm_name = elm + idx;
    
    for (i=0; i<form.elements.length; i++) {
        if (form.elements[i].name == list) listElem  = form.elements[i];
        if (form.elements[i].name == elm_name) theElem = form.elements[i];
    }
    
    if (theElem.checked) {
        // add to the list...
        listElem.value = listElem.value.concat(idx + sep);
    } else {
        // remove from the list...
        var list_ = listElem.value.split(sep);
        var new_list = '';
        
        for (i=0; i<list_.length; i++){
            if (list_[i] != idx && list_[i] != ''){
                new_list += list_[i] + sep;
            }
        }
        listElem.value = new_list;
    }
}

/**
* check if is any checkBox checked
*/
function mandatoryCheckBox(elm, itm, msg){
    var form = $(elm);
    if (!form)
        form = elm.form;
        
    var is_checked = false;
    
    for (i=0; i<form.elements.length; i++) {
        e = form.elements[i];
        if (e.type == "checkbox" && e.name != null && e.name.indexOf(itm) >= 0){
            if (e.checked) is_checked = true;
        }
    }
    
    if (!is_checked) alert(msg);
    
    return is_checked;
}


// Field validation
function validateField(fld, mode, min_val, max_val) {
    // Validate val, if validation fails show alert and return false else return true
    // Mode:
    // 1 - Only letters
    // 2 - Letters and _
    // 3 - Letters and numbers and _
    // 4 - Integer value
    // 5 - Number
    // 6 - Mobile phone like +number or 00number
    // 7 - Mail like ___@___.___
    // 8 - Phone number in format [+]number
    // The new optional parameters min_val and max_val are added the modes 4 and 5 will be chacked against them
    var val = fld.value;
    var msg = "";
    var letters = "qwertyuiopasdfghjklzxcvbnmüöäß";
    var special = "_";
    var plus    = "+";
    var numbers = "0123456789";
    var allowed = "";
    var result = true;
    switch (mode) {
    case 1:
        allowed = letters;
        msg = "The field value contains invalid characters, the valid characters are letters, only.";
        break;
    case 2:
        allowed = letters+special;
        msg = "The field value contains invalid characters, the valid characters are letters and _.";
        break;
    case 3:
        allowed = letters+special+numbers;
        msg = "The field value contains invalid characters, the valid characters are letters, numbers and _.";
        break;
    case 4:
        allowed = numbers;
        msg = "Postleitzahl ist ungültig.";
        break;
    }
    if (mode == 1 || mode == 2 || mode == 3 || mode == 4) {    
        var tmpVal = val.toLowerCase(); // make lowercase copy to speeup searching
        for (i=0;i<tmpVal.length;i++) {
            if (allowed.indexOf(tmpVal.charAt(i)) < 0) {
                result = false;
                break;
            }
        }
    } else if (mode == 5) {
        floatValue=parseFloat(val);
        if (val != "" && isNaN(floatValue)) {
            msg = "Nummer ist ungültig.";
            result = false;
        }
    } else if (mode == 6) {
        if (val.length > 0) {
            if (((val.charAt(0) == "+") || (val.charAt(0) == "0" && val.charAt(1) == "0")) && val.length > 7) {
                val = val.slice(1);
                pat = /[0-9]/gi
                pat2 = /[^0-9]/gi
                res = val.replace(pat,"");
                if (res != "") {               
                    result = false;
                } else {
                    if (pat2.test(val))
                        result = false;
                }
            } else {                
                result = false;
            }
            if (!result)
                msg = "Handy-Nummer ist ungültig.";
        }
    } else if (mode == 7) {
        if ((val != "") && ((val.indexOf('@')== -1) || (val.indexOf('.')== -1))){
            result = false; 
        }
        if (!result)
            msg = "Email-Adresse ist ungültig.";
            
    } else if (mode == 8) {
        if (val.length > 0) {
            fc = val.charAt(0);
            if (((fc == "+") || (Number(fc) >= 0 && Number(fc) <= 9)) && val.length > 2) {
                val = val.slice(1);
                pat = /[0-9]/gi
                pat2 = /[^0-9]/gi
                res = val.replace(pat,"");
                if (res != "") {               
                    result = false;
                } else {
                    if (pat2.test(val))
                        result = false;
                }
            } else {                
                result = false;
            }
            if (!result)
                msg = "Handy-Nummer ist ungültig.";
        }
    }
    
    if (result) { // now check min and max val
        if (val != "" && (mode == 4 || mode == 5)) {
            if (mode == 4) {
                new_val = parseInt(val);
            } else if (mode == 5) {
                new_val = parseFloat(val);
            }
            if (isNaN(new_val)) {
                new_val = 0;
            }
            if (min_val != null && new_val < min_val) {
                result = false;
            }
            if (max_val != null && new_val > max_val) {
                result = false;
            }
            /*if (!result) { //set the error message
                if (min_val != null && max_val != null) {
                    msg = "Invalid value, it must be between "+min_val+" and "+max_val+".";
                } else if (min_val != null) {
                    msg = "Invalid value, it must NOT be less then"+min_val+".";
                } else if (max_val != null) {
                    msg = "Invalid value, it must NOT be greater then"+max_val+".";
                }
            }*/
        }
    } 
    
    if (!result) {
        alert(msg);
        fld.focus();
    }
    return result;   
} 

// Check list of fields against NULL value
function mandatoryFields(frm_name, fList, mesg) {
    // field names in fList are separated with ,
    var form = document.getElementById(frm_name);
    var fArray = fList.split(",");
    var tmp = "";
    for (var i=0; i < fArray.length; i++) {
        eval("tmp = form."+fArray[i]+".value");
        if (tmp == "") {
            alert(mesg);
            setFocus(frm_name, fArray[i]);
            return false;
        }
    }
    return true;
}
 
 
/* menu and submenu functions --------------- */
var sub_menu = false;
var menu_obj = false;
var dmy      = false;
var amenu    = 0;

function showSubMenu(obj, id){
    if (sub_menu) closeSubMenu();
    
    if (obj && id){
        var pos = getPosition(obj);
        var smenu = $(id);
        
        smenu.style.left = pos.x + 146;
        smenu.style.top = pos.y - 0 + document.body.scrollTop;
        smenu.style.display = 'block';
        sub_menu = smenu;
        
        obj.className = id;
        menu_obj = obj;
        
        dmy.style.left = pos.x + 150;
        dmy.style.top = pos.y - 20 + document.body.scrollTop;
        dmy.style.display = 'block';
    } else {
        sub_menu = false;
        menu_obj = false;
    }
}

function closeSubMenu(){
    if (sub_menu){
        dmy.style.display = 'none';
        sub_menu.style.display = 'none';
        
        menu_obj.className = '';
        
        menu_obj = false;
        sub_menu = false;
    }        
}

