<!--

/*
	+-----------------------------------------------------------+
	| co|manager - Content Management System - $Release$		|
	+-----------------------------------------------------------+
	| Copyright (c) 2004-2005 clarksdale datendesign			|
	| http://www.comanager.de | http://www.clarksdale.de		|
	| Please read the file LICENCE for more information.		|
	+-----------------------------------------------------------+
	| Authors: Matthias Lienau <ml@clarksdale.de>				|
	+-----------------------------------------------------------+
	
	@svnid:		$Id: base_effects.js 594 2005-09-26 15:05:39Z cdale $
	@svnurl:	$URL: svn://localhost/comanager/core/trunk/lib/jss/base_effects.js $
	@since:		2004/09/29
	@purpose:	Javascript lib for some basic visual effects
	
*/

/**
 * Browser check constants
 */

var is_ie		= (/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent));
var is_ie5		= (is_ie && /msie 5\.0/i.test(navigator.userAgent));
var is_mozilla	= (/Mozilla/i.test(navigator.userAgent) && (! is_ie) && (! is_ie5)) ;
var is_opera	= /opera/i.test(navigator.userAgent);
var is_khtml	= /Konqueror|Safari|KHTML/i.test(navigator.userAgent);

/**
* Raise a confirm dialog for given link.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_confirmLink(text,link)
{	
	if (confirm(text)) {
		this.document.location.href = link;
		return 1;
	}
}

/**
* Raise a confirm dialog for given link which is opened in window opener.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_winOpenerConfirmLink(text,link,closeactwin)
{	
	if (confirm(text)) {
		parent.window.opener.document.location.href = link;
		if (closeactwin) {
			window.close();
		}
		return 1;
	}
}

/**
* Open a window.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_openWin(url,nam,w,h,rs,sb)
{ 
	if (rs == "") rs = "no";
 	if (sb == "") sb = "no";
 
	par = "status=no,resizable=" + rs + ",scrollbars=" + sb + ",width=" + w + ",height=" + h;
	cm_win = window.open(url,nam,par);
//	cm_win.focus();
	window.setTimeout("cm_win.focus()",50);
	
	return;
}

/**
* Reload parent opener window document.
*
* @access public
*/

function cm_reloadWinOpener()
{	
	if (parent.window.opener) {
		parent.window.opener.document.location.reload();
	}
}

/**
* Check / Uncheck all all form checkboxes (optionally match given prefix).
*
* @return true
*
* @access public
*/

function cm_ff_checkall(check,pfx)
{	
	ifields = document.getElementsByTagName('input');
	
	for (i = 0; i < ifields.length; i++) {
		
		if (ifields[ i ].type == 'checkbox') {
			
			if (pfx != '') {
				if (ifields[ i ].id.substring(0,5) == pfx) {
					ifields[ i ].checked = check;
				}
			} else {
				ifields[ i ].checked = check;
			}
		}
	}
	
	return;
}

/**
* Decode an email address that is b64 encoded for antispam purposes.
*
* @return decoded address
*
* @access public
*/

function cm_decodeMA(name,domain) 
{ 
	ret  = cm_base64decode(name) + '@' + cm_base64decode(domain);
	return ret;
}

/**
* Get a ma/1t0 link for b64 decoded mail address :).
*
* @return mail link for decoded address
*
* @access public
*/

function cm_getdecMLink(name,domain) 
{ 
	document.location.href = 'mailto:' + cm_decodeMA(name,domain);
}

/**
* Push a value to given field.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_push2Form(form,field,value,submit)
{	
	form[ field ].value = unescape(value);
	
	if (submit) {
		form.submit();	
	}
}

/**
* Insert a new value into select field and resort it.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_addOption(form,field,value,text)
{	
	myopt = new Option(text,value,false,true);
	
	//alert(form[ field ].options[ 155 ].text);return 1;
	
	form[ field ].options[ form[ field ].options.length ] = myopt;
	return true;
}

/**
* Handle media attach/detach events.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_post_Media_AD(frm,act,mtd,ctx,val) 
{ 
	frm[ 'mj_action' 	].value = act;
	frm[ 'mj_method' 	].value = mtd;
	frm[ 'mj_context' 	].value = ctx;
	frm[ 'mj_value' 	].value = val;
	
	frm.submit();
	return 1;
}

/**
* Handle collection items attach/detach events.
*
* @return true if confirmed, false otherwise
*
* @access public
*/

function cm_submit_CollectionAction() 
{
	sfld = document.forms.itask.elements[ 'itask_collection' ];
	idval = sfld[ sfld.selectedIndex ].value;
	
	dfrm = document.forms.itemlist;
	dfrm.elements[ 'action' ].value = 'attach';
	dfrm.elements[ 'coll_id' ].value  = idval;
	dfrm.submit(); 
}

/**
* base64 encoding / decoding functions
*/ 

var EOI = -1;

var b64chars = new Array(
	'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
	'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
	'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
	'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/'
);

var revb64chars = new Array();

for (var c = 0; c < b64chars.length; c++) {
    revb64chars[ b64chars[ c ] ] = c;
}

var b64str;
var b64cnt;

function cm_ntos(n)
{
    n = n.toString(16);
    if (n.length == 1) n = "0" + n;
    n = "%" + n;
    return unescape(n);
}


function cm_base64setstr(str) 
{	
    b64str = str;
    b64cnt = 0;
}

function cm_base64read()
{  
    if (! b64str) return EOI;
    if (b64cnt >= b64str.length) return EOI;
    
    var c = b64str.charCodeAt(b64cnt) & 0xff;
    b64cnt++;
    
    return c;
}

function cm_base64encode(str) 
{
    cm_base64setstr(str);
    
    var res	= '';
    var buff = new Array(3);
    var lencnt = 0;
    var done = false;
    
    while (! done && (buff[ 0 ] = cm_base64read()) != EOI) {
    	
        buff[ 1 ] = cm_base64read();
        buff[ 2 ] = cm_base64read();
        res += (b64chars[ buff[ 0 ] >> 2 ]);

        if (buff[ 1 ] != EOI) {
            res += (b64chars [(( buff[ 0 ] << 4 ) & 0x30) | (buff[ 1 ] >> 4) ]);
            
            if (buff[ 2 ] != EOI) {
                res += (b64chars [((buff[ 1 ] << 2) & 0x3c) | (buff[ 2 ] >> 6) ]);
                res += (b64chars [buff[ 2 ] & 0x3F]);
            } else {
                res += (b64chars [((buff[ 1 ] << 2) & 0x3c)]);
                res += ('=');
                done = true;
            }
        } else {
            res += (b64chars [(( buff[ 0 ] << 4 ) & 0x30)]);
            res += ('=');
            res += ('=');
            done = true;
        }
        
        lencnt += 4;
        
        if (lencnt >= 76){
            res += ('\n');
            lencnt = 0;
        }
    }
    
    return res;
}

function cm_base64readrev()
{
    if (! b64str) return EOI;
    
    while (true) {
    	   
        if (b64cnt >= b64str.length) return EOI;
        var nextChar = b64str.charAt(b64cnt);
        
        b64cnt++;
        
        if (revb64chars[ nextChar ]) {
            return revb64chars[ nextChar ];
        }
        
        if (nextChar == 'A') return 0;
    }
}

function cm_base64decode(str)
{
    cm_base64setstr(str);
    
    var res = "";
    var buff = new Array(4);
    var done = false;
    
    while (! done && (buff[ 0 ] = cm_base64readrev()) != EOI
        && (buff[ 1 ] = cm_base64readrev()) != EOI) {
        	
        buff[ 2 ] = cm_base64readrev();
        buff[ 3 ] = cm_base64readrev();
        
        res += cm_ntos((((buff[ 0 ] << 2) & 0xff)| buff[ 1 ] >> 4));
        
        if (buff[ 2 ] != EOI) {
            res += cm_ntos((((buff[ 1 ] << 4) & 0xff)| buff[ 2 ] >> 2));
            if (buff[3] != EOI) {
                res += cm_ntos((((buff[ 2 ] << 6)  & 0xff) | buff[ 3 ]));
            } else {
                done = true;
            }
        } else {
            done = true;
        }
    }
    
    return res;
}

//-->
