
	// IsDefined: returns true if variable defined
	function IsDefined(variable)
	{
		return ( typeof(variable) == "undefined" ) ? false : true;
	} 


	function IdToObject(id)
	{	
		return document.getElementById(id);
	}
	

	function PopupURL(url)
	{
		newWindow = window.open(url, '', 'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,height=750,width=950');
		newWindow.focus();
		return newWindow;
	}


	function PopupContent(strContent)
	{
		newWindow = PopupURL('');
		newWindow.document.write(strContent);
		newWindow.document.close();
	}
	

	function CountRegExpMatches( str, searchRegExpvalue )
	{
		var m = str.match(searchRegExpvalue);
		return m.length; // the count
	}
	

	// ReplaceAll: replaces all occurences of 'from' with 'to' in string 'str'
	// returns str
	function ReplaceAll( str, from, to )
	{
		var idx = str.indexOf( from );
				
		while ( idx > -1 ) {
			str = str.replace( from, to );
			idx = str.indexOf( from );
		}
		
		return str;
	}


	// CreateNewXMLHttpObject: instantiate and return the best version of the XMLHttpRequest object	
	// returns null on fail
	function CreateNewXMLHttpObject()
	{ 
		var xmlHttp = null;

		try {
			xmlHttp = new XMLHttpRequest();												// Firefox, Opera 8.0+, Safari
		}
		catch (e)	{																							// Internet Explorer
			try {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");			// explorer 6
			}
			catch (e) {
				try {
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");	// explorer 5.5
				}
				catch(e) {
					alert("CreateNewXMLHttpObject: " + e.message);
					return null;
				}
			}
		}
	
		return xmlHttp;
	}
	var ajaxHttp = CreateNewXMLHttpObject();
	
		
	function PreviewTemplate(template)
	{
		if (!ajaxHttp)
			ajaxHttp = CreateNewXMLHttpObject();
			
		// load template
		ajaxHttp.open("GET", "/res/templates/" + template, true);
		
		ajaxHttp.onreadystatechange = function() {
			if (ajaxHttp.readyState == 4 && ajaxHttp.status == 200) {	// file exist?
				// do token replacement
				scratchTemplate = ajaxHttp.responseText;
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_TITLE %>", 							 "" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_HEADER %>", 						 "" );			
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_RES_DIRECTORY %>", 			 "/res" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_TEMPLATES_DIRECTORY %>", "/res/templates" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_DATE %>",								 "Wednesday, 11th March, 2009" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_DATE_YEAR %>",					 "2009" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_NAV_FULL_VERT %>",			 "<p>NAV_FULL_VERT</p>" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_NAV_SUBS_ONLY_VERT %>",  "<ul><li><a href='technical-specifications.php' title='Technical Specifications'>Technical Specifications</a></li><li><a href='streetlight-applications.php' title=''>Streetlight Applications</a></li><ul><li>New Streetlight Applications</li></ul><li><a href='request-info.php' title=''>Request Information Pack</a></li></ul><p>NAV_SUBS_ONLY_VERT</p>" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_NAV_ROOT_ONLY_HORIZ %>", "<p>NAV_ROOT_ONLY_HORIZ</p>" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_CONTENT1 %>",						 "<h1>Lorem ipsum dolor sit amet</h1><p>Consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p><p>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.</p><h2>Et harum quidem rerum facilis est et expedita</h2><p>At vero eos et accusamus et iusto odio dignissimos ducimus, qui blanditiis praesentium voluptatum deleniti atque corrupti, quos dolores et quas molestias excepturi sint, obcaecati cupiditate non provident, similique sunt in culpa, qui officia deserunt mollitia animi, id est laborum et dolorum fuga.<br>CONTENT1</p>" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_CONTENT2 %>", 					 "<p>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat.<br>CONTENT2</p>" );
				scratchTemplate = ReplaceAll( scratchTemplate, "<% VCMS_CONTENT3 %>", 					 "<p>Lorem ipsum dolor sit.<br>CONTENT3</p>" );
				
				// render in pop-up
				PopupContent(scratchTemplate);
			}
		}
		
		ajaxHttp.send(null);
	}


	function IsNumeric(sText)
	{
		var ValidChars = "0123456789.";
		var IsNumber=true;
		var Char;
		
		for (i = 0; i < sText.length && IsNumber == true; i++) { 
			Char = sText.charAt(i); 
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
			}
		}
		return IsNumber;
	}	


	var _submitted = 0;
	function LockButton(form, element)
	{
		if ( ! _submitted ) { 
			form.elements[element].disabled=true;
			form.elements[element].style.display = 'none';
			document.getElementById( 'progress_status' ).style.display = 'inline';
	
			_submitted = 1;
			form.submit();
		}
		else {
			alert("Form already submitted, please be patient.");
		}
	}
	
	
	function ConfirmDialogue(strUrl, strMsg)
	{
		if ( window.confirm( (IsDefined(strMsg)) ? strMsg : "Are you sure you wish to proceed ?" ) ) {
			window.location = strUrl;
		}
		else {
			window.location.reload();
		}
	}
	
	
	function MM_preloadImages()
	{ //v3.0
		var d=document;
		if(d.images) {
			if(!d.MM_p) d.MM_p=new Array();
			var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
			for(i=0; i<a.length; i++) {
				if (a[i].indexOf("#")!=0) {
					d.MM_p[j]=new Image;
					d.MM_p[j++].src=a[i];
				}
			}
		}
	}
	
	
	function MM_findObj(n, d) { //v4.01
		var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
			d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
		if(!x && d.getElementById) x=d.getElementById(n); return x;
	}
	
	
	function YY_checkform() { //v4.71
	//copyright (c)1998,2002 Yaromat.com
		var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
		for (i=1; i<a.length;i=i+4){
			if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
			o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
			o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
			v=o.value;t=a[i+2];
			if (o.type=='text'||o.type=='password'||o.type=='hidden'){
				if (r&&v.length==0){err=true}
				if (v.length>0)
				if (t==1){ //fromto
					ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
				} else if (t==2){
					rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;
				} else if (t==3){ // date
					ma=a[i+1].split("#");at=v.match(ma[0]);
					if(at){
						cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
						dte=new Date(cy,cm,cd);
						if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
					}else{err=true}
				} else if (t==4){ // time
					ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
				} else if (t==5){ // check this 2
							if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
							if(!o1.checked){err=true}
				} else if (t==6){ // the same
							if(v!=MM_findObj(a[i+1]).value){err=true}
				}
			} else
			if (!o.type&&o.length>0&&o[0].type=='radio'){
						at = a[i].match(/(.*)\[(\d+)\].*/i);
						o2=(o.length>1)?o[at[2]]:o;
				if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
				if (t==2){
					oo=false;
					for(j=0;j<o.length;j++){oo=oo||o[j].checked}
					if(!oo){s+='* '+a[i+3]+'\n'}
				}
			} else if (o.type=='checkbox'){
				if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
			} else if (o.type=='select-one'||o.type=='select-multiple'){
				if(t==1&&o.selectedIndex/1==0){err=true}
			}else if (o.type=='textarea'){
				if(v.length<a[i+1]){err=true}
			}
			if (err){s+='* '+a[i+3]+'\n'; err=false}
		}
		if (s!=''){alert('The required information is incomplete or contains errors:\t\t\t\t\t\n\n'+s)}
		document.MM_returnValue = (s=='');
	}

