 function isAlien(a) {
   return isObject(a) && typeof a.constructor != 'function';
}
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}
function isBoolean(a) {
    return typeof a == 'boolean';
}
function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}
function isFunction(a) {
    return typeof a == 'function';
}
function isNull(a) {
    return typeof a == 'object' && !a;
}
function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}
function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}
function isString(a) {
    return typeof a == 'string';
}
function isUndefined(a) {
    return typeof a == 'undefined';
}



///////////////////////////////////////////////

function getElementPosition ( elemId ) {

// Find the top and left coordinates of a browser positioned element

   var elem = document.getElementById( elemId );
   var coords = {left: 0, top: 0 };

   while ( elem ) {
      coords.left += elem.offsetLeft;
      coords.top += elem.offsetTop;
      elem = elem.offsetParent;
   }

   return coords;
}

function toDate(data) {     // input as YYYY-MM-DD, output as Date object
    var separator = "-";

    if ((data.charAt(4) != separator) || (data.charAt(7) != separator) || (data.length != 10))
        return new Date();

    if (isNotNumber(data.charAt(0)) || isNotNumber(data.charAt(1)) ||
            isNotNumber(data.charAt(2)) || isNotNumber(data.charAt(3)) ||
            isNotNumber(data.charAt(5)) || isNotNumber(data.charAt(6)) ||
            isNotNumber(data.charAt(8)) || isNotNumber(data.charAt(9))) {
		return new Date();
    }

    day = eval(data.charAt(8)+data.charAt(9));
    day = parseInt(day);
    mnth = eval(data.charAt(5)+data.charAt(6));
    mnth = parseInt(mnth);
    year = eval(data.charAt(0)+data.charAt(1)+data.charAt(2)+data.charAt(3));
    year = parseInt(year);

    if (mnth>12 || mnth<1)
        return new Date();

    // mnthArray[0] is january, mnthArray[11] is december
    mnthArray = new Array(31, isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31 ,31 ,30 ,31 ,30 ,31);

    // IE number months starting with january = 0
    mnth = mnth - 1;
    if (day > parseInt(mnthArray[parseInt(mnth)]))
        return new Date();

	return new Date(year, mnth, day);
}

function addLeadingZero(num,digits){
   var res = "" + num;
   digits = digits - res.length;
   while(digits-->0) res = "0" + res;
   return res;
}

function toMDY(data){      // input as Date, output as MM-DD-YY
   var separator = "/";
   var mydate = data;
   var res = "";
   var s = "";

   if (!isObject(mydate))    mydate = new Date();


   return addLeadingZero(mydate.getMonth()+1,2) + separator + addLeadingZero(mydate.getDate(),2) + separator + mydate.getFullYear();
}

function toYMD(data){      // input as Date, output as YYYY-MM-DD
   var mydate = data;

   if (!isObject(mydate))    mydate = new Date();

   return addLeadingZero(mydate.getFullYear(),4) + "-" + addLeadingZero(mydate.getMonth()+1,2) + "-" + addLeadingZero(mydate.getDate(),2)
}
