
/* OPEN WINDOW */
function openWindow(url, height, width, scrollbars) {
	var winNew = window.open(url, '', 'width='+width+',height='+height+',scrollbars='+scrollbars);
}
function closeWindow(brand) {
	window.close();
	if(document.all) {
		window.location="about:home"
	} else {
		window.home();
	}
}

/* DUMMY FUNCTION THAT DOES NOTHING */
function dummy(){}

/* TEXT BOX KEY VALIDATION */

var ALPHA = new Number(1);
var LOWER_ALPHA = new Number(4);
var UPPER_ALPHA    = new Number(8);
var NUMERIC = new Number(2);
var COMMA = new Number(16);
var HYPHEN = new Number(32);
var UNDERSCORE = new Number(64);
var DOLLAR = new Number(128);
var ATRATE   = new Number(256);
var ANYLETTER =new Number(512);
var SPACE =new Number(1024);
var PERIOD =new Number(2048);
var POUND =new Number(4096);
var STAR =new Number(8192);
var QUESTIONMARK =new Number(16384);
var UPPER_ALPHA_CONV = new Number(32768);
var AMPERSAND = new Number(65536);
var BACKWARDSLASH= new Number(131072);
var FORWARDSLASH= new Number(262144);
var WILDCARD= new Number(524288);
var BRACE= new Number(1048576);
var COLON= new Number(2097152);
var ALL_CHARCTERS =new Number(-1);
var PLUS = new Number(4194304);

ALPHA.regularExpression ="a-zA-Z";
LOWER_ALPHA.regularExpression ="a-z";
UPPER_ALPHA.regularExpression ="A-Z";
NUMERIC.regularExpression ="0-9";
COMMA.regularExpression =",";
HYPHEN.regularExpression ="-";
UNDERSCORE.regularExpression ="_";
DOLLAR.regularExpression ="\$";
ATRATE.regularExpression ="@";
ANYLETTER.regularExpression="\\w";
SPACE.regularExpression ="\\s";
PERIOD.regularExpression =".";
POUND.regularExpression ="#";
STAR.regularExpression ="*";
QUESTIONMARK.regularExpression ="?";
AMPERSAND.regularExpression ="&";
BACKWARDSLASH.regularExpression ="\\\\";
FORWARDSLASH.regularExpression ="\/";
WILDCARD.regularExpression ="*?";
BRACE.regularExpression ="{}[]";
COLON.regularExpression ="\:";
PLUS.regularExpression ="+";

function  validatekey(e,val)
{
	//This function is used to validate on key press event.
    // Usage:  onKeyPress="return  validatekey(ALPHA|COLON);"
    // this will make sure only charcter a-z to A-Z  and : will be allowed
    
    var str ="";
    var key;
    var keyChar;
    
	if (!e) 
  	{
  		e = window.event;
  	}  	
  	
  	if (e.keyCode) {
  		key = e.keyCode;
  	}  	
	else if (e.which) {
		key = e.which;
	}
  	else {
  		return true;
  	}
  	
  	
  	/* if backspace OR delete OR arrow keys return true */
  	if ( key == 8 || key == 9 || key == 46 || key == 37 || key == 38 || key == 39 || key == 40 )
  	{
  		return true;
  	}
  	
	keyChar = String.fromCharCode(key);

	if(val&ALPHA)
    {
        str =str+ALPHA.regularExpression;
    }
    if(val&NUMERIC)
    {
        str =str+NUMERIC.regularExpression;
    }
    if(val&LOWER_ALPHA)
    {
        str =str+LOWER_ALPHA.regularExpression;
    }
    if(val&UPPER_ALPHA)
    {
        str =str+UPPER_ALPHA.regularExpression;
    }
    if(val&UNDERSCORE)
    {
        str =str+UNDERSCORE.regularExpression;
    }
    if(val&ANYLETTER)
    {
        str =str+ANYLETTER.regularExpression;
    }
    if(val&SPACE)
    {
        str =str+SPACE.regularExpression;
    }
    if(val&PERIOD)
    {
        str =str+PERIOD.regularExpression;
    }
    if(val&POUND)
    {
        str =str+POUND.regularExpression;
    }
    if(val&STAR)
    {
        str =str+STAR.regularExpression;
    }
    if(val&QUESTIONMARK)
    {
        str =str+QUESTIONMARK.regularExpression;
    }
    if(val&ATRATE)
    {
        str =str+ATRATE.regularExpression;
    }
    if(val&COMMA)
    {
        str =str+COMMA.regularExpression;
    }
    if(val&AMPERSAND)
    {
        str =str+AMPERSAND.regularExpression;
    }
    if(val&FORWARDSLASH)
    {
        str =str+FORWARDSLASH.regularExpression;
    }
    if(val&BACKWARDSLASH)
    {
        str =str+BACKWARDSLASH.regularExpression;
    }
    if(val&WILDCARD)
    {
        str =str+WILDCARD.regularExpression;
    }
    if(val&BRACE)
    {
        str =str+BRACE.regularExpression;
    }
    if(val&DOLLAR)
    {
        str =str+DOLLAR.regularExpression;
    }
    if(val&HYPHEN)
    {
        str =str+HYPHEN.regularExpression;
    }
    if(val&COLON)
    {
        str =str+COLON.regularExpression;
    }
    if(val&PLUS)
    {
        str =str+PLUS.regularExpression;
    }
   
    if( str != "" )
    {
        var re ='^(['+ str +'])$';
        var Re = new RegExp(re);
        if( Re.exec(keyChar))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
    	return true;
    }
}

/* DATE VALIDATIONS UTILS */

/* 
	datefmt: u for MDY, w for DMY
	range: p to indicate that future dates are invalid, and f to indicate that past dates are invalid.
	The function also takes into account the first two of the three leap year rules in determining whether a 29 February is a valid date. 
	This covers all years between 1582 and 4881 correctly. Dates outside of this range are considered to be invalid. 
*/


var numb = '0123456789';
function isValid(parm,val) {
	if (parm == "") return true;
	for (i=0; i<parm.length; i++) {
		if (val.indexOf(parm.charAt(i),0) == -1) return false;
	}
	return true;
}

function isNum(parm) {
	return isValid(parm,numb);
}

var mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function validateDate(fld,fmt,rng) {
	var dd, mm, yy;
	var today = new Date;
	var t = new Date;
	
	fld = trim(fld);
	
	if ( fld == '' ){
		return false;
	}
	
	var d1 = fld.split('\/');
	if (d1.length != 3) {
		d1 = fld.split(' ');
	}
	if (d1.length != 3) {
		return false;
	}
	if (fmt == 'u' || fmt == 'U') {
  		dd = d1[1]; 
  		mm = d1[0]; 
  		yy = d1[2];
  	}
	else if (fmt == 'w' || fmt == 'W'){
  		dd = d1[0]; 
  		mm = d1[1]; 
  		yy = d1[2];
  	}
	else{ 
		return false;
	}

	dd = parseFloat(dd); 
	mm = parseFloat(mm); 
	yy = parseFloat(yy);
	if (yy < 100) {
		yy += 2000;
	}
	if (yy < 1582 || yy > 4881) {
		return false;
	}
	if (mm == 2 && (yy%400 == 0 || (yy%4 == 0 && yy%100 != 0))) {
		day[mm-1]++;
	}
	if (mm < 1 || mm > 12) {
		return false;
	}
	if (dd < 1 || dd > day[mm-1]) {
		return false;
	}
	t.setDate(dd); 
	t.setMonth(mm-1); 
	t.setFullYear(yy);
	
	var RegExPattern = '';
	
	if (fmt == 'u' || fmt == 'U') {
		RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
	}else if (fmt == 'w' || fmt == 'W') {
		RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
	}
	
	if ((fld.match(RegExPattern)) && (fld!='')) {
    	 
    } else {
    	return false;
    }
	
	if (rng == 'p' || rng == 'P') {
		if (t > today) {
			return false;
		}
	}
	else if (rng == 'f' || rng == 'F') {
		if (t < today) {
			return false;
		}
	}
	else if (rng != 'a' && rng != 'A') {
		return false;
	}
		
	return true;
}

function compareDate(date1,date2,fmt,sep){
	var dd1,mm1,yy1;
	var dd2,mm2,yy2;
	var fidx1 = date1.indexOf(sep);
	var fidx2 = date2.indexOf(sep);
	var lidx1 = date1.lastIndexOf(sep);
	var lidx2 = date2.lastIndexOf(sep);
	if ( fmt == 'w' || fmt == 'W' ) {
		dd1 = date1.substring(0,fidx1);
		mm1 = date1.substring(fidx1+1,lidx1);
		yy1 = date1.substring(lidx1+1,date1.length);
		
		dd2 = date2.substring(0,fidx2);
		mm2 = date2.substring(fidx2+1,lidx2);
		yy2 = date2.substring(lidx2+1,date2.length);
	} else if ( fmt  == 'u' || fmt == 'U' ){
		mm1 = date1.substring(0,fidx1);
		dd1 = date1.substring(fidx1+1,lidx1);
		yy1 = date1.substring(lidx1+1,date1.length);
		
		mm2 = date2.substring(0,fidx2);
		dd2 = date2.substring(fidx2+1,lidx2);
		yy2 = date2.substring(lidx2+1,date2.length);
	}
	
	if ( yy2 < yy1 ) {
		return -1;
	}else if ( yy2 == yy1 ) {
		if ( mm2 < mm1 ) {
			return -1;
		} else if ( mm2 == mm1 ){
			if ( dd2 == dd1 ){
				return 0;
			}else if ( dd2 < dd1 ){	
				return -1;
			} else {
				return 1;
			}
		} else {
			return 1;
		}
	}else{
		return 1;
	}
}

/* ALL STRING RELATED UTILS */

/* Trim whitespace at both ends of string */
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
/* Trim whitespace at start of string */
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
/* Trim whitespace at end of string */
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

/* UK Post Code validation */
/* returns -1, invalid */
/* returns 1, valid */
function validateUKPostCode(str) {
	str = str.toUpperCase();
	var filter  = /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,1}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/;
	if(!filter.test(str)) {
		return -1;
	}
	return 1;
}

/* Mobile No Validation */
/* returns -1, invalid */
/* returns 1, valid */
function validateMobileNo(number) {
	var ukRegex = /^07\d{9}$/;
	var intRegex = /^[+]?[1-9]\d{9,12}$/;
	var austrianRegex = /^\+43\d{8,12}$/;
	if(!ukRegex.test(number) && !intRegex.test(number) && !austrianRegex.test(number)) {
		return false;
	}
	return true;
}


/* MOUSE UTILS */
var isIE = document.all;

function getMouseXLocation(e)
{ 
	var mouseX = 0;
  	if (!e) 
  	{
  		e = window.event;
  	}  	
  	if (e)
  	{	 
  		mouseX = isIE ? (e.clientX + document.body.scrollLeft) : e.pageX;  		  	
  	}
  	
  	return mouseX;
}

function getMouseYLocation(e)
{ 
	var mouseY = 0;
  	if (!e) 
  	{
  		e = window.event;
  	}  	
  	if (e)
  	{	 
  		mouseY = isIE ? (e.clientY + document.body.scrollTop) : e.pageY;  	
  	}
  	
  	return mouseY;
}



/*Counts no of characters remaining in text area */
function textCounter(field,cntfield,maxlimit) {
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
		// otherwise, update 'characters left' counter
	else
		cntfield.value = maxlimit - field.value.length;
}


