$(function() {
	if( window.init ) {
		init();
	}
} );

document.oncontextmenu = function( e ) {
	e = e || window.event;
	var comp = e.srcElement || e.target;
	if( comp.tagName == "IMG" ) {
    	onRightClick();
		return false;
	} else {
		return true;
	}
}
function onRightClick() {
    showError( "Copyrights Pretty Pregnant 2010" );
}


function initCalendar() {
    var calendar = $("#dueDateText").datepicker(
        {
            defaultDate: "+8m",
            maxDate: "+40w",
            minDate: "-3y"
        }
    );
	var date = $("#dueDate").val();
	if( date ) {
		calendar.datepicker( 'setDate', new Date( parseInt( date ) * 1000 ) );
	}
    return calendar;
}

function readCalendar( calendar ) {
    var date = calendar.datepicker( 'getDate' );
    form.dueDate.value = date ? date.getTime() / 1000 + 43200 : ''; // mid-day, to avoid timezone shifts
}

function showError( msg ) {
	var errorBox = document.getElementById( 'errorBox' );
	var errorMsg = errorBox.getElementsByTagName('div')[0];
	errorMsg.innerHTML = '';
	errorMsg.appendChild( document.createTextNode( msg ) );
	errorBox.style.display = 'block';
    setTimeout( function() {
        document.body.onmousemove = function() {
		    errorBox.style.display = 'none';
		    document.body.onmousemove = null;
        };
    }, 1000 );
}

function checkEmpty( field, msg )
{
	if( !field || field.disabled )
	{
		return;
	}
	if( field.onfocus && field.onblur && field.value == field.defaultValue
		|| field.value.replace( /\s/g, "" ).length == 0 )
	{
		throw { field: field, msg: msg };
	}
}

function checkNumeric( field, msg, allowDot )
{
	if( !field || field.disabled || field.readOnly )
	{
		return;
	}
	var text = field.value;
	if( !text || !text.length || text.length == 0 )
	{
		return;
	}
	for( var i = 0; i < text.length; i++ )
	{
		var ch = text.charCodeAt( i );
		if( ( ch < 48 || ch > 57 ) && !( ch == 46 && allowDot ) )
		{
			throw { field: field, msg: msg };
		}
	}
	return;
}

function checkFloat( field, msg )
{
	if( !field || field.disabled || field.readOnly )
	{
		return;
	}
	checkNumeric( field, msg, true );
	if( field.value.indexOf( '.' ) != field.value.lastIndexOf( '.' ) )
	{
		 throw { field: field, msg: msg };
	}
}

function checkRegexp( field, expr, msg )
{
	if( !field || field.disabled || field.readOnly )
	{
		return;
	}
	var match = field.value.match( expr );
	if( !match || match.length != 1 )
	{
		throw { field: field, msg: msg };
	}
}

function checkEmail( field, msg )
{
	msg = msg || "Invalid e-mail address";
	checkRegexp( field, /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i, msg )
}

function checkLogin( form, noPwd ) {
    checkEmpty( form.email, "Please enter your e-mail address" );
    //checkEmail( form.email );
    if( !noPwd ) {
        checkEmpty( form.password, "Please enter your password" );
    }
}

function checkAccount( form ) {
    checkEmpty( form.firstName, "Please enter your first name" );
    checkEmpty( form.lastName, "Please enter your last name" );
    checkEmpty( form.phone, "Please enter your telephone number" );

    checkEmpty( form.address1, "Please enter your street address" );
    checkEmpty( form.city, "Please enter your city" );

    checkEmpty( form.zip, "Please enter your postcode" );
}

function setFieldValue( field, value )
{
    if( !field )
    {
        return; // Not a form field
    }
    
    if( value instanceof Array && field[0] !== undefined ) { // multiple fields
		for( var i = 0; i < value.length; i++ ) {
			setFieldValue( field[i], value[i] );
		}
		return;
    }
    
    if( field.length !== undefined && field.type === undefined ) // radio
    {
        for( var i = 0; i < field.length; i++ )
        {
            if( field[i].value == value )
            {
                field[i].checked = true;
                break;
            }
        }
    }
    else if( field.type == "checkbox" ) // checkbox
    {
        field.checked = (value == field.value);
    }
    else if( field.multiple ) // multi-select
    {
        for( var i = 0; i < field.options.length; i++ )
        {
            field.options[i].selected = false;
            var val = field.options[i].value;
            for( var j = 0; j < value.length; j++ )
            {
                if( val == value[j] )
                {
                    field.options[i].selected = true;
                    break;
                }
            }
        }
    }
    else // input, single-select
    {
        field.value = value;
    }

    if( field.onchange && (!field.className || field.className.indexOf( "noChange" ) < 0) )
    {
        field.onchange();
    }
    if( field.onclick && field.type != "submit" && !field.readOnly )
    {
        field.onclick();
    }
}

function getFieldValue( field )
{
	if( field.length !== undefined && field.type === undefined ) // radio
	{
		for( var i = 0; i < field.length; i++ )
		{
			if( field[i].checked )
			{
				return field[i].value;
			}
		}
		return null; // No radio button selected
	}
	else if( field.type == "checkbox" ) // checkbox
	{
		return field.checked ? field.value : null; // unchecked
	}
	else if( field.multiple ) // multi-select
	{
		var value = [];
		for( var i = 0; i < field.options.length; i++ )
		{
			if( field.options[i].selected )
			{
				value.push( field.options[i].value );
			}
		}
		return value;
	}
	else // input, single-select
	{
		return field.value;
	}
}

function checkClearFocus( edt ) {
    if( edt.value == edt.defaultValue ) {
        edt.value = '';
    }
}

function checkClearBlur( edt ) {
    if( edt.value == '' ) {
        edt.value = edt.defaultValue;
    }
}

function checkClearSubmit( edt ) {
    edt.disabled = edt.value == edt.defaultValue;
}

function getPosition( comp ) {
	var left = 0;
	var top = 0;
	while( comp.offsetParent ) {
		left += comp.offsetLeft;
		top += comp.offsetTop;
		comp = comp.offsetParent;
	}
	return { left: left, top: top };
}

function addEllipsis( node ) {
	var parent = node.parentNode;
	var text = node.innerHTML;
	for( var i = text.length - 1; node.offsetHeight > parent.offsetHeight; i-- ) {
		node.innerHTML = text.substr( 0, i ) + "...";
	}
}

function consumeEvent( ev ) {
	ev = ev || window.event;

	ev.cancelBubble = true;
	ev.returnValue = false;

	if( ev.stopPropagation ) {
		ev.stopPropagation();
	}

	if( ev.preventDefault ) {
		ev.preventDefault();
	}

	if( ev.stopEvent ) {
		ev.stopEvent();
	}
}
