/*
 * VARIABLES
 *
 *
 * FUNCTIONS:
 * pgCmd()
 * cmd_EditWin()
 * meregeParamList()
 * encodeParamList()
 * showWindow()
 *
 */

var winlist = new Array(); // list of windows
var MRES_OK        = 1;
var MRES_CANCEL    = 0;  
var CMD_ACT_RELOAD = 1;

/*
* Function: getel()
*/
function getel(id) {  return document.getElementById(id); }

/* Function: setelv() */
function setelvv( el, v ) {
    var el = getel(el);
    if (el) el.value = v;
}

/* Function: jumpTo() */
function jumpTo(url) {
    if ( ! url )
        window.location.reload();
    else
        window.location.href = url;
}

/*
* String functions
*/
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function splitPlist( alist ) {
  var res = new Array();
  var i;
  for (i=1; i<alist.length; i+=2 ) {
    res[ alist[i] ] = alist[i+1];
  }
  return res;
}

/* Function: pgCmd() */
function pgCmd( cmd, akey, aval, plist, opts ) {    
    var fm = document.fmcmd;
    
    /* debug alert if local */
    if (ylocal) alert('cmd: ' + cmd + ' akey:' + akey + ' aval:' + aval + ' plist:' + plist + ' opts:' + opts);
     
    /* split options */     
    if (opts && opts[0] == '/:') {
        opts = splitPlist(opts);
    }
    
    /* requires confirm? */
    if ( opts && opts['confirm']) {
        if ( ! confirm( opts['confirm'] ) ) return false;
    }    
    
    if ( cmd == 'CMD_EDITWIN' ) {
        cmd_EditWin( akey, aval, plist, opts );
        return false;
    }
    if ( cmd == 'CMD_SHOWPAGE' ) {
        cmd_ShowPage( akey, aval, plist, opts );
        return false;
    }
  
    if ( opts && opts['action']) fm.action = opts['action'] ;  

    if ( opts && opts['ask']) {
        var def = '';
        if ( opts['def'] ) def = opts['def'];
        var v = prompt( opts['ask'], def );
        if (!v || v.length == 0 || v.trim() == '') return false;
        aval = v.trim();        
    }

//    return false;
    
    fm.CMS9CMD.value = cmd;
    fm.AKEY.value = akey;
    fm.AVALUE.value = aval;
    fm.PLIST.value = plist;
    // opts ????
    fm.submit();   
    return false;
}

/* Function: cmd_EditWin() */
function cmd_EditWin( akey, aval, plist, opts ) {
    var wintitle = akey;
    var winurl = CMS9_APPROOT + 'index.php?pid=cms9edit&AKEY=' + escape(akey) + '&AVAL=' + escape(aval);
    var winname = akey;
    var winopts = 'left=20,top=20,width=700,height=500,scrollbars=1,resizable=1';
    showWindow( winurl, winname, wintitle, winopts, 'cback_EditWin', plist )
}

/* Function: cmd_ShowPage() */
function cmd_ShowPage( akey, aval, plist, opts ) {
    var wintitle = akey;
    var winurl = CMS9_APPROOT + 'index.php?pid=' + escape(akey);
    var winname = akey;
    var w = 700;
    var h = 500;
    var scb = '';
    var rsz = '';
    if (opts && opts[0] == '/:') {
        opts = splitPlist(opts);
    }
    if (opts && opts['width']) w = opts['width'];
    if (opts && opts['height']) h = opts['height'];
    if (opts && opts['scrollbars']) scb = ',scrollbars=1';
    if (opts && opts['resizable']) rsz = ',resizable=1';
    var winopts = 'left=20,top=20,width=' + w + ',height=' + h + scb + rsz;
    showWindow( winurl, winname, wintitle, winopts, false /*'cback_ShowWin'*/, plist );
}

/* Function: cback_EditWin() */
function cback_EditWin( modalresult, result, action, plist ) {
    switch (action) {
    case 'reload' :
        jumpTo();
        break;
    }
}


/* Function: mergeParamList()
 * ??? shoukld use preg_replace for parameters substitution
 * ??? bug on page.php?  (? with no params)
 */
function mergeParamList( url, paramlist ) {
    var pl = encodeParamList( paramlist );
    if (pl != '') {
        if ( url.indexOf('?') >= 0 ) {
            url += '&' + pl;
        } else {
            url += '?' + pl;
        }
    }
    return url;
}

/* Function: encodeParamList() */
function encodeParamList( paramlist ) {
    if (! paramlist ) return '';    
    var res = '';
    if (paramlist[0] && paramlist[0] == '/:') {
        // encode "plain" parameter list
        for (var i = 1; i < paramlist.length; i+=2) {
            res += escape(paramlist[i]) + '=' + escape( paramlist[i+1] );        
        }
    }
    else {
        for (var key in paramlist) {
            if (res != '') res += '&';
            res += escape(key) + '=' + escape( paramlist[key] );
        }
    }
    return res;
}

/* Function: showWindow() */
function showWindow( winurl, winname, wintitle, winopts, callbackfun, paramlist ) {
    var w;
    if ( winlist[winname] ) {
        winlist[winname].close();
    }
    var c = new Array();
    c['cback'] =  callbackfun;
    winurl = mergeParamList( winurl, paramlist );
    winurl = mergeParamList( winurl, c );
    w = window.open( winurl, winname, winopts );
    if (w) {
        winlist[winname] = w;
        w.focus();
    }
}

/* generic pick flag function */
function pickEditFlag( id, bit, checked) {
  var el = getel(id);
  if (el) {
    var value = el.value;
    if (checked)
      value |= 1 << bit;
    else
      value &= ~(1 << bit);
    el.value = value;
  }
}

/* ============================================== */
/* ==== JLibCommon library ====================== */
/* ============================================== */
function JLibCommon() {

    /* ==== rand() ============================== */
    // returns a random number [min,max]
    this.rand = function(min, max) {
        if (max <= min) return min;
        var ran_number = Math.floor(Math.random()*(max-min+1));
        return ran_number + min;
    }
    
    /* ==== padl() ============================== */
    // left padding
    this.padl = function( str, n, padchar ) {
        var i;
        var s = '' + str;
        var k = str.length;
        for (i = k; i < n; i++) {
            s = padchar + s;
        }
        return s;
    }

    /* ==== padr() ============================== */
    // right padding
    this.padr = function( str, n, padchar ) {
        var i;
        var s = '' + str;
        var k = str.length;
        for (i = k; i < n; i++) {
            s = s + padchar;
        }
        return s;
    }
    
    this.trim = function( str ) {    
        var n, i, s, a, b;
        if (typeof(str) != "string") return str;
        n = str.length;
        i = 0;
        a = 0;
        b = n;
        while (a < n && str.charAt(a) == ' ') a++;
        while (b > 0 && b > a && str.charAt(b-1) == ' ') b--; 
        if (b == 0) return '';
        return str.substr(a,b-a);        
    }
    
    
    /* ==== d2h() =============================== */
    // decimal to hexadecimal conversion
    var hD="0123456789abcdef";
    this.d2h = function (d, bit) {
        var hbit = d & 0x80000000;
        d = d & 0x7fffffff;
        var h = hD.substr(d&15,1);
        while(d>15) {
            d>>=4;
            if (hbit) {
                d |= 0x08000000;
                hbit = 0;
            }
            h=hD.substr(d&15,1)+h;
        }
        if (bit) {
            var p = 2;
            switch(bit) {
            case 16 : p = 4; break;
            case 24 : p = 6; break;
            case 32 : p = 8; break;
            }
            h = this.padl( h, p, '0' );
        }
        return h;
    }
    this.h2d = function(h) {return parseInt(h,16);}
    
    
}
var jlib_common = new JLibCommon();
