/**
 * base.js
 * 
 * base javascript library
 *
 * @author         Joseph Mastey <jmmastey@gmail.com>
 * @author         $Author: jmastey $
 * @version        $Id: base.js 241 2009-12-07 06:04:34Z evtsoft $
 * @package        evt
 * @subpackage     js
 * @copyright      Copyright (c) Joseph Mastey, 2007-
 */

pagesize = {
    'adjust'    : function() {
		if(!$.browser.msie || $.browser.msie && 7 == $.browser.version) {
			if(document.body.offsetHeight > $('#canvas').get(0).offsetHeight) {
				$('#canvas').get(0).style.minHeight = document.body.offsetHeight + "px";
			}
		}
	}//end adjust
};//end pagesize

validate = {
    'checkForm' : function() {    
		//no form extension. abort
		if(!$('input').fieldValue) { return true; }
		var cont = true;
		
		//check each required field in this form
		$('input.required, textarea.required', this).blur().each( function() {
			if(1 > ($(this).fieldValue()+"").length) {
				
				$(this).addClass('error');    
			
				if(cont) {
					validate.triggerError( this );
				}
				cont = false;
			} else {
				$(this).removeClass('error');
			}
		});	
		
		$('input.number, textarea.number, input.integer, textarea.integer', this).each(function() {
			var val = $(this).val();
			if(!val.match(/^([\d\.]+,?)+.?(\d+)?$/)) {
				
				$(this).addClass('error');
				
				if(cont) {
					validate.triggerNumberError( this );
				}
				cont = false;
			} else {
				$(this).removeClass('error');
			}
		});
		
		var emReg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,7})$/;
		$('input.email, textarea.email', this).each(function(){
			var val = $(this).val();
			if(!emReg.test(val)) {
				
				$(this).addClass('error');    
			
				alert("You have entered an invalid email. Please try again.");
				cont = false;
			} else {
				$(this).removeClass('error');
			}
		});
	
		return cont;
	},//end checkForm
        
    'triggerError'  : function( elem ) {
		//use label to get name
		var tgt = $('label[@for='+$(elem).attr('name')+']');
		var val = tgt.html();
		
		/** no valid label found. Give a generic message. */
		if($(elem).attr('reqmessage')) {
			alert($(elem).attr('reqmessage'));
		} else if(!val) {
			alert("You have not completed the entire form. Please go back and check to " +
			"make sure that you have completed the entire form before" +
			" you continue.");
		} else {
			var sp = val.lastIndexOf('>');
			if(-1 != sp) { sp = sp + 1; } else { sp = 0; }
			val = val.substring(sp, val.length);
			alert("'"+val+"' must be filled out. Please fill it out before continuing.");
		}
	},//end triggerError
        
    'triggerNumberError'    : function( elem ) {
		//use label to get name
		var tgt = $('label[@for='+$(elem).attr('name')+']');
		var val = tgt.html();
		
		/** no valid label found. Give a generic message. */
		if(!val) {
			alert("Please go back and make sure that all your entries are valid.");
		} else {
			var sp = val.lastIndexOf('>');
			if(-1 != sp) { sp = sp + 1; } else { sp = 0; }
			val = val.substring(sp, val.length);
			alert("'"+val+"' must be numeric. Please correct your input and try again.");
		}    
	}//end triggerNumberError
};//end validate

/**
 * page init
 */
if(typeof($) != 'undefined') {
	$(document).ready( function() {
		
	    /* page size checking */
        pagesize.adjust();
        window.onresize = pagesize.adjust;
        
		/** form validation */
		$('form.validate').submit(validate.checkForm);
		
		/** focus field */
		if($('input.load-focus').length) {
		    var set = $('input.load-focus');
            set.get(set.length-1).focus();
		}
		
	    $('ul.collapsing').each(function(){
	        $('li', this).addClass('open').find('span').css({ "cursor" : "pointer" }).click(function(){
	            $(this).parents('li').eq(0).toggleClass('open');
	            return false;
	        });
	    });
	});//end document.ready
}//end page init