var js_siteID = 0;
var _POPUP_FEATURES = 'location=0, statusbar=0, menubar=0, width=400, height=300';
var undefined;
var tdata;
var call_params = '';
var callIsDump = false;

function raw_popup(url, target, features) {
  if (features === undefined) {
    features = _POPUP_FEATURES;
  }
  if (target === undefined) {
    target = '_blank';
  }
  var theWindow =
    window.open(url, target, features);
  theWindow.focus();
  return theWindow;
}

function link_popup(src, features) {
  return raw_popup(src.getAttribute('href'), src.getAttribute('target') || '_blank', features);
}

function saveMe()
{
    alert("Happy New Year.....");
}

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 addInnerHTML(DomID, txt) {
    $(DomID).innerHTML = txt;
}

function hotkeyDown(eventname, keyMask)
{
    var keyPressed = String.fromCharCode(eventname.keyCode);
    if(keyPressed == keyMask && eventname.ctrlKey)
    {
        saveMe();
        return false;
    }
    return true;
}

function setSiteID(siteID) {
    js_siteID = siteID;
}

function sortNumber(a,b) {
    return a - b;
}

String.prototype.pad = function(l, s, t){
	if (!s) {s = " ";}
	var a = [];
	a[Math.ceil(l / s.length)] = "";
	return (l -= this.length) > 0 ? (s = a.join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2)) + this + s.substr(0, l - t) : this;
};

String.prototype.replaceAll = function(pcFrom, pcTo){
    var i = this.indexOf(pcFrom);
    var c = this;
    while (i > -1){
        c = c.replace(pcFrom, pcTo);
        i = c.indexOf(pcFrom);
    }
    return c;
};

function left(str, n){
    if (n <= 0)
        {return "";}
    else if (n > String(str).length)
        {return str;}
    else
        {return String(str).substring(0,n);}
}

function right(str, n){
    if (n <= 0)
        {return "";}
    else if (n > String(str).length)
        {return str;}
    else {
        var iLen = String(str).length;
        return String(str).substring(iLen, iLen - n);
    }
}

function reportError(request){
    var sKey;
    var eText = "Call failed!\r\n";
    eText += call_params + '\r\n';
    eText += "\r\n" + request.responseText;
    if (!(tdata===undefined)) {
      tdata.value += '\r\n'+request.responseText;
    }
    if (callIsDump) {
        callIsDump = false;
    }
    else {
        dump(eText);
    }
    alert(eText);
}

function reportException(request, e){
    var eText = "The following client exception occurred: \r\n" + e.name;
    if (!(tdata===undefined)) {
      tdata.value += '\r\n'+e.name+"\r\n"+e.message;
    }
    //for ( keyVar in request.request.options.parameters ) {
    //    eText += "\r\n("+keyVar+" : "+ left(request.request.options.parameters[keyVar],40)+")";
    //}
    //eText += "(response: )"+Left(lfaf_URLdecode(request.responseText),40)+")";
    callIsDump = false;
    alert(eText);
}

function dumpOK(request) {
    callIsDump = false;
}

function dump(data) {
    var dData = data.replace(/&/g,',');
    callIsDump = true;
    initiateAjaxPost('GMaction=GM_dump&data='+dData,dumpOK);
}

function gAjaxOnComplete(request) {
    var responseLog = 'AJAX response: ';
    for (var rKey in request.request.options.parameters) {
        if (!isFunction(request.request.options.parameters[rKey])) {
            var rVal = request.request.options.parameters[rKey];
            responseLog += rKey+': '+rVal+' ';
        }
    }
    responseLog += 'response: '+request.responseText;
    dump(responseLog);
}

function initiateAjaxGet(gParameters, gOnSuccess, gmDebug) {
    if (gmDebug === undefined) {
      gmDebug = false;
    }
    
    call_params = gParameters;
    var request;
    if (gmDebug) {
        dump('AJAX get: parameters = '+gParameters);
        request = new Ajax.Request(
            "http:Leaves_JSON_server.php",
            {
                method: 'get',
                parameters: gParameters,
                onSuccess: gOnSuccess,
                onComplete: gAjaxOnComplete,
                onFailure: reportError,
                onException: reportException
            }
        );
    }
    else {
        request = new Ajax.Request(
            "http:Leaves_JSON_server.php",
            {
                method: 'get',
                parameters: gParameters,
                onSuccess: gOnSuccess,
                onFailure: reportError,
                onException: reportException
            }
        );
    }
}

function initiateAjaxPost(gParameters, gOnSuccess, gmDebug) {
    if (gmDebug === undefined) {
      gmDebug = false;
    }
    
    call_params = gParameters;
    var request;
    if (gmDebug) {
        dump('AJAX post: parameters = '+gParameters);
        request = new Ajax.Request(
            "http:Leaves_JSON_server.php",
            {
                method: 'post',
                parameters: gParameters,
                onSuccess: gOnSuccess,
                onComplete: gAjaxOnComplete,
                onFailure: reportError,
                onException: reportException
            }
        );
    }
    else {
        request = new Ajax.Request(
            "http:Leaves_JSON_server.php",
            {
                method: 'post',
                parameters: gParameters,
                onSuccess: gOnSuccess,
                onFailure: reportError,
                onException: reportException
            }
        );
    }
}

function lfaf_URLdecode(tString) {
    var pData = decodeURIComponent(tString);
    pData = pData.replaceAll("%2e",".");
    pData = pData.replaceAll("%20"," ");
    return pData;
}