/*
 * 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;
    
    if (ylocal) alert('cmd: ' + cmd + ' akey:' + akey + ' aval:' + aval + ' plist:' + plist + ' opts:' + opts);
    if (opts && opts[0] == '/:') {
        opts = splitPlist(opts);
    }
    
    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'] ;  
   
//    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_ROOT + 'edit.php?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();
    }
}
