/** 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 SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path = (argc > 3) ? argv[3] : null;
    var domain = (argc > 4) ? argv[4] : null;
    var secure = (argc > 5) ? argv[5] : false;

    document.cookie = name + "=" + escape (value) +
        ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
        ((path == null) ? "" : ("; path=" + path)) +
        ((domain == null) ? "" : ("; domain=" + domain)) +
        ((secure == true) ? "; secure" : "");
}

function getCookieVal (offset) {
    var endstr = document.cookie.indexOf (";", offset);

    if (endstr == -1)
        endstr = document.cookie.length;

    return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
        var j = i + alen;

        if (document.cookie.substring(i, j) == arg)
            return getCookieVal (j);

        i = document.cookie.indexOf(" ", i) + 1;

        if (i == 0) break;
    }

    return null;
}

function hasCookies()
{
    if( navigator !== undefined ) {
        if( navigator.cookieEnabled !== undefined )
            return navigator.cookieEnabled;
    }

    SetCookie( "cootest", "test" );
    if( GetCookie( "cootest" ) == "test" ) {
        SetCookie( "cootest", "", -1 );
        return true;
    }

    return false;
}

function windNav(windId, pos)
{
	var el = document.getElementById( windId );
	if( !el ) return;
	el.scrollTop = pos;
}

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 findElementIn(parent, ty, cl)
{
	var res = new Array();
	var els = parent.getElementsByTagName( ty );
	
	for( var j = 0; j < els.length; j ++ ) {
		var cn = "";
		
		if( els[ j ].className !== undefined ) {
			cn = els[ j ].className;
		} else if( els[ j ].getAttribute ) {
			cn = els[ j ].getAttribute( "class" );
		}

		if( cn == cl ) {
			res[ res.length ] = els[ j ];
		}		
	}
	
	if( res.length <= 0 )
		return null;
	else if( res.length == 1 )
		return res[ 0 ];
	
	return res;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

