// Library Functions

// All the functions that should have been included in Javascript .....

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 (typeof a == 'object' && !!a) || isFunction(a);
}
function isString(a) {
    return typeof a == 'string';
}
function isUndefined(a) {
    return typeof a == 'undefined';
}

function isInteger(val){

	if (!isNumber(val)){return false}
	var x=val.toString();
	if (x=='') { return false}
	for(var i=0;i<x.length;i++){
		if(x.charAt(i)=='.'){
			return false;
			}
		}
	return true;
}

// End Library Functions

function GetCaretPosition(o){

	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate()
		r.moveStart('character', -o.value.length)
		return r.text.length
	} else {
		return  o.selectionEnd
	}

}

// VBscript equivalent functions
function left(str, n){
	if (n <= 0)     // Invalid bound, return blank string
		return "";
	else if (n > String(str).length)   // Invalid bound, return
		return str;                // entire string
	else // Valid bound, return appropriate substring
		return String(str).substring(0,n);
}

function chr(lngASCII){

	return String.fromCharCode(lngASCII);

}


// PHP equivalent functions
function strpos( haystack, needle, offset){
    // http://kevin.vanzonneveld.net
    // http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strpos/
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);
    // *     returns 1: 14
 
    var i = haystack.indexOf( needle, offset ); // returns -1
    return i >= 0 ? i : false;
}


