/** generic routines **/

function getPageCoords (element) 
{
    var coords = {x: 0, y: 0};
    
	while (element) {
		coords.x += element.offsetLeft;
		coords.y += element.offsetTop;
		element = element.offsetParent;
    }

    return coords;
}

function setEventHandler(element, evt, code)
{
    if( element.addEventListener ) {
	element.addEventListener( evt, code, true );
    } else if( element.attachEvent ) {
	element.attachEvent( "on" + evt, code );
    } else {
	/** this part is hard-coded for obvious reasons **/
	switch( evt ) {
	    case	"click"	    :
		element.onclick = code;
		break;

	    case	"change"    :
		element.onchange = code;
		break;

	    case	"unload"    :
		element.onunload = code;
		break;
	}
    }
}

function remEventHandler(element, evt, code)
{
    if( element.removeEventListener ) {
        element.removeEventListener( evt, code, true );
    } else if( element.detachEvent ) {
        element.detachEvent( "on" + evt, code );
    } else {
        switch( evt ) {
            case        "click"     :
                element.onclick = "";
                break;

            case        "change"    :
                element.onchange = "";
                break;

            case        "unload"    :
                element.onunload = "";
                break;

            case        "resize"    :
                element.onresize = "";
                break;
        }
    }
}

function getDocMetrics()
{
    var metrics = {
        offX : 0,
        offY : 0,
        width : 0,
        height: 0
    };
        
    if( window.pageXOffset !== undefined ) {
        metrics.offX = window.pageXOffset; 
    } else if( document.documentElement.scrollLeft !== undefined ) {
        metrics.offX = document.documentElement.scrollLeft;
    } else if( document.body.scrollLeft !== undefined ) {
        metrics.offX = document.body.scrollLeft;
    }   
    
    if( window.pageYOffset !== undefined ) {
        metrics.offY = window.pageYOffset;
    } else if( document.documentElement.scrollTop !== undefined ) {
        metrics.offY = document.documentElement.scrollTop;
    } else if( document.body.scrollTop !== undefined ) {
        metrics.offY = document.body.scrollTop;
    }   
        
    if( window.innerWidth ) {
        metrics.width = window.innerWidth ;
        metrics.height = window.innerHeight;
    } else if( document.documentElement.clientWidth ) {
        metrics.width = document.documentElement.clientWidth;
        metrics.height = document.documentElement.clientHeight;
    } else if( document.body.clientWidth ) {
        metrics.width = document.body.clientWidth;
        metrics.height = document.body.clientHeight;
    }
        
    return metrics;
}

function popWindow(url, width, height, target)
{
    var wnd = window.open( url, target, "status=no,toolbar=no,location=no,menubar=no,resizable=no,width=" + width + ",height=" + height );
    wnd.focus();
}

function onFoc(ct,tx)
{
    if( ct.value == tx )
	ct.value = "";
}

function onBlu(ct,tx)
{
    if( ct.value == "" )
	ct.value = tx;
}

function checknl(frm, emptyMail, errEmail)
{
	var em1 = frm[ "email" ];
    var filter=/^.+@.+\..{2,3}$/
	
	if( (em1.value == "") || (em1.value == emptyMail) ) {
		alert( errEmail );
		return false;
	} else if( !filter.test( em1.value ) ) {
		alert( errEmail );
		return false;
	}
	
	return true;
}

function findCssRule(withName)
{
	if( document.styleSheets ) {
		for (var j = 0; j < document.styleSheets.length; j++ ) {
			var sheet = document.styleSheets[ j ];
			var r = 0;
			var rule = false;
			
			do {
				if( sheet.cssRules ) {
					rule = sheet.cssRules[ r ];
				} else {
					rule = sheet.rules[ r ];
        		}

				if( rule ) {
					if( rule.selectorText.toLowerCase() == withName.toLowerCase() ) {
						return rule;
          			}
        		}
				
				r ++;
			} while( rule )
		}
	}

	return false;
}

function pixelValue(v)
{
	if( !v ) return 0;
	if( v === undefined ) return 0;
	if( v == "" ) return 0;

	var part = v.substr( 0, v.length-2 );

	if( isNaN( part ) )
		return part;
	
	return new Number(part);
}

function isIe()
{
    var msk = /MSIE (\d+\.\d+);/;
    if( msk.test(navigator.userAgent) ) {
        return true;
    } 
    return false;
}

function setClassName(el, cname)
{
        if( el.className !== undefined )
                el.className = cname;
        else if( el.setAttribute )
                el.setAttribute( "class", cname );
}

function getClassName(el)
{
	if( el.className !== undefined )
		return el.className;
	else if( el.setAttribute )
		return el.getAttribute( "class" );
	return false;
}

