/**
* common functions/classes for datespan/datepick
*
* @package Solution
* @author Vallo Reima
* @copyright (C)2013
*/
function $(id, obj)
/*
* Get element by Id
*/
{
var o = (typeof obj === 'undefined') ? document : obj.document;
return o.getElementById(id);
}
function $$(obj, tag)
/*
* Get elements by object tag name
*/
{
var o = (typeof obj === 'string') ? document.getElementById(obj) : obj;
return o.getElementsByTagName(tag);
}
function AttachEventListener(target, eventType, functionRef, capture)
/*
* Cross-browser method
* in: target - element id
* eventType - click, ...
* functionRef - handler
* capture -- false - bubble (default)
* true - propagation
*/
{
if (typeof capture === 'undefined') {
capture = false;
}
if (target.addEventListener) {
target.addEventListener(eventType, functionRef, capture);
} else if (target.attachEvent) {
target.attachEvent('on' + eventType, functionRef);
} else {
target['on' + eventType] = functionRef;
}
}
function DetachEventListener(target, eventType, functionRef, capture)
{
if (typeof capture === 'undefined') {
capture = false;
}
if (target.removeEventListener) {
target.removeEventListener(eventType, functionRef, capture);
} else if (target.detachEvent) {
target.detachEvent('on' + eventType, functionRef);
} else {
target['on' + eventType] = null;
}
}
function StopEvent(event, flag)
/*
* Prevent the Default Action for an Event
* in: event - object
* flag -- true - don't cancel bubble
*/
{
var e = event ? event : window.event;
e.returnValue = false;
if (flag !== true) {
e.cancelBubble = true;
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
}
return false;
/*
oEvent.returnValue = false;
if (oEvent.preventDefault) {
oEvent.preventDefault();
}
*/
}
function Target(e)
{
return (window.event) ? e.srcElement : e.target;
}
function EventType(event)
{
var e = event || window.event;
return e.type.toLowerCase();
}
function IsSet(variable)
/*
* Check variable is set
*/
{
return (typeof variable !== 'undefined');
}
function IsBlank(string)
/*
* Check string blankness
*/
{
var blankRE = /^[\s]*$/;
return blankRE.test(string);
}
function IsArray(varMixed) {
return (typeof varMixed === 'object') && (varMixed instanceof Array);
}
function ArraySearch(needle, haystack, argStrict) {
// Searches the array for a given value and returns the corresponding key if successful
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// * example 1: array_search('zonneveld', {firstname: 'kevin', middle: 'van', surname: 'zonneveld'});
// * returns 1: 'surname'
var strict = !!argStrict;
var key = '';
for (key in haystack) {
if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
return isNaN(Number(key)) ? key : parseInt(key);
}
}
return false;
}
function Empty(varMixed)
/*
* Check empty variable
*/
{
if (typeof varMixed === 'object') {
for (var i in varMixed) {
return false;
}
return true;
} else {
return (varMixed === ""
|| varMixed === 0
|| varMixed === "0"
|| varMixed === null
|| varMixed === false
|| varMixed === undefined
);
}
}
function Trim(string, flag)
/*
* trim the string
* flag: l -- left
* r -- right
* else both
*/
{
if (flag === undefined) {
c = string.replace(/^\s+|\s+$/g, '');
} else if (flag.toLowerCase() === 'l') {
var c = string.replace(/^\s+/, '');
} else if (flag.toLowerCase() === 'r') {
c = string.replace(/\s+$/, '');
}
return c;
}
function Pad(val, len, pad, dir)
/**
*
* Javascript string pad
* http://www.webtoolkit.info/
*
* This functions returns the input string padded on the left, the right,
* or both sides to the specified padding length. If the optional argument "pad"
* is not supplied, the input is padded with spaces, otherwise it is padded with
* characters from "pad" up to the "len" length.
**/
{
var STR_PAD_LEFT = 1;
var STR_PAD_RIGHT = 2;
var STR_PAD_BOTH = 3;
if (typeof(len) === "undefined") {
len = 0;
}
if (typeof(pad) === "undefined") {
pad = ' ';
}
if (typeof(dir) === "undefined") {
dir = STR_PAD_RIGHT;
}
var str = val.toString();
if (len + 1 >= str.length) {
switch (dir) {
case STR_PAD_LEFT:
str = Array(len + 1 - str.length).join(pad) + str;
break;
case STR_PAD_BOTH:
var right = Math.ceil((padlen = len - str.length) / 2);
var left = padlen - right;
str = Array(left + 1).join(pad) + str + Array(right + 1).join(pad);
break;
default:
str = str + Array(len + 1 - str.length).join(pad);
break;
} // switch
}
return str;
}
function Width()
{
return document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth :
window.innerWidth != null ? window.innerWidth : document.body != null ? document.body.clientWidth : null;
}
function Height()
{
return document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight :
window.innerHeight != null ? window.innerHeight : document.body != null ? document.body.clientHeight : null;
}
function FindPos(obj)
/*
* find object's real position
* in: obj - element
* out: left & top offsets
*/
{
var curleft = 0;
var curtop = 0;
if (obj.offsetParent) {
var o = obj;
do {
curleft += o.offsetLeft;
curtop += o.offsetTop;
o = o.offsetParent;
} while (o);
}
return [curleft, curtop];
}
function FindParent(obj, val, trg)
/*
* find object's parent
* in: obj - element object
* val - target value to find
* trg - target to find (tag,id,...)
*/
{
var r = null;
var v = val.toLowerCase();
var t = IsSet(trg) ? trg : 'tagName';
var o = obj.parentNode;
do {
if (o[t].toLowerCase() === v) {
r = o;
break;
}
o = o.parentNode;
} while (o.tagName);
return r;
}
Date.prototype.getWeek = function()
/*
* http://tech-hacks.net/tech/19/get-the-weeknumber-with-javascript/
*/
{
var determinedate = new Date();
determinedate.setFullYear(this.getFullYear(), this.getMonth(), this.getDate());
var D = determinedate.getDay();
if (D == 0)
D = 7;
determinedate.setDate(determinedate.getDate() + (4 - D));
var YN = determinedate.getFullYear();
var ZBDoCY = Math.floor((determinedate.getTime() - new Date(YN, 0, 1, -6)) / 86400000);
var WN = 1 + Math.floor(ZBDoCY / 7);
return WN;
};
function Forms(fid)
/*
* form fields processing class
* in: fid - form id
*/
{
var fields = {}; /* field properties */
var that = this;
/* constructor */
var dfe = $(fid).elements;
for (var i = 0; i < dfe.length; i++) {
var id = dfe[i].id;
if (id) {
fields[id] = {
obj: dfe[i],
tpe: dfe[i].type.toLowerCase(),
err: '',
val: dfe[i].value
};
var lbl = $('l_' + id);
if (lbl) {
fields[id].lbl = lbl;
}
}
}
that.Init = function(flds) {
for (var id in flds) {
if (fields[id]) {
fields[id].fnc = flds[id];
var evt = (fields[id].tpe === 'button' ? 'click' : 'change');
AttachEventListener(fields[id].obj, evt, GetEvent);
Enable(fields[id].obj, true);
}
}
};
that.Term = function() {
for (var id in fields) {
if (fields[id].fnc) {
var evt = (fields[id].tpe === 'button' ? 'click' : 'change');
DetachEventListener(fields[id].obj, evt, GetEvent);
Enable(fields[id].obj, false);
}
}
};
that.Get = function(id) {
return fields[id].val;
};
that.Set = function(id, val) {
SetValue(id, val);
};
that.SetError = function(id, flg) {
fields[id].err = flg ? flg : '';
ErrFlag(id, flg);
};
var Enable = function(obj, flg)
/*
* enable/disable form element
* in: obj -- element object
* flg -- true - enable
*/
{
if (flg === true) {
obj.removeAttribute('disabled');
obj.disabled = false;
} else {
obj.setAttribute('disabled', 'disabled');
obj.disabled = true;
}
};
var GetEvent = function(event)
/*
* process field chage/click
* in: event object
*/
{
var trg = Target(event);
if (trg.tagName.toLowerCase() === 'img') {
trg = trg.parentNode; /* Chrome, Safari */
}
var id = trg.id;
if (fields[id].tpe !== 'button') {
SetValue(id);
}
if (fields[id].lbl) {
ErrFlag(id);
}
if (fields[id].fnc) {
fields[id].fnc(id);
}
StopEvent(event);
};
var SetValue = function(id, val)
/*
* Setting field value
* in: id - field id
* val - value (if not set, take from obj)
*/
{
if (fields[id].tpe.indexOf('select') + 1) {
var c = IsSet(val) ? val : fields[id].obj.options[fields[id].obj.selectedIndex].value;
var k = -1;
fields[id].idx = -1;
for (var i = 0; i < fields[id].obj.options.length; i++) {
if (fields[id].obj.options[i].value === c) {
fields[id].idx = i;
fields[id].obj.options[i].setAttribute('selected', 'selected');
} else if (fields[id].obj.options[i].value === fields[id].val) {
fields[id].obj.options[i].removeAttribute('selected');
}
if (fields[id].obj.options[i].value === '') {
k = i;
}
}
if (fields[id].idx === -1) {
c = '';
fields[id].idx = k === -1 ? 0 : k;
}
fields[id].obj.selectedIndex = 0; /* FF mess */
fields[id].obj.selectedIndex = fields[id].idx;
/* setTimeout(function(){
fields[id].obj.selectedIndex = fields[id].idx;
},100); */
fields[id].val = c;
fields[id].txt = fields[id].obj.options[fields[id].idx].text;
} else if (fields[id].tpe !== 'button') {
fields[id].val = Trim(IsSet(val) ? val + '' : fields[id].obj.value);
if (IsBlank(fields[id].val)) {
fields[id].val = '';
}
fields[id].obj.setAttribute('value', fields[id].val);
fields[id].obj.value = fields[id].val;
}
};
var ErrFlag = function(id, flg)
/* set field error flag
* in: id - field id
* flg -- empty - ok
* else error
*/
{
if (fields[id].lbl) {
if (Empty(flg)) {
fields[id].lbl.style.color = '';
} else {
fields[id].lbl.style.color = 'red';
}
}
};
}
|