﻿Taknology = function() {
};
Taknology.prototype = {
};
Taknology.DOM = function() {

};
Taknology.DOM.prototype = {
    addHandler : function(element, event, handler) {
        if(element)
        {
            if(element.addEventListener)
                element.addEventListener(event, handler, false);
            else if(element.attachEvent)
                element.attachEvent("on"+event,handler)
        }
    },
    
    removeHandler : function(element, event, handler) {
        if(element)
        {
            if(element.removeEventListener)
                element.removeEventListener(event,handler,false);
            else if(element.detachEvent)
                element.detachEvent("on"+event,handler);
        }
    },

    cancelKeyPress: function(source, evt) {
        
        var scanCode = $tk_ui_key.getKeyCode(evt)
        if (scanCode) {
            if ((scanCode == $tk_ui_key.enter) ||
                   (scanCode == $tk_ui_key.tab) ||
                   (scanCode == $tk_ui_key.esc) ||
                   (scanCode == $tk_ui_key.left) ||
                   (scanCode == $tk_ui_key.right) ||
                   (scanCode == $tk_ui_key.home)) {
                return true;
            }else{
                $tk_dom.preventDefault(evt);
                source.value = '';
                return false;
            }
        } else {
            $tk_dom.preventDefault(evt);
            source.value = '';
            return false;
        }
    },
    
    preventDefault : function(evt){
        if(evt.preventDefault)
            evt.preventDefault();
        else if(window.event)
            evt.returnValue=false;
    },
    
    stopPropagation : function(evt){
        if(evt.stopPropagation)
            evt.stopPropagation();
        else if(window.event)
            evt.cancelBubble=true;
    }
};
Taknology.UI = function() {
    this.numb = '0123456789';
    this.mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
    this.day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
};
Taknology.UI.prototype = {
    validateListBox: function(source, argument) {
        argument.IsValid = (argument.Value != '');
        bCancel = !argument.IsValid;
    },

    checkInvalidValueSelected: function(source, argument) {
        argument.IsValid = !(argument.Value == 0);
    },

    validateDropDownListControl: function(source, argument) {
        argument.IsValid = (argument.Value != "None_Specified");
    },

    setCheckBoxListSelectedIndexValue: function(e1, e2) {
        e2.Value = e1.selectedIndex;
    },

    stripBlanks: function(fld) {
        var result = "";
        for (i = 0; i < fld.length; i++) {
            if (fld.charAt(i) != " " || c > 0) {
                result += fld.charAt(i);
                if (fld.charAt(i) != " ")
                    c = result.length;
            }
        }
        return result.substr(0, c);
    },

    isNumber: function(parm) {
        return $tk_ui.isValid(parm, $tk_ui.numb);
    },

    isValid: function(parm, val) {
        if (parm == "")
            return true;
        for (i = 0; i < parm.length; i++) {
            if (val.indexOf(parm.charAt(i), 0) == -1)
                return false;
        }
        return true;
    },

    setElementVisibility : function(e, visible) {
        e.style.display = (visible ? "block" : "none");
    },

    validateDate: function(fld, fmt, rng) {
        if (fld == '')
            return false;
        var dd, mm, yy;
        var today = new Date;
        var t = new Date;
        fld = $tk_ui.stripBlanks(fld);
        if (fld == '')
            return false;
        var d1 = fld.split('\/');
        if (d1.length != 3)
            d1 = fld.split(' ');
        if (d1.length != 3)
            return false;
        if (fmt == 'u' || fmt == 'U') {
            dd = d1[1];
            mm = d1[0]; yy = d1[2];
        }
        else if (fmt == 'j' || fmt == 'J') {
            dd = d1[2];
            mm = d1[1]; yy = d1[0];
        }
        else if (fmt == 'w' || fmt == 'W') {
            dd = d1[0];
            mm = d1[1];
            yy = d1[2];
        }
        else
            return false;

        var n = dd.lastIndexOf('st');
        if (n > -1)
            dd = dd.substr(0, n);
        n = dd.lastIndexOf('nd');
        if (n > -1)
            dd = dd.substr(0, n);
        n = dd.lastIndexOf('rd');
        if (n > -1)
            dd = dd.substr(0, n);
        n = dd.lastIndexOf('th');
        if (n > -1)
            dd = dd.substr(0, n);
        n = dd.lastIndexOf(',');
        if (n > -1)
            dd = dd.substr(0, n);
        n = mm.lastIndexOf(',');
        if (n > -1)
            mm = mm.substr(0, n);
        if (!$tk_ui.isNumber(dd))
            return false;
        if (!$tk_ui.isNumber(yy))
            return false;
        if (!$tk_ui.isNumber(mm)) {
            var nn = mm.toLowerCase();
            for (var i = 1; i < 13; i++) {
                if (nn == $tk_ui.mth[i] ||
                    nn == $tk_ui.mth[i].substr(0, 3)) {
                    mm = i; i = 13;
                }
            }
        }
        if (!$tk_ui.isNumber(mm))
            return false;
        dd = parseFloat(dd);
        mm = parseFloat(mm);
        yy = parseFloat(yy);
        if (yy < 100)
            yy += 2000;
        if (yy < 1582 || yy > 4881)
            return false;
        if (mm == 2 && (yy % 400 == 0 || (yy % 4 == 0 && yy % 100 != 0)))
            $tk_ui.day[mm - 1]++;
        if (mm < 1 || mm > 12)
            return false;
        if (dd < 1 || dd > $tk_ui.day[mm - 1])
            return false;
        t.setDate(dd);
        t.setMonth(mm - 1);
        t.setFullYear(yy);
        if (rng == 'p' || rng == 'P') {
            if (t >= today)
                return false;
        }
        else if (rng == 'f' || rng == 'F') {
            if (t <= today)
                return false;
        }
        else if (rng != 'a' && rng != 'A')
            return false;
        return true;
    }
};
Taknology.UI.Key = function() {
};
Taknology.UI.Key.prototype = {
    backspace:8,
    tab:9,
    enter:13,
    esc:27,
    space:32,
    pageUp:33,
    pageDown:34,
    end:35,
    home:36,
    left:37,
    up:38,
    right:39,
    down:40,
    del:127,
    
    getKeyCode : function(evt){
        var scanCode = null;
        if (evt.keyIdentifier) {
            if (evt.ctrlKey || evt.altKey || evt.metaKey) {
                return null;
            }
            
            if (evt.keyIdentifier.substring(0,2) != "U+") {
                return null;
            }
            
            scanCode = evt.charCode; 
            if (scanCode == 63272 /* Delete */) {
                return null;
            }
        }
        else
        {
            if(evt.type==="keypress")
                scanCode=evt.charCode||evt.keyCode;
            else if(evt.keyCode&&evt.keyCode===46)
                scanCode=127;
            else 
                scanCode=evt.keyCode;
        }
        return scanCode;
    }

};
Taknology.UI.CharCounter = function() {
};
Taknology.UI.CharCounter.prototype = {
    limitChars: function(source, evt, mlength, updateCharsLeft, target) {
        if (this.countKey(evt)) {
            if (source.value.length >= mlength) {
                source.value = source.value.substring(0, mlength);
                $tk_dom.preventDefault(evt);
                return false;
            }
            if (updateCharsLeft && target) {
                this.updateRemainingChars(source, evt, target, mlength);
            }
        }
    },

    //updateRemainingChars: function(source, evt, targetEl, mlength) {
    updateRemainingChars: function(source, evt, target, mlength) {
        var targetEl = document.getElementById(target);
        if (targetEl) {
            if (evt.type === "keypress")
                targetEl.innerHTML = (mlength - (source.value.length + 1));
            else
                targetEl.innerHTML = (mlength - source.value.length);
        }
    },

    countKey: function(evt) {
        var countIt = true;
        var scanCode = $tk_ui_key.getKeyCode(evt)
        if (scanCode) {
            if ((scanCode == $tk_ui_key.pageUp) ||
                   (scanCode == $tk_ui_key.pageDown) ||
                   (scanCode == $tk_ui_key.up) ||
                   (scanCode == $tk_ui_key.down) ||
                   (scanCode == $tk_ui_key.left) ||
                   (scanCode == $tk_ui_key.right) ||
                   (scanCode == $tk_ui_key.home) ||
                   (scanCode == $tk_ui_key.end) ||
                   (scanCode == 46 /* Delete */) ||
                   (evt.ctrlKey /* Control keys */)) {
                countIt = false;
            }
            //countIt = (countIt & (scanCode && scanCode >= 0x20 /* space */));
        }
        return countIt;
    }
};
Taknology.Functions = function() {
};
Taknology.Functions.createDelegate = function(a,b){
    return function(){
        return b.apply(a,arguments)
    }
};

var taknology, td_dom, tk_ui, tk_key, tk_ui_charcounter;
var $taknology = taknology = new Taknology();
var $tk_dom = tk_dom = new Taknology.DOM();
var $tk_ui = tk_ui = new Taknology.UI();
var $tk_ui_key = tk_ui.key = new Taknology.UI.Key();
var $tk_ui_charcounter = tk_ui_charcounter = new Taknology.UI.CharCounter();
var $tk_addHandler = $tk_dom.addHandler();
var $tk_removeHandler = $tk_dom.removeHandler();