var images = new Array();
var imgPreload = new Image();
/*
preload the image first, by using the function PRELOADIMG

parameters are:  the imgname, which is the NAME attribute of the image
				the relevant location, of the Up and Over image
				
After that, on the mouseover and mouseout event, the function CHANGEIMG must be called

	img must be the IMAGE object, (passing it thourgh GetElementById) of the Image to be changed
	type is either over or up, according to situation
	
	the ASP function rollover can automatically set the image for rollover, once the image is preloaded


function preloadimg(imgname,over)
{	
	images[imgname] = new Array();
	images[imgname][0] = '#$#empty#$#';
	images[imgname][1] = over;
	imgPreload.src = over;
}
*/
function tmp(img)
{
	alert(img.src + ' has loaded:' + img.complete);

}

function preloadimg(imgname,over)
{	
	images[imgname] = new Array();
	images[imgname][0] = '#$#empty#$#';
	images[imgname][1] = new Image();
	images[imgname][1].src = over;
}


function changeimg(img,type)
{
/*img is the object of type image, that will have its image changed.
  it must have had images preloaded using preload images, and specified its correct ID
  type is either 'over' or 'up', according to what it is now
  */
	if (type.toLowerCase() == 'over')
	{
		if (images[img.name][0] == '#$#empty#$#')	images[img.name][0] = img.src;
		img.src = images[img.name][1].src;
	}
	else
		img.src = images[img.name][0];
}
function validateform()
{	
//R,isNum,isPos,isEmail,ofLen000,maxLen000,Between00000To00000,isAlpha,isDate,sameAs,#,notIn-___,$,isFile-###|###|...#,addBR
/*	Can validate these types:
			R-> Required
			isAlpha-> Allows only 'a..z', 'A..Z', '0..9', _ ^
			isNum -> Is numeric
			isEmail -> Is email
			isDate -> Is date
			ofLen000 -> minimum length of [num]
			maxLen000 -> maximum length of [num]
			valueIn -> next argument is textbox that contains values of which it must be
			notIn -> next argument is textbox that contains values
			notIn-___ -> Means next 3 characters are the delimeter
			Between00000To00000 -> number between [num1] to [num2]
			sameAs -> next argument is textbox that contains same value
			# -> means if error, dont set focus (done on controls that dont accept focus) [must be 1st, 2nd or 3rd character]
			$ -> means that no new html code will be written, if an error is generated [must be 1st, 2nd or 3rd character]
			addBR -> means to add a br to the html code being generated
			isFile -> only the filename is considered.  I.e The text after the last / or \
			isFile- -> Means that after it will follow a series of extensions, divided by a pipeline. Ended with a hash (#)
			isPos -> only positive numbers & zere allowed.

*/	
	var err,firsterr,firstmsg,errmsg,sparam,sval,txtbox,moved,firstparam,firsttxtbox,snum,inum,once,str,tmptxtbox,istxtbox;
	args = validateform.arguments;
	err=false;
	firsterr = false;


	for (i = 0; i < args.length; i+=2)
	{
		err=false
		sparam = args[i+1];
		try
		{
			istxtbox = false;
			txtbox = args[i]; 
			sparam = txtbox.indexOf('test');
			sparam = txtbox;
			//is NOT a textbox
		}
		catch (ex)
		{
			//Is a textbox
		}
		if (!err && sparam.indexOf('eitherOf') != -1)
		{
			snum = sparam.substr(sparam.indexOf('eitherOf') + 'eitherOf'.length,2);
			inum = parseInt(snum);
			once = false;
			str = '';
			txtbox = args[i+1];
			for (j = 0; j < inum; j++)
			{
				i++;
				tmptxtbox = args[i];
				if (j < inum -1)
				{
					if (j > 0) str = str + ', ';
					str = str + tmptxtbox.id
				}
				else
					str = str + ' or ' + tmptxtbox.id;
				if (tmptxtbox.value != '')
					once = true;
			}
			i--;
			err = !once;
			if (err) errmsg = 'Either ' + str + ' must be entered';
		
		}
		sval = txtbox.value;
		if (!txtbox.disabled && !err)
		{
			if ( !err && sparam.indexOf('isFile') != -1)
			{
				ipos = sval.lastIndexOf('\\');
				if (ipos == -1) 
					ipos = sval.lastIndexOf('/');
				sval = sval.substr(ipos+1);
				ipos = sparam.indexOf('isFile') + 'isFile'.length;
			}
			
			if (!err && sparam.charAt(0) == 'R' && !txtbox.disabled) //Required
			{
				err = (sval == '');
				if (err) errmsg = txtbox.id + ' is required';
			}
			if (!err && sparam.indexOf('isFile-') != -1 && sval != '')
			{
				ipos = sparam.indexOf('isFile-') + 'isFile-'.length;
				//Check for the extension of file being in the set specified
				//ipos++;
				dotpos = sval.lastIndexOf('.');
				fileext = sval.substr(dotpos+1).toLowerCase();
				tmpstr = sparam.substr(ipos);
				ipos2 = tmpstr.indexOf('#');
				tmpstr = (tmpstr.substring(0,ipos2));
				err = true;
				extstr = '';
				
				while (tmpstr.indexOf('|') != -1)
				{
					ipos = tmpstr.indexOf('|');
					ext = tmpstr.substring(0,ipos).toLowerCase();
					if (extstr != '') extstr = extstr + ', ';
					extstr = extstr + ext;
					err = !(!err || fileext == ext)
					tmpstr = tmpstr.substr(ipos+1);
				}
				ext = tmpstr.toLowerCase();
				if (extstr != '') extstr = extstr + ' or ';
				extstr = extstr + ext;
				err = !(!err || fileext == ext)
				if (err) errmsg = txtbox.id + ' must have an extension of ' + extstr;
			}
			if (!err && sparam.indexOf('isDate') > -1 && sval != '')
			{
				//Format is [dd/mm/yyyy], [dd-mm-yyyy]
				tmp = sval;
				slash = tmp.indexOf('/')
				var sday,tmp,slash,smonth,syear
				if (slash == -1) slash = tmp.indexOf('-');
				if (slash > -1)
				{
					sday = tmp.substr(0,slash);
					tmp = tmp.substr(slash+1);
					slash = tmp.indexOf('/')
					if (slash == -1) slash = tmp.indexOf('-');
					if (slash > -1)
					{
						smonth = tmp.substr(0,slash);
						tmp = tmp.substr(slash+1);
						if (tmp != '')
							syear = tmp;
					}
					
				}
				err =  (isNaN(sday) || isNaN(smonth) || isNaN(syear)) ||
					   ((sval.indexOf('.') == -1) && (sval.indexOf('-') == -1) && (sval.indexOf('/') == -1))
				var dt = new Date();
				if (!err)
				{
					var iday,imonth,iyear,daymax
				
					iday = parseInt(parseFloat(sday));
					imonth = parseInt(parseFloat(smonth));
					iyear =  parseInt(parseFloat(syear));
					
					err = (iyear < 0) || (iyear > 100 && iyear < 1900) || (iyear > dt.getFullYear() + 20);
					if (!err)
					{
						if (iyear <= dt.getFullYear() + 5 - 2000)
							iyear += 2000;
						else if (iyear <= 100)
							iyear += 1900;
						err = (imonth < 1 || imonth > 12);
						if (!err)
						{
							
							switch (imonth)
							{
								case 1:
								case 3:
								case 5:
								case 7:
								case 8:
								case 10:
								case 12:	daymax = 31;
														break;
								case 4:
								case 6:
								case 9:
								case 11: daymax = 30;
												break;
								case 2: if (iyear % 4 == 0)
											daymax = 29;
										else
											daymax = 28;
										break;
							}
							
							err =  (iday < 1 || iday > daymax)
						}
					}
					if (err) errmsg = txtbox.id + ' is out of range!';
					
				
				}
				else
					errmsg = txtbox.id + ' must contain a date value [dd/mm/yyyy]';
				if (!err)
					txtbox.value = padNumber(iday,2) + '/' + padNumber(imonth,2) + '/' + iyear;
			}
			if (!err && sparam.indexOf('isNum') > -1 && sval != '')
			{
				num = parseFloat(sval);
				err = (isNaN(sval));
				if (err) errmsg = txtbox.id + ' must contain a numerical value';
				if (!err && sparam.indexOf('isPos') > -1 && sval != '')
				{
					err = (num < 0);
					if (err) errmsg = txtbox.id + ' must contain a positive value';
				
				}
			}
			if (!err && sparam.indexOf('isEmail') > -1  && sval != '')
			{
				
				atpos = sval.indexOf('@');
				if (atpos != -1)
				{
					dotpos = sval.substr(atpos+1).indexOf('.');
					err = (dotpos == -1);
				}
				else
					err = true;
				if (err)	errmsg = txtbox.id + ' must contain an e-mail address';
			}
			if (!err && sparam.indexOf('Between') > -1  && sval != '')
			{
				
				tmp = sparam.indexOf('Between');
				num = parseFloat(sval);
				
				startn = parseFloat(sparam.substr(tmp+7,5));
				tmp = sparam.indexOf('To');
				endn = parseFloat(sparam.substr(tmp+2,5));
				err = (num < startn || num > endn)
				if (err) errmsg = txtbox.id + ' must contain a numerical value, from ' + startn + ' to ' + endn;
			}
			if (!err && sparam.indexOf('ofLen') > -1 )
			{
				tmp = sparam.indexOf('ofLen');
				num = parseFloat(sparam.substr(tmp+5,3));
	
				err = (sval.length < num)
				if (err) errmsg = txtbox.id + ' must contain at least ' + num + ' characters';
			}
			if (!err && sparam.indexOf('maxLen') != -1 && sval != '')
			{
				tmp = sparam.indexOf('maxLen');
				num = parseFloat(sparam.substr(tmp+6,3));
	
				err = (sval.length > num)
				if (err) errmsg = txtbox.id + ' must not be longer than ' + num + ' characters';
			
			}
			if (!err && sparam.indexOf('isAlpha') > -1  && sval != '')
			{
	
				for (j = 0; j < sval.length; j++)
				{
					chr = sval.substr(j,1);
					err= !((chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z') || (chr >= '0' && chr <= '9') || chr == '_' || chr == '^');
					if (err) {
						errmsg = txtbox.id + " must contain only alpha-numerical characters, and '_' or '^'";
						break;
					}
				}
			}
			if (!err && sparam.indexOf('notIn') > -1  && sval != '')
			{
				ipos = sparam.indexOf('notIn') + 'notIn'.length;
				if (sparam.charAt(ipos) == '-')
				{
					delim = sparam.substr(ipos+1,3);
				}
				else
					delim = ',';
					
				nottxtbox = args[i+2];
				notstr= nottxtbox.value.toUpperCase();
				thistxt = sval.toUpperCase();
				if (notstr != '') notstr = notstr + delim;
				while (notstr.indexOf(delim) > -1)
				{
					delimpos = notstr.indexOf(delim);
					if (delimpos > -1)
					{
						tmptxt = notstr.substr(0,delimpos);
						err= (thistxt == tmptxt)
						if (err)
						{
							 errmsg = txtbox.id + ' already exists! Please choose another one'
							 break;
						}
	
						notstr = notstr.substr(delimpos+delim.length);
					}
				
				}
			
			}
			if (!err && sparam.indexOf('valueIn') > -1  && sval != '')
			{
				
				ipos = sparam.indexOf('valueIn') + 'valueIn'.length;
				if (sparam.charAt(ipos) == '-')
				{
					delim = sparam.substr(ipos+1,3);
				}
				else
					delim = ',';
				nottxtbox = args[i+2];
				notstr= nottxtbox.value.toUpperCase();
				thistxt = sval.toUpperCase();
				if (notstr != '') notstr = notstr + delim;
				matched=false;
				while (notstr.indexOf(delim) > -1 && !matched)
				{
					delimpos = notstr.indexOf(delim);
					if (delimpos > -1)
					{
						tmptxt = notstr.substr(0,delimpos);
						matched = (thistxt == tmptxt)

						notstr = notstr.substr(delimpos+delim.length);
					}
				
				}
				err = !matched;
				if (err)		 errmsg = txtbox.id + ' does not exist!'
			
			}
			if (!err && sparam.indexOf('sameAs') > -1  && sval != '')
			{
				sametxtbox = args[i+2];
				err = (txtbox.value != sametxtbox.value);
				if (err) errmsg = txtbox.id + ' and ' + sametxtbox.id + ' must contain the same value';
			}
		}
		if (txtbox.id.charAt(0) == '#') errmsg= txtbox.id.substr(1);
		if (sparam.indexOf('sameAs') > -1 || sparam.indexOf('notIn') > -1 || sparam.indexOf('valueIn') > -1)
			i++;
		if (sparam.charAt(0) != '$' && sparam.charAt(1) != '$' && sparam.charAt(0) != '$') {
			tmp = '';
			if (err) {

				if (sparam.indexOf('addBR') != -1) {tmp = '<br>'};
				tmp = tmp + ' &#9632; ' + errmsg + '';
			}
			document.getElementById(txtbox.name + '_msg').innerHTML = tmp;
		}
	
		if (!firsterr) {firsterr = err; firstmsg = errmsg;firsttxtbox=txtbox;firstparam = sparam;};
	}
	if (firsterr)
	{ 

		
		if (firstparam.charAt(0) != '#' && firstparam.charAt(1) != '#' && firstparam.charAt(2) != '#' ) {
			firsttxtbox.select();
			firsttxtbox.focus();
		}
		alert(firstmsg);
	}
		
	return !firsterr;
	
}

function processtag(tagscheme , txt, endtag,changetohtmlcodes) {
var ipos ;
var paramid ;
var lasttagpos ;
var lastparam ;
var nextparam ;
var before;
var after;
var param ;
var good ;
var tagpiecepos ;
var startpiecepos ;
var tagstartpos;
var tagendpos;
	if (changetohtmlcodes) 
	{
		tagscheme = replaceall(tagscheme,'<','&lt;')
		tagscheme = replaceall(tagscheme,'>','&gt;')
	}
	
	

   paramid = 0;
   lasttagpos = 0;
   ipos = -1;
   lastparam = -1;
   istart = ipos+1;
   ipos = tagscheme.substr(istart).indexOf('{');
   if (ipos != -1) ipos = ipos + istart;
   while (ipos != -1) {
   
      paramid++;
	  tagschemepart = tagscheme.toLowerCase().substr(lastparam+1,ipos-lastparam-1);
	  txtpart = txt.toLowerCase().substr(lasttagpos);
	  tagpiecepos = txtpart.indexOf(tagschemepart);
	  if (tagpiecepos != -1) tagpiecepos = tagpiecepos + lasttagpos;
	  tagschemepart = txtpart = '';
	  if (tagpiecepos != -1) {
         if (paramid == 1) {
            good = endtag;
            startpiecepos = tagpiecepos;
		}
         nextparam = tagscheme.substr(ipos+1).indexOf('{');
		 if (nextparam == -1) 
		 	nextparam = tagscheme.length + 1;
		else
			nextparam += ipos + 1;
         before = tagscheme.substr(lastparam+1,ipos-lastparam-1);
		 after = tagscheme.substr(ipos+3,nextparam - (ipos + 3));
 		 tagstartpos = tagpiecepos + tagscheme.substr(lastparam+1,ipos-lastparam-1).length -1;
	 	 tagendpos = txt.toLowerCase().substr(tagstartpos+1).indexOf(after.toLowerCase());
		 if (tagendpos != -1) tagendpos = tagendpos + tagstartpos +1;
		 
         if (tagendpos != -1) {
            param = txt.substr(tagstartpos+1,tagendpos-tagstartpos-1);
            good = good.replace('{' + paramid + '}',param);
            lasttagpos = tagendpos;
            lastparam = ipos + 2;
 		    istart = ipos+1;
		    ipos = tagscheme.substr(istart).indexOf('{');
		    if (ipos != -1) ipos = ipos + istart;
            if (ipos == -1) {
               if (tagstartpos != -1 && tagendpos != -1) 
			   	 txt = txt.substr(0,startpiecepos) + good + txt.substr(tagendpos+after.length);
               lasttagpos = startpiecepos + good.length - 1;
               paramid = 0;
			   ipos = -1;
			   lastparam = -1;
               good = tagscheme;
			   istart = ipos+1;
               ipos = tagscheme.substr(istart).indexOf('{');
			   if (ipos != -1) ipos = ipos + istart;
			}
		}
		 else {
            if (paramid > 1) {
               paramid = 0;
			   ipos = -1;
			   lastparam = -1;
               good = tagscheme ;
			  }
            else
               break;
		  }
      }
	 else if (tagpiecepos == -1 && paramid > 1) {
           paramid = 0
		   ipos = -1;
		   lastparam = -1;
           good = tagscheme;
	 }
      else if (tagpiecepos == -1 && paramid == 1)
		break;
   }
   return txt;
}

function txtforhtml(txt)
{
	tmp = txt
	tmp = replaceall(tmp,'<','&lt;');
	tmp = replaceall(tmp,'>','&gt;');
	tmp = replaceall(tmp,' ','&nbsp;');
	tmp = replaceall(tmp,'\n','<br>');
	
	return tmp;


}

function replaceall(txt,from,to)
{
	tmp = txt;
	while (tmp.indexOf(from) != -1)
	{
		tmp = tmp.replace(from,to);
	}
	return tmp;

}


function insertimage(txtbox)
{
	url = '';

	url = prompt('Please enter the URL of the image:','');
	if (url != '' && url != null)
		txtbox.value = txtbox.value + '<img:url="' + url + '">';
	txtbox.focus();
	return 0;
}

function placeimage(txtbox)
{
	filename = '';
	filename = prompt('Please enter the filename of the uploaded image:','');
	if (filename != '' && filename != null)
		txtbox.value = txtbox.value + '<img:filename="' + filename + '">';
	txtbox.focus();
	return 0;
}

function boldtxt(txtbox)
{
	txt = '';
	txt = prompt('Please enter the text to make bold:','');
	if (txt != '' && txt != null)
		txtbox.value = txtbox.value + '<b>' + txt + '</b>';
	txtbox.focus();
	return 0;
}

function italictxt(txtbox)
{
	txt = '';
	txt = prompt('Please enter the text to make italic:','');
	if (txt != '' && txt != null)
		txtbox.value = txtbox.value + '<i>' + txt + '</i>';
	txtbox.focus();
	return 0;
}

function underlinetxt(txtbox)
{
	txt = '';
	txt = prompt('Please enter the text to make underlined:','');
	if (txt != '' && txt != null)
		txtbox.value = txtbox.value + '<u>' + txt + '</u>';
	txtbox.focus();
	return 0;
}

function insertlink(txtbox)
{
	url = '';
	txt = '';
	url = prompt('Please enter the URL to make the text link to:','');
	if (url != '' && url != null)
	{
		txt = prompt('Please enter the text:','');
		if (txt !='' && txt != null)
			txtbox.value = txtbox.value + '<link="' + url + '">' + txt + '</link>';
	}
	txtbox.focus();
	return 0;
}

function insertemail(txtbox)
{
	email = '';
	txt = '';
	email = prompt('Please enter the e-mail to make the text link to:','');
	if (email != '' && email != null)
	{
		txt = prompt('Please enter the text:','');
		if (txt !='' && txt != null)
			txtbox.value = txtbox.value + '<email="' + email + '">' + txt + '</email>';
	}
	txtbox.focus();
	return 0;
}

function insertcode(txtbox)
{
	code = '';
	code = prompt('Please enter the HTML code:','');
	if (code != '' && code != null)
		txtbox.value = txtbox.value + '<htmlcode>' + code + '</htmlcode>';
	txtbox.focus();
	return 0;
}

function resizeimage(img,maxwidth,maxheight)
{
	if (maxwidth > 0)
	{
		if (img.width > maxwidth)
			img.width = 440;
	}
	if (maxheight > 0)
	{
		if (img.height > maxheight)
			img.height = maxheight;
	}
}


function padNumber(num,digits)
{
	var tmp,snum,sret
	snum = "" + num;
	tmp = digits - snum.length;
	sret = num
	for (k = 1; k <= tmp; k++)
		sret = "0" + sret
	return sret
}

function addOptToCmb(cmb,txt,val,index,sel)
{
	var newitem = document.createElement('option');
	var newindex;
	newitem.text = txt;
	newitem.value = val;
	if (sel)
		newitem.selected = true;
	else
		newitem.selected = false;
	if (!isNaN(index))
		newindex = index;
	else
		newindex = -1;
	if (newindex > cmb.options.length-1)
		newindex = -1;
	try {
		if (newindex > -1)
		   cmb.add(newitem, cmb.options[newindex]);
		else
		   cmb.add(newitem, null); //first	 
		// standards compliant; doesn't work in IE
	}
	catch(ex) {
	  cmb.add(newitem, newindex); // IE only
	}

}

function indexOfFrom(data,from,str)
{
	var tmp;
	var pos = -1;
	tmp = data.substr(from);
	pos = tmp.indexOf(str);
	if (pos > -1) pos += from;
	return pos;
}

function getElem(id)
{
	var tmp;
	tmp = document.getElementById(id) ;
	if (tmp == null)
		tmp = document.getElementsByName(id)[0];
	return tmp;
}
function getElemName(name)
{	return document.getElementsByName(name); }

