// mona.js
// common javascripts for mona

function searchFocus(textfield,search_text) {
    if (textfield.value==search_text) {
        textfield.value='';    
    }
}


function searchBlur(textfield,search_text) {
    if (textfield.value=='') {
        textfield.value=search_text;    
    }
}

function changeOverflow(id,value){
    var element = getElement(id);
        
    element.className = value;
    
}

function check(chkbox) {
    if (chkbox) {
        chkbox.checked='checked';
    }
}

function quickBarcodeSearchOnKeyUp(textfield) {
    //I didn't use regexp to make sure all browser handle it
    if (textfield.value.length==6) {
        if (!isNaN(textfield.value)) {
            textfield.form.submit();
        }
    }     
    if (textfield.value.length==8) {
        if (isNaN(textfield.value.substr(0,2)) &&
            (!isNaN(textfield.value.substr(2,6)))) {
            textfield.form.submit();
        }
    }       
}

function checkUncheckAll(objectForm,isChecked,controlName)
{
    var regExp = new RegExp(controlName);     
    for (var i = 0; i < objectForm.elements.length; i++)
    {
        var element = objectForm.elements[i];
        
        if (element.type == 'checkbox' && element.name.match(regExp) && element.disabled == false)
        {
            
            element.checked = isChecked;   
        }   
    }
}

function enableDisableAll(objectForm,isEnable,controlName)
{
    var regExp = new RegExp(controlName);     
    for (var i = 0; i < objectForm.elements.length; i++)
    {
        var element = objectForm.elements[i];
        
        if (element.name.match(regExp))
        {
            
            element.disabled = !isEnable;   
        }   
    }
}

//// synconyze the drop-downlist and textfield for scanning
//function sync_select_textfield(select, textfield)
//{
//    if (textfield.value!='Search') {
//        for (var i=0; i < select.length; i++)
//        {
//                if (select[i].value.replace(/^\D+/, '') == textfield.value.replace(/^\D+/, '') )
//                {
//
//                        select[i].selected = true;
//                        return;
//                }
//
//        }
//        alert(textfield.value + ' is not valid barcode ');
//        textfield.value='';
//    }
//}

// synconyze the drop-downlist and textfield for scanning
function sync_select_textfield(select, textfield)
{
    if (textfield.value!='Barcode Search') {
        var barcodeDomain = '';
        var barcodeNumber = '';
        var foundOne = false;
        
        if (textfield.value.length==6) {
            barcodeNumber = textfield.value;
        }
        else if (textfield.value.length==8) {
            barcodeDomain = textfield.value.substr(0,2);
            barcodeNumber = textfield.value.substr(2,6);
        }    

        if(!isNaN(barcodeNumber)) {
            for (var i=0; i < select.length; i++)
            {
                    if (select[i].value.replace(/^\D+/, '') == barcodeNumber)
                    {
                        if(barcodeDomain == select[i].value.substr(0,2)) {
                            select[i].selected = true;
                            foundOne = true;
                            break;                        
                        }
                        else if (barcodeDomain == '') {
                            //Warn the user the short barcode (6 numbers) match more then one long barcode (8 char)
                            if (foundOne) {
                                alert('Warning: ' + textfield.value + ' match more then one option, first one selected');
                                break;
                            }
                            select[i].selected = true;
                            foundOne = true;
                        }
                    }
    
            }
        }
        if (!foundOne) {
            alert(textfield.value + ' is not valid barcode ');
        }
        textfield.value='';
    }
}

// promot to confirm form submit action
function deleteUpdateConfirm(button, record_id)
{
//NOT USED        button.form.action.value=button.name;
    var ok = deleteUpdateConfirmNoSubmit(button, record_id)
    if (ok == true)
    {
            button.form.submit();
            return true;
    }
    return false;
}

function deleteUpdateConfirmNoSubmit(button, record_id)
{
    if(record_id && record_id != 0) {
        return confirm('Are you sure it is OKAY to ' + button.value + ' record ' + record_id + '?');
    }
    else {
        return confirm('Are you sure it is OKAY to ' + button.value + ' record?');
    }
}

//submit a form dynamically
function formSubmit(form, form_action, form_path, form_domain, sub_action)
{
    if (form_path){
        form.path.value=form_path;
    }
    if (form_domain){
        form.domain.value=form_domain;
    }
    if (sub_action){
        form.subAct.value=sub_action;
    }
    form.action.value=form_action;
    form.submit();
    return true;
}

function formSubmitFromName(formname, form_action, form_path, form_domain, sub_action)
{
    var form=getElement(formname);

    if (form_path){
        form.path.value=form_path;
    }
    if (form_domain){
        form.domain.value=form_domain;
    }
    if (sub_action){
        form.subAct.value=sub_action;
    }
    form.action.value=form_action;
    form.submit();
    return true;
}

function addHideMenuVar(form)
{
    form.tmpl_mode.value = "no_mns";
}

//set value to a form field
function set_field_value(field_type, field, value)
{

    field_type = field_type.toLowerCase();
    switch(field_type)
    {
        case 'textfield':

            field.value = value;
            break;

        case 'textarea':

            field.value = value;
            break;

        case 'radio':

            for (var i = 0; i < field.length; i ++)
            {
                if (field[i].value == value)
                {
                    field[i].checked = true;
                }
            }
            break;

        case 'checkbox':

            if (field.value == value)
            field.checked = true;
            break;

        case 'select':

            for (var i = 0; i < field.length; i ++)
            {
                if (field[i].value == value)
                {
                    field[i].selected = true;
                }
            }
            break;


    }
}
<!-- Dynamic Version by: Nannette Thacker -->
function textCounter(field,cntfield,maxlimit)
{
    if (field.value.length > maxlimit) // if too long...trim it!
    {
        field.value = field.value.substring(0, maxlimit);
        alert("Sorry, you have used up all space.");
    }
        // otherwise, update 'characters left' counter
    else
    {
        //alert(cntfield.value);
        cntfield.value = maxlimit - field.value.length;
        cntfield.value = maxlimit - field.value.length;
    }
}

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Original:  Premshree Pillai (premshree@hotmail.com ) -->
<!-- Web Site:  http://www.qiksearch.com -->
<!-- Begin

window.onerror = null;
 var bName = navigator.appName;
 var bVer = parseInt(navigator.appVersion);
 var NS4 = (bName == "Netscape" && bVer >= 4);
 var IE4 = (bName == "Microsoft Internet Explorer"
 && bVer >= 4);
 var NS3 = (bName == "Netscape" && bVer < 4);
 var IE3 = (bName == "Microsoft Internet Explorer"
 && bVer < 4);
 var blink_speed=200;
 var i=0;

if (NS4 || IE4) {
 if (navigator.appName == "Netscape") {
 layerStyleRef="layer.";
 layerRef="document.layers";
 styleSwitch="";
 }else{
 layerStyleRef="layer.style.";
 layerRef="document.all";
 styleSwitch=".style";
 }
}

//BLINKING
function Blink(layerName){
 if (NS4 || IE4) {
 if(i%2==0)
 {
 eval(layerRef+'["'+layerName+'"]'+
 styleSwitch+'.visibility="visible"');
 }
 else
 {
 eval(layerRef+'["'+layerName+'"]'+
 styleSwitch+'.visibility="hidden"');
 }
 }
 if(i<1)
 {
 i++;
 }
 else
 {
 i--;
 }
 setTimeout("Blink('"+layerName+"')",blink_speed);
}

//open central window
function openCenteredWindow(url, height, width, name, parms) {
   var left = Math.floor( (screen.width - width) / 2);
   var top = Math.floor( (screen.height - height) / 2);
   var winParms = "top=" + top + ",left=" + left + ",height=" + height + ",width=" + width;
   if (parms) { winParms += "," + parms; }
   var win = window.open('preload.pl', name, winParms);
   win.focus();
   win.location.replace('preload.pl');
   win.location.replace(url);
   //win = window.open(url, name, winParms);
   //win.alert('Window is loading');
   //win.focus();
   //if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
   //return win;
}

//Include a javascript src file withing another javascript file
// ex: include("mona/javascript/SCUtiles.js");
var includedFiles = new Array();
function include(filename) {
    var found = 0;
    for (var i = 0; i < includedFiles.length; i++) {
        if (includedFiles[i] == filename) {
            found = 1;
            break;
        }
    }

    if(!found) {
        document.write('<script language="javascript" type="text/javascript" src=\"' + filename + '\"></script>');
        includedFiles[includedFiles.length] = filename;
    }
}

//Get the HTML element accossiated with a CSS ID, compatible with most platforms
function getElement(id)
{
    if (document.getElementById)
    {
        return document.getElementById(id);
    }
    else if (document.all)
    {
        return document.all[id];
    }
    else if (document.layers)
    {
        return document.layers[id];
    }
}

function writeToElement(text,id,allowEmptyString)
{
    var element;

    if ((allowEmptyString == false) && (text == ''))
        text = '&nbsp;';
    
    //IExplorer compatibility
    if (document.getElementById)
    {
        
        element = document.getElementById(id);
        //element.innerHTML = '';
        try{
            element.innerHTML = text;
        }
        catch(er){
           
        }
    }
   
    //Netscape 7+, Mozilla compatibility
   else  if (document.all)
    {
        
        element = document.all[id];
        //element.innerHTML = '';
        element.innerHTML = text;
    }
    //Netscape 4 compatibility
    else if (document.layers)
    {
       
        element = document.layers[id];
        element.document.open();
        element.document.write('<P CLASS="testclass">' + text + '</P>;');
        element.document.close();
    }
}
//Data type validator
//NOTE : Some possibilities are not valids
//       Negative values
//       Exponential values
//isNaN method returns true with the following patterns
//  empty string
//  [-+]? digits
//  [-+]? digits .
//  [-+]? digits . digits
//  [-+]? digits . digits e [-+]? digits
//  . digits
//  . digits e [-+]? digits
//NOT VALID WITH parseInt
//  . digits
//  . digits e [-+]? digits
//PARTICULARITIES
//  .e+4 is not valid in javascript but is valid in mysql
//  .345 is not valid in javascript but is valid in mysql
function isNumeric(sText)

{
   var ValidChars = "0123456789.";
   var isNumber=true;
   var Char;


   for (i = 0; i < sText.length && isNumber == true; i++)
   {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
      {
            isNumber = false;
         }
      }
   return isNumber;

   }


// This function is used to check or uncheck all sub options related to an option, when other
// checkboxes have the same name (we use the id to know wich ones to check)
function checkUncheckAllSubOptions(form, checked, name, subId) {
    var boxes = form.elements[name];
    if (boxes != undefined) {
        for (var i = 0; i < boxes.length; i++) {
            if (boxes[i].id == subId) {
                boxes[i].checked = checked;
            }
        }
    }
}

// This function is used to check or uncheck a check box depending on the values of checkboxes that
// represent sub options
function checkUncheckParents(form, checked, name) {
    var tokens = name.split(/@/);
    var parentName  = tokens[0];
    var parentValue = tokens[1];
    
    // If the sub option is checked, check the parent option
    if (checked) {
        var boxes = form.elements[parentName];
        var found = false;
        for (var i = 0; (i < boxes.length) && (!found); i++) {
            
            if (boxes[i].value == parentValue) {
                boxes[i].checked = checked;
                
                found = true;
            }
        }
    }
    // If the sub option is not checked, uncheck the parent option if no child options are checked
    else {
        // Check if other child options are checked
        var boxes = form.elements[name];
        var found = false;
        for (var i = 0; (i < boxes.length) && (!found); i++) {
            found = boxes[i].checked;
        }
        
        //  No child option is checked, so uncheck the parent
        if (!found) {
            boxes = form.elements[parentName];
            found = false;
            for (var i = 0; (i < boxes.length) && (!found); i++) {
                if (boxes[i].value == parentValue) {
                    boxes[i].checked = checked;
                    found = true;
                }
            }
        }
    }
}

function changeFocus(element,maxlength,newElement){
    
    //var el = getElement(element);
    //alert (element.value);
    if (element.value.length == (maxlength -1)){
        //var newEl = getElement(newelement);
        newElement.focus();
    }
    
}

function update_searchable_select(url,session,div_id,new_option,submit_action,otherparams,image,stopimage) {
   
    //var comment = getElement('list_element_comment_0_0');
    //comment.value = comment.value + '-';
    
    if ($F(div_id+'_query').length > 0){
        var querystring = $F(div_id+'_query');
        querystring = querystring.replace(/^\s+/,'');
        var newstring = ''; // this will contain the newly formatted screen
        for (var i = 0; i < querystring.length;i++){
            ischar = (querystring.charAt(i)).match(/(\w)/); 
            if ( ischar != null){
                newstring += querystring.charAt(i); 
            }
            else{
                var code = querystring.charCodeAt(i);
                newstring += '%' + code.toString(16);
                //alert(code);
            }
        }
       
        var imageCtrl = getElement(div_id+'_img');
        if (querystring.length > 0){
            var params = 'session=' + session 
                + '&query=' + newstring
                + '&selected=' + $F(div_id+'_select')
                + '&select_id=' + div_id+'_select'
                + '&new_option=' + new_option 
                + '&submit_action=' + submit_action;
            for (var i = 0; i < otherparams.length;i++){
                params = params + '&param' + i + '=' + otherparams[i];    
            }
            
            var ajax = new Ajax.Updater(
                {success: div_id},
                url,
                {method: 'get', parameters: params},
                imageCtrl, image,stopimage
                );
        }
    }
}


