﻿// JScript File

var NONE_VALUE = "None"
function getElementValue(elm) {
   switch (elm.type) {
       case "select-one":
           if (elm.options.length < 1) return ""
           return elm.options[elm.options.selectedIndex].value
       case "select-multiple":
           var ar = new Array()
           if (elm.options.length < 1) return ar 
           for (var i=0; i<elm.options.length; i++)
                if (elm.options[i].selected) 
                    ar[ar.length] = elm.options[i].value
           return ar

       case "checkbox":
           return elm.checked 

       case "radio":
           // one should always set value when creating a radio button.
           if (elm.checked) return elm.value 
           return NONE_VALUE 

       default:  
           if (elm.type == [].type) {
               if (elm[0].type == "radio") {
                   for (var i=0; i<elm.length; i++)
                        if (elm[i].checked) return elm[i].value
                   return NONE_VALUE 
               } else if (elm[0].type == "checkbox") {
                   var ar = new Array()
                   for (var i=0; i<elm.length; i++) 
                      if (elm[i].checked) ar[ar.length] = elm[i].value 
                   return ar
               }
           } else { //TEXT, TEXTAREA 
               return elm.value
           }
   }
}

 function setElementValue(elm, new_value) {
    if (typeof elm == 'undefined') {
        alert ('Error: Try to set value to a not form -- ' + new_value)
        return
    }
    switch (elm.type) {
        case "select-one":
        case "select-multiple":
             for (var i=0; i<elm.options.length; i++) {
                  if (elm.options[i].value == new_value) {
                      elm.options.selectedIndex = i
                      break 
                  }
             }
             return 
        case "checkbox":
             if (new_value) 
                 elm.checked = true
             else 
                 elm.checked = false
             return 
        case "radio":
             if (new_value) 
                 elm.checked = true
             else 
                 elm.checked = false 
             return 
        default:
            if (elm.type == [].type) {
                if (elm[0].type == "radio") {
                    for (var i=0; i<elm.length; i++) 
                       if (elm[i].value == new_value) {
                           elm[i].checked = true
                           break
                       }
                } else if (elm[0].type == "checkbox") {
                    for (var j=0; j<elm.length; j++) {
                       elm[j].checked = false
                    }
                    if (new_value.constructor == __list_constructor__) {
                        for (var i=0;i<new_value.length;i++) {
                            var _new_value = new_value[i]
                            for (var j=0; j<elm.length; j++) {
                               if (elm[j].value == _new_value) {
                                   elm[j].checked = true
                                   break
                               }
                            }
                        }
                    }else {
                        for (var i=0; i<elm.length; i++) {
                           if (elm[i].value == new_value) {
                               elm[i].checked = true
                               break
                           }
                        }
                    }
                }
            } else {  
              elm.defaultValue = new_value
              elm.value = new_value
            }
   }
 }

 var _ESC_ = {}
 _ESC_['"'] = escape('"')
 _ESC_["'"] = escape("'")
 _ESC_["\r"] = escape("\r")
 _ESC_["\n"] = escape("\n")
 _ESC_[">"] = escape(">")
 _ESC_["<"] = escape("<")
 var _UNESC_ = {}
 _UNESC_[escape('"')] = '"'
 _UNESC_[escape("'")] = "'"
 _UNESC_[escape("\r")] = "\r"
 _UNESC_[escape("\n")] = "\n"
 _UNESC_[escape(">")] = ">"
 _UNESC_[escape("<")] = "<"
 function kwSubstitute(s, kw) {
   if (!s || !kw) 
       return s
   var v = s || "" + s
       v = "" + v
   for (k in kw) 
       v = v.split(k).join(kw[k])
   return v
 }
 var __escape_chars = ['%',' ','&','=']

 var __test_o__ = new Object()
 var __string_constructor__ = "".constructor
 var __list_constructor__ = [].constructor
 var __dict_constructor__ = {}.constructor
 var __object_constructor__ = __test_o__.constructor
 var __native_code__ = Object.constructor
 var __STRING_QUOTE_SYM__ = '"'
 function ToCodeString(v, quotestring) {
   switch (v.constructor) {
       case __string_constructor__:
            if (quotestring) 
               return quoteString( kwSubstitute(v, _ESC_) )
            else
               return kwSubstitute(v, _ESC_)  
       case __list_constructor__:
            var ar=[] 
            for (var i=0; i<v.length;i++)
                 ar[i] = ToCodeString(v[i],true)
            return '['+ar.join(',')+']'
            break
       case __dict_constructor__:
       case __object_constructor__:
            var ar=[]
            for (var k in v)
                 if (v[k] != null) 
                     ar[ar.length] = quoteString(k) + ':' + ToCodeString(v[k], true) 
            return '{'+ar.join(',')+'}'
       default:
            return v
   }
 }

 function FromCodeString(s, isrecursive) {
   if (isrecursive) 
       var v = s
   else { 
       s=s.split('\n').join('')
       eval( "var v=" + s )
   }
   switch (v.constructor) {
       case __string_constructor__:
            return kwSubstitute(v, _UNESC_) 
       case __list_constructor__:
            for (var i=0; i<v.length;i++)
                 v[i] = FromCodeString(v[i], true)
            return v 
            break
       case __dict_constructor__:
            for (var k in v)
                 v[k] = FromCodeString(v[k], true)
            return v 
       default:
            return v
   }
 }

 if (!Array.prototype.indexOf) {
     Array.prototype.indexOf=function(o){
         for(var i=0;i<this.length;i++)
             if(this[i]==o)return i;
         return-1;
     }
 }
 if (!Array.prototype.lastIndexOf) {
     Array.prototype.lastIndexOf=function(o){
         for(var i=this.length-1;i>=0;i--)
             if(this[i]==o)return i;
         return-1;
     }
 }
 if (!Array.prototype.contains){
     Array.prototype.contains=function(o){
         return this.indexOf(o)!= -1;
     }
 }
 if (!Array.prototype.copy) {
     Array.prototype.copy=function(){
         return this.concat();
     }
 }
 if (!Array.prototype.removeAt) {
     Array.prototype.removeAt=function(i){
         return this.slice(0,i).concat(this.slice(i+1,this.length))
     }
 }
 if (!Array.prototype.remove) {
     Array.prototype.remove=function(o){
         var i=this.indexOf(o);
         if(i!= -1) return this.removeAt(i)
         return this
     }
 }
 if (!Array.prototype.comp) {
     Array.prototype.comp= function (lst) {
         var _lst1 = []
         var _lst2 = []
         for (var i=0;i<this.length;i++) {
             if (lst.indexOf(this[i])<0)
                 _lst1[_lst1.length] = this[i]
         }
         for (var i=0;i<lst.length;i++) {
             if (this.indexOf(lst[i])<0)
                 _lst2[_lst2.length] = lst[i]
         }
         return [_lst1, _lst2]
     }
 }
 if (!String.prototype.strip)  {
     String.prototype.strip=function() {
         var tmp = this.split(" ")
         while(tmp.length) {
             if (tmp[0] != "")
                 break
             tmp=tmp.removeAt(0)
         }
         tmp.reverse()
         while(tmp.length) {
             if (tmp[0] != "")
                 break
             tmp=tmp.removeAt(0)
         }
         return tmp.reverse().join(" ")
     }
 } 
 
  function quoteString(s) {
     return __STRING_QUOTE_SYM__ + s + __STRING_QUOTE_SYM__ 
 }

 
 function MemDeepCopy(v) {
   switch (v.constructor) {
       case __string_constructor__:
            return ""+v 
       case __list_constructor__:
            var ret = []
            for (var i=0; i<v.length;i++)
                 ret[i] = MemDeepCopy(v[i]) 
            return ret 
       case __dict_constructor__:
       case __object_constructor__:
       case __native_code__:
            var ret = {}
            for (var k in v)
                 ret[k] = MemDeepCopy(v[k]) 
            return ret 
       default:
            if (typeof v == 'object') {
                var ret = {}
                for (var k in v)
                     ret[k] = MemDeepCopy(v[k]) 
                return ret 
            } 
            return v
   }
 } 
 
var _hiddenselect_ = {}
function hideSelect(divObj) {
    if (!document.all)
        return
    if (!_hiddenselect_[divObj])
        _hiddenselect_[divObj] = []
    var selects = document.getElementsByTagName("SELECT")
    for (var i=0;i<selects.length;i++){
        var o = selects[i]
        var oLeft = o.offsetLeft
        var oTop = o.offsetTop
        while(o.offsetParent!=null) { 
            oParent = o.offsetParent 
            oLeft += oParent.offsetLeft
            oTop += oParent.offsetTop
            o = oParent
        }
        var divLeft = Number(getPosition(divObj)[0])
        var divTop = Number(getPosition(divObj)[1])
        if (isOverLap(oLeft,divLeft,oTop,divTop,oLeft+selects[i].clientWidth,divLeft+divObj.offsetWidth,oTop+selects[i].clientHeight,divTop+divObj.offsetHeight)) {
            if (elmIsHidden(selects[i], divObj)) {
                selects[i].style.visibility = 'hidden'
                _hiddenselect_[divObj][_hiddenselect_[divObj].length] = selects[i]
            }
        }
    }
}

function elmIsHidden(selectObj, divObj) {
   var divObj = divObj || new Object()
   var parentObj = selectObj
   while (parentObj) {
      if (parentObj == divObj || (parentObj.style.visibility && parentObj.style.visibility == 'hidden'))
           return false 
      parentObj = parentObj.parentElement
   }
   return true
}

function showSelect(divObj) {
   if (!document.all)
      return
   var selectList = _hiddenselect_[divObj]
   if (!selectList || !selectList.length)
      return
   for (var i=0;i<selectList.length;i++) {
       selectList[i].style.visibility = ''
   }
}

function isOverLap(leftS,leftD,topS,topD,rightS,rightD,bottomS,bottomD) {
   if (leftS > leftD && leftS < rightD)
      if (bottomS > topD && topS < bottomD)
         return true
   if (leftS < leftD && rightS > leftD)
      if (bottomS > topD && topS < bottomD)
         return true
   if (bottomS > topD && topS < bottomD)
      if (leftS > leftD && leftS < rightD)
         return true
   return false
}

addEvent = function(o, e, f, s){
   var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
       r[r.length] = [f, s || o], o[e] = function(e){
         try{
            (e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
                 e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
                 e.target || (e.target = e.srcElement || null);
            e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
        }catch(f){}
        for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
          return e = null, !!d;
      }
};

MaskInput = function(f, m){
    function mask(e){
        var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[\xC0-\xFF]/i, "8": /./ },
            rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
        function accept(c, rule){
            for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
                if(r & i && patterns[i].test(c))
                    break;
                return i <= r || c == rule;
        }
        var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
        (!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
            r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
            : (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
            r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
    }
    for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
        addEvent(f, i, mask);
};

function setFocusToBoxEnd(obj){
    var txt = obj.createTextRange()
    txt.moveStart('character',obj.value.length)
    txt.collapse(true)
    txt.select()
}

function isDigit (c) {
    return ((c >= "0") && (c <= "9"))
}

function isEmpty(s) {
    if (typeof s == typeof {}) {
        var exists = false
        for (var k in s) {
            exists = true
        }
        return exists
    }else
        return (s == null || s.length == 0)
}

function isInteger(s) {
    var s = ''+s
    if (isEmpty(s))
       if (arguments.length == 1)
           return false
       else
           return (arguments[1] == true)
    for (var i = 0; i < s.length; i++) {
        var c = s.charAt(i)
        if (!isDigit(c))
            return false
    }
    return true
}


function getPosition(obj){
   var objThis = obj;
   var oBody = document.body;
   var oLeft = oTop = 0;
   while (objThis && objThis!=oBody){
     oLeft += objThis.offsetLeft;
     oTop += objThis.offsetTop;   
     objThis = objThis.offsetParent;
     }
   return [oLeft,oTop ]
 }
 
function setFocusToEnd(obj){
    var txt = obj.createTextRange()
    txt.moveStart('character',obj.value.length)
    txt.collapse(true)
    txt.select()
}
   
