function element(id){
	return document.getElementById(id);
}

function closewin(){
window.opener.location.reload();
window.close();
	
}
function nan(field){
	if(isNaN(element(field).value)){
		alert("Please enter numbers only.");
		element(field).value = '';
		element(field).focus();
	}
}
function showRates(id,a){
	if(element(id).style.display == "none"){
		element(a).innerHTML ='Hide Rates';
		element(id).style.display = "block";
	} else {
		element(a).innerHTML = 'Show Rates';
		element(id).style.display = "none";
	}
	
}
	function makeJS($text){
var $decode = true;
var $decode_charset = 'ISO-8859-1';
var $lowercase = true;
var $strip = true;
var $maxlength = 50;
var $wholeword = true;
var $blank = 'no-title';
	if($decode){ $text = html_entity_decode($text); }
	if($lowercase){ $text = $text.toLowerCase(); }
	$text = $text.replace(/[\.,;!#\$\¿\/:\?'\(\)\[\]_\-\\]/g,'');
	//$text = $text.replace("/[^&a-z0-9_-\s]/i",'');
	//$text = $text.trim();
	$text = $text.replace('&','and');
	$text = $text.replace(' ','-');
	$text = $text.replace(/-{2,}/,'-'); 
	//alert($text); 
	$text2 = "";
	if($text.length > 50){ 	$text = $text.substr(0,50); }
	//if($wholeword){ alert("dsfsdf");
	$text = $text.split(' '); //explode('-',$text);
	 alert($text.length);
	for($i=0;$i<$text.length+1;$i++){
	$text2 = $text.join('-');	
	}
	//$text = $text.join('-'); } 
	//implode('-',array_diff($text,array(array_pop($text)))); }}
	//}
	//$text2;
	if($text2 == '') { return $blank; }
	 return $text2; }



function html_entity_decode(str){
/*Firefox (and IE if the string contains no elements surrounded by angle brackets )*/
try{
var ta=document.createElement("textarea");
ta.innerHTML=str;
return ta.value.replace(/<[^>]*>/g, '');
}catch(e){};
/*Internet Explorer*/
try{
var d=document.createElement("div");
d.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
if(typeof d.innerText!="undefined")return d.innerText;/*Sadly this strips tags as well*/
}catch(e){}
}



//alert(makeJS("<span>¿Hablas bien el espa&ntilde;ol?</span>"));


function changeClass(classname){
this.className = classname;
}



function ismaxlength(obj){

var mlength=obj.getAttribute? parseInt(obj.getAttribute("maxlength")) : ""

if (obj.getAttribute && obj.value.length>mlength)

obj.value=obj.value.substring(0,mlength)

}
	function release(name,id){
		if(confirm("Release "+name+"?")){
			eval("this.location='?action=release&reqn='+id");
		}
	}
	function mkRand(){
	rand = Math.floor(Math.random());	
	return rand;
	}
 function popUp($url,w,h) {
   mywindow = window.open ($url,mkRand(),"location=0,status=0,scrollbars=1,toolbar=0,menubar=0,titlebar=0,width=" + parseInt(w) + ",height=" + parseInt(h) + "");
  mywindow.moveTo(300,200);
  mywindow.focus();
 } 
 function popUp2(url,name,name2,w,h) {
   name2 = window.open (url,name,"location=0,status=0,scrollbars=1,toolbar=0,menubar=0,titlebar=0,width=" + parseInt(w) + ",height=" + parseInt(h) + "");
  name2.moveTo(300,200);
  name2.focus();
 }
 
 function addElement(selectBox) {
if(selectBox.options[selectBox.selectedIndex].value == 'other') {
var name=prompt('Please enter Other', 'other');
selectBox.options[selectBox.options.length] = new Option(name, name);
selectBox.selectedIndex = selectBox.options.length-1;
}
}

var isDOM=document.getElementById?1:0,
 isIE=document.all?1:0,
 isNS4=navigator.appName=='Netscape'&&!isDOM?1:0,
 isOp=self.opera?1:0,
 isDyn=isDOM||isIE||isNS4;

function getRef(i, p)
{
 p=!p?document:p.navigator?p.document:p;
 return isIE ? p.all[i] :
  isDOM ? (p.getElementById?p:p.ownerDocument).getElementById(i) :
  isNS4 ? p.layers[i] : null;
};

function getSty(i, p)
{
 var r=getRef(i, p);
 return r?isNS4?r:r.style:null;
};

if (!self.LayerObj) var LayerObj = new Function('i', 'p',
 'this.ref=getRef(i, p); this.sty=getSty(i, p); return this');
function getLyr(i, p) { return new LayerObj(i, p) };

function LyrFn(n, f)
{
 LayerObj.prototype[n] = new Function('var a=arguments,p=a[0],px=isNS4||isOp?0:"px"; ' +
  'with (this) { '+f+' }');
};
LyrFn('x','if (!isNaN(p)) sty.left=p+px; else return parseInt(sty.left)');
LyrFn('y','if (!isNaN(p)) sty.top=p+px; else return parseInt(sty.top)');


if (typeof addEvent != 'function')
{
 var addEvent = function(o, t, f, l)
 {
  var d = 'addEventListener', n = 'on' + t, rO = o, rT = t, rF = f, rL = l;
  if (o[d] && !l) return o[d](t, f, false);
  if (!o._evts) o._evts = {};
  if (!o._evts[t])
  {
   o._evts[t] = o[n] ? { b: o[n] } : {};
   o[n] = new Function('e',
    'var r = true, o = this, a = o._evts["' + t + '"], i; for (i in a) {' +
     'o._f = a[i]; r = o._f(e||window.event) != false && r; o._f = null;' +
     '} return r');
   if (t != 'unload') addEvent(window, 'unload', function() {
    removeEvent(rO, rT, rF, rL);
   });
  }
  if (!f._i) f._i = addEvent._i++;
  o._evts[t][f._i] = f;
 };
 addEvent._i = 1;
 var removeEvent = function(o, t, f, l)
 {
  var d = 'removeEventListener';
  if (o[d] && !l) return o[d](t, f, false);
  if (o._evts && o._evts[t] && f._i) delete o._evts[t][f._i];
 };
}




// *** CORE MENU OBJECT AND FUNCTIONS ***


function FSMenu(myName, nested, cssProp, cssVis, cssHid)
{
 // This is the base object that users create.
 // It stores menu properties, and has a 'menus' associative array to store a list of menu nodes,
 // and allow timeouts to refer to nodes by name (e.g. menuObject.menus.nodeName).

 this.myName = myName;
 this.nested = nested;
 // Some CSS settings users can specify.
 this.cssProp = cssProp;
 this.cssVis = cssVis;
 this.cssHid = cssHid;
 this.cssLitClass = 'highlighted';
 // The 'root' menu only exists for list menus, and is created in the activation function.
 // For non-nested menus, here's an imaginary node that acts as a parent to other nodes.
 this.menus = { root: new FSMenuNode('root', true, this) };
 this.menuToShow = [];
 this.mtsTimer = null;
 // Other configurable defaults.
 this.showDelay = 0;
 this.switchDelay = 125;
 this.hideDelay = 500;
 this.showOnClick = 0;
 this.hideOnClick = true;
 // Animation speeds: set to a number between 0 and 1. Larger = faster. 1 = disabled.
 this.animInSpeed = 0.2;
 this.animOutSpeed = 0.2;
 this.animations = [];

 // Free memory onunload in IE.
 //if (isIE && !isOp) addEvent(window, 'unload', new Function(myName + ' = null'));
};




FSMenu.prototype.show = function(mN) { with (this)
{
 // Set menuToShow to the function parameters. Use a loop to copy values so we don't leak memory.
 menuToShow.length = arguments.length;
 for (var i = 0; i < arguments.length; i++) menuToShow[i] = arguments[i];
 // Use a timer to call a virtual 'root' menu over() function for non-nested menus.
 // For nested/list menus event bubbling will call the real root menu node over() function.
 clearTimeout(mtsTimer);
 if (!nested) mtsTimer = setTimeout(myName + '.menus.root.over()', 10);
}};


FSMenu.prototype.hide = function(mN) { with (this)
{
 // Clear the above timer and route the hide event to the appropriate menu node.
 clearTimeout(mtsTimer);
 if (menus[mN]) menus[mN].out();
}};


FSMenu.prototype.hideAll = function() { with (this)
{
 // Hides all non-root menus, mercilessly!

 for (var m in menus)
  if (menus[m].visible && !menus[m].isRoot) menus[m].hide(true);
}};




function FSMenuNode(id, isRoot, obj)
{
 // Each menu is represented by a FSMenuNode object.
 // This is the node constructor function, with the properties and functions needed by that node.
 // It's passed its own name in the menus[] array, whether this is a root level menu (boolean),
 // and a reference to the parent FSMenu object.

 this.id = id;
 this.isRoot = isRoot;
 this.obj = obj;
 this.lyr = this.child = this.par = this.timer = this.visible = null;
 this.args = [];
 var node = this;


 // These next per-node over/out functions are an example of closures in JavaScript.
 // Since they're instantiated here, they can use the node's variables as if they were their own.

 this.over = function(evt) { with (node) with (obj)
 {
  if (isNS4 && evt && lyr.ref) lyr.ref.routeEvent(evt);
  // Stop this menu hiding itself and intercept the default root show handler (if any).
  clearTimeout(timer);
  clearTimeout(mtsTimer);

  // A quick check; if this menu isn't visible, show it (i.e. cancel any animation).
  if (!isRoot && !visible) node.show();

  if (menuToShow.length)
  {
   // Pull information out of menuToShow[].
   var a = menuToShow, m = a[0];
   if (!menus[m] || !menus[m].lyr.ref) menus[m] = new FSMenuNode(m, false, obj);
   // c = reference to new child menu that will be shown.
   var c = menus[m];
   // Just clear the menuToShow array and return if we're "showing" the current menu...!
   if (c == node)
   {
    menuToShow.length = 0;
    return;
   }
   // Otherwise, stop any impending show/hide of the child menu, and check if it's a new child.
   clearTimeout(c.timer);
   if (c != child && c.lyr.ref)
   {
    // We have a genuinely new child menu to show. Give it some properties, set a timer to show it.
    // Again, try and avoid memory leaks, but copy over the a/menuToShow arguments.
    c.args.length = a.length;
    for (var i = 0; i < a.length; i++) c.args[i] = a[i];
    // Decide which delay to use -- switchDelay if we already have a child menu, showDelay otherwise.
    var delay = child ? switchDelay : showDelay;
    c.timer = setTimeout('with(' + myName + ') { menus["' + c.id + '"].par = menus["' +
     node.id + '"]; menus["' + c.id + '"].show() }', delay ? delay : 1);
   }
   // Try, try, try to avoid leaking memory... :).
   menuToShow.length = 0;
  }

  // For non-nested menus, mimic event bubbling.
  if (!nested && par) par.over();
 }};


 this.out = function(evt) { with (node) with (obj)
 {
  // Basically the same as over(), this cancels impending events and sets a hide timer.
  if (isNS4 && evt && lyr && lyr.ref) lyr.ref.routeEvent(evt);
  clearTimeout(timer);
  // We never hide the root menu. Otherwise, mimic event-bubbling for non-nested menus.
  if (!isRoot && hideDelay >= 0)
  {
   timer = setTimeout(myName + '.menus["' + id + '"].hide()', hideDelay);
   if (!nested && par) par.out();
  }
 }};


 // Finally, now we have created our menu node, get a layer object for the right ID'd element
 // in the page, and assign it onmouseout/onmouseover events.
 // Don't do for virtual root node (in the case of non-nested menus).
 if (this.id != 'root') with (this) with (lyr = getLyr(id)) if (ref)
 {
  if (isNS4) ref.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
  addEvent(ref, 'mouseover', this.over);
  addEvent(ref, 'mouseout', this.out);
  // For nested UL/LI menus, assign focus/blur events for accessibility.
  if (obj.nested)
  {
   addEvent(ref, 'focus', this.over);
   addEvent(ref, 'click', this.over);
   addEvent(ref, 'blur', this.out);
  }
 }
};




FSMenuNode.prototype.show = function(forced) { with (this) with (obj)
{
 // This is called to show the menu node of which it's a method.
 // It sets the parent's child to this, and hides any existing children of the parent node.
 if (!lyr || !lyr.ref) return;

 if (par)
 {
  if (par.child && par.child != this) par.child.hide();
  par.child = this;
 }

 // This is the positioning routine, it can be deleted if you're not using it.
 // It pulls values out of the stored args[] array, and uses the page.elmPos function in the
 // cross-browser code to find the pixel position of the parent item + menu.
 var offR = args[1], offX = args[2], offY = args[3], lX = 0, lY = 0,
  doX = ''+offX!='undefined', doY = ''+offY!='undefined';
 if (self.page && offR && (doX||doY))
 {
  with (page.elmPos(offR, par.lyr ? par.lyr.ref : 0)) lX = x, lY = y;
  if (doX) lyr.x(lX + eval(offX));
  if (doY) lyr.y(lY + eval(offY));
 }

 // Highlight the triggering element, if any.
 if (offR) lightParent(offR, 1);

 // Show the menu and trigger any 'onshow' events.
 // Also raise the parent <li> to avoid z-index issues in MSIE.
 visible = 1;
 if (obj.onshow) obj.onshow(id);
 lyr.ref.parentNode.style.zIndex = '2';
 setVis(1, forced);
}};


FSMenuNode.prototype.hide = function(forced) { with (this) with (obj)
{
 // Same as show() above, but this clears the child/parent settings and hides the menu.
 if (!lyr || !lyr.ref || !visible) return;

 // This is an NS4 hack as its mouse events are notoriously unreliable. Remove as needed.
 if (isNS4 && self.isMouseIn && isMouseIn(lyr.ref)) return show();
 // Dim the triggering element.
 if (args[1]) lightParent(args[1], 0);

 // Route the hide call through any child nodes, and clear the par/child references.
 if (child) child.hide();
 if (par && par.child == this) par.child = null;

 // Hide the menu node element, trigger an 'onhide' event if set, lower the
 // parent <li> and finally show the menu.
 if (lyr)
 {
  visible = 0;
  if (obj.onhide) obj.onhide(id);
  lyr.ref.parentNode.style.zIndex = '1';
  setVis(0, forced);
 }
}};


FSMenuNode.prototype.lightParent = function(elm, lit) { with (this) with (obj)
{
 // This is passed a reference to the parent triggering element, and whether it is lit or not.

 if (!cssLitClass || isNS4) return;
 // By default the cssLitClass value is appended/removed to any existing class.
 // Otherwise, if hiding, remove all trailing instances of it (in case of script errors).
 if (lit) elm.className += (elm.className?' ':'') + cssLitClass;
 else elm.className = elm.className.replace(new RegExp('(\\s*' + cssLitClass + ')+$'), '');
}};


FSMenuNode.prototype.setVis = function(sh, forced) { with (this) with (obj)
{
 // This is passed two parameteres: whether its menu is shown (boolean), and
 // whether its a "forced" animation (can't be interrupted by an unforced one).
 // It sets the chosen CSS property of the menu element, and repeatedly calls itself if
 // one or more animations have been specified in the animations property.

 if (lyr.forced && !forced) return;
 lyr.forced = forced;
 lyr.timer = lyr.timer || 0;
 lyr.counter = lyr.counter || 0;
 with (lyr)
 {
  clearTimeout(timer);
  if (sh && !counter) sty[cssProp] = cssVis;
  var speed = sh ? animInSpeed : animOutSpeed;

  if (isDOM && speed < 1)
   for (var a = 0; a < animations.length; a++) animations[a](ref, counter, sh);

  counter += speed*(sh?1:-1);
  if (counter>1) { counter = 1; lyr.forced = false }
  else if (counter<0) { counter = 0; sty[cssProp] = cssHid; lyr.forced = false }
  else if (isDOM) { timer = setTimeout(myName + '.menus["' + id + '"].setVis(' +
   sh + ',' + forced + ')', 50) }
 }
}};


FSMenu.animSwipeDown = function(ref, counter, show)
{
 // Backup original top/margin-top, then 'swipe' movement + clipping.
 if (show && (counter == 0))
 {
  ref._fsm_styT = ref.style.top;
  ref._fsm_styMT = ref.style.marginTop;
  ref._fsm_offT = ref.offsetTop || 0;
 }
 var cP = Math.pow(Math.sin(Math.PI * counter / 2), 0.75);
 var clipY = ref.offsetHeight * (1 - cP);
 ref.style.clip = (counter == 1 ?
  ((window.opera || navigator.userAgent.indexOf('KHTML') > -1) ? '' :
   'rect(auto, auto, auto, auto)') :
   'rect(' + clipY + 'px, ' + ref.offsetWidth + 'px, ' + ref.offsetHeight + 'px, 0)');
 if (counter == 1 || (counter < 0.01 && !show))
 {
  ref.style.top = ref._fsm_styT;
  ref.style.marginTop = ref._fsm_styMT;
 }
 else
 {
  ref.style.top = ((0 - clipY) + (ref._fsm_offT)) + 'px';
  ref.style.marginTop = '0';
 }
};

FSMenu.animFade = function(ref, counter, show)
{
 // Use IE's ActiveX alpha filter or the W3C/Mozilla 'opacity' to fade menu.
 var done = (counter == 1);
 if (ref.filters)
 {
  var alpha = !done ? ' alpha(opacity=' + parseInt(counter * 100) + ')' : '';
  if (ref.style.filter.indexOf("alpha") == -1) ref.style.filter += alpha;
  else ref.style.filter = ref.style.filter.replace(/\s*alpha\([^\)]*\)/i, alpha);
 }
 else ref.style.opacity = ref.style.MozOpacity = counter / 1.001;
};

FSMenu.animClipDown = function(ref, counter, show)
{
 // Clip the menu down like a 'blind'.
 var cP = Math.pow(Math.sin(Math.PI * counter / 2), 0.75);
 ref.style.clip = (counter == 1 ?
  ((window.opera || navigator.userAgent.indexOf('KHTML') > -1) ? '' :
   'rect(auto, auto, auto, auto)') :
   'rect(0, ' + ref.offsetWidth + 'px, '+ (ref.offsetHeight * cP) + 'px, 0)');
};


FSMenu.prototype.activateMenu = function(id, subInd) { with (this)
{
 if (!isDOM || !document.documentElement) return;

 // First of all, disable the CSS menu behaviour.
 var fsmFB = getRef('fsmenu-fallback');
 if (fsmFB)
 {
  fsmFB.rel = 'alternate stylesheet';
  fsmFB.disabled = true;
 }

 // References to menu elements for a given level.
 var a, ul, li, parUL, mRoot = getRef(id), nodes, count = 1;

 // Loop through all sub-lists under the given menu.
 var lists = mRoot.getElementsByTagName('ul');
 for (var i = 0; i < lists.length; i++)
 {
  // Find a parent LI node, if any, by recursing upwards from the UL. Quit if not found.
  li = ul = lists[i];
  while (li)
  {
   if (li.nodeName.toLowerCase() == 'li') break;
   li = li.parentNode;
  }
  if (!li) continue;
  // Next, find the parent UL to that LI node.
  parUL = li;
  while (parUL)
  {
   if (parUL.nodeName.toLowerCase() == 'ul') break;
   parUL = parUL.parentNode;
  }

  // Now, find the anchor tag that triggers this menu; it should be a child of the LI.
  a = null;
  for (var j = 0; j < li.childNodes.length; j++)
   if (li.childNodes[j].nodeName.toLowerCase() == 'a') a = li.childNodes[j];
  if (!a) continue;

  // We've found a menu node by now, so give it an ID and event handlers.
  var menuID = myName + '-id-' + count++;
  // Only assign a new ID if it doesn't have one already.
  if (ul.id) menuID = ul.id;
  else ul.setAttribute('id', menuID);

  // Attach focus/mouse events to the triggering anchor tag.
  // Check if this link will be triggered onclick instead of onmouseover.
  // If so, we only respect mouseovers/focuses when the menu is visible from a click.
  var sOC = (showOnClick == 1 && li.parentNode == mRoot) || (showOnClick == 2);
  // Safari 1.x is buggy and crashes when you access "returnValue". Joy.
  // Also Opera defaults to "false" so use something different there.
  var evtProp = navigator.userAgent.indexOf('Safari') > -1 || isOp ?
   'safRtnVal' : 'returnValue';
  // Create the functions that handle show & hide events.
  var eShow = new Function('with (' + myName + ') { ' +
   'var m = menus["'+menuID+'"], pM = menus["' + parUL.id + '"];' +
   (sOC ? 'if ((pM && pM.child) || (m && m.visible))' : '') +
   ' show("' + menuID + '", this) }');
  var eHide = new Function('e', 'if (e.' + evtProp + ' != false) ' +
   myName + '.hide("' + menuID + '")');
  // Assign them to the <a> element.
  addEvent(a, 'mouseover', eShow);
  addEvent(a, 'focus', eShow);
  addEvent(a, 'mouseout', eHide);
  addEvent(a, 'blur', eHide);
  if (sOC) addEvent(a, 'click', new Function('e', myName + '.show("' + menuID +
   '", this); if (e.cancelable && e.preventDefault) e.preventDefault(); ' +
   'e.' + evtProp + ' = false; return false'));

  // Prepend an arrow indicator to the anchor tag content if given.
  if (subInd) a.insertBefore(subInd.cloneNode(true), a.firstChild);
 }

 
 // Because IE sucks, we emulate onfocus/blur event bubbling for accessibility,
 // which allows users to tab/shift+tab through the menus.
 if (isIE && !isOp)
 {
  var aNodes = mRoot.getElementsByTagName('a');
  for (var i = 0; i < aNodes.length; i++)
  {
   // A setTimeout helps ensure the focus is always after any blur.
   addEvent(aNodes[i], 'focus', new Function('e', 'var node = this.parentNode; while(node) { ' +
     'if (node.onfocus) node.onfocus(e); node = node.parentNode }'));
   addEvent(aNodes[i], 'blur', new Function('e', 'var node = this.parentNode; while(node) { ' +
    'if (node.onblur) node.onblur(e); node = node.parentNode }'));
  }
 }

 // If this menu hides its children onclick, setup that now.
 if (hideOnClick) addEvent(mRoot, 'click', new Function(myName + '.hideAll()')); 

 // Finally, create/activate the root node.
 menus[id] = new FSMenuNode(id, true, this);
}};




var page = { win: self, minW: 0, minH: 0, MS: isIE&&!isOp,
 db: document.compatMode&&document.compatMode.indexOf('CSS')>-1?'documentElement':'body' };
page.elmPos=function(e,p)
{
 var x=0,y=0,w=p?p:this.win;
 e=e?(e.substr?(isNS4?w.document.anchors[e]:getRef(e,w)):e):p;
 if(isNS4){if(e&&(e!=p)){x=e.x;y=e.y};if(p){x+=p.pageX;y+=p.pageY}}
 if (e && this.MS && navigator.platform.indexOf('Mac')>-1 && e.tagName=='A')
 {
  e.onfocus = new Function('with(event){self.tmpX=clientX-offsetX;' +
   'self.tmpY=clientY-offsetY}');
  e.focus();x=tmpX;y=tmpY;e.blur()
 }
 else while(e){x+=e.offsetLeft;y+=e.offsetTop;e=e.offsetParent}
 return{x:x,y:y};
};


if (isNS4)
{
 // Various NS4 hacks and tweaks. You can delete this if you don't care about NS4 support.

 var fsmMouseX, fsmMouseY, fsmOR=self.onresize, nsWinW=innerWidth, nsWinH=innerHeight;
 document.fsmMM=document.onmousemove;

 self.onresize = function()
 {
  if (fsmOR) fsmOR();
  if (nsWinW!=innerWidth || nsWinH!=innerHeight) location.reload();
 };

 document.captureEvents(Event.MOUSEMOVE);
 document.onmousemove = function(e)
 {
  fsmMouseX = e.pageX;
  fsmMouseY = e.pageY;
  return document.fsmMM?document.fsmMM(e):document.routeEvent(e);
 };

 function isMouseIn(sty)
 {
  with (sty) return ((fsmMouseX>left) && (fsmMouseX<left+clip.width) &&
   (fsmMouseY>top) && (fsmMouseY<top+clip.height));
 };
}
////////////////////////////////////
function init() {
		myLimitedTextarea = new Bs_LimitedTextarea('desc', 255);
		myLimitedTextarea.infolineCssStyle = "font-family:arial; font-size:11px; color:gray;";
		myLimitedTextarea.draw();
	} 
	function valunum(input){
	if(isNaN(input.value) || input.value == ""){
	alert("Please enter numbers only");
	input.value= '';
	input.focus(); return false;
	} else {return true; } }
	function valunum2(input,maxi){
	if(isNaN(input.value)){
	alert("Please enter numbers only");
	input.value = '';
	input.focus(); return false;
	} else if(input.value > maxi){
	alert("Please enter a value no higher than R " + maxi);
	input.value = '';
	input.focus(); return false;} else if(input.value != '' && input.value < 10){
	alert("Please enter a higher value.");
	input.value = '';
	input.focus(); return false;} else {
	return true; }

	}
	function valuForm(input1,maxi){
	if(valunum2(input1,maxi)){
	return true; } else {
	input1.value = '';
	input1.focus();
	return false; } 

	}
	function valunum3(input,maxi,old,mini){
	var maxi = parseInt(maxi);
	var old = parseInt(old);
	var mini = parseInt(mini);
	if(isNaN(input.value)){
	alert("Please enter numbers only");
	input.value = '';
	input.focus();
	}
	if(input.value > maxi){
	alert("Please enter a value no higher than R " + maxi);
	input.value = old;
	input.focus(); }
	if(input.value != '' && input.value < mini+1){
	alert("Please enter a higher value.");
	input.value = old;
	input.focus(); }

	}
	
	
	
	function compdates(form){
	var date1 = new Date(form.emonth.value + "/" + form.eday.value + "/" + form.eyear.value + " 00:00:00"); //date out //09/16/2007 23:42:21
	var date2 = new Date(form.smonth.value + "/" + form.sday.value + "/" + form.syear.value + " 00:00:00"); //09/16/2007 23:42:21
	var date3 = new Date();
	var date4 = new Date(date3.getMonth()+1 + "/" + date3.getDate() + "/" + date3.getFullYear() + " 00:00:00");
	//var date2 = new Date(form.date2.value);
	////////////////////////
	var validformat=/^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
	var emonthfield = form.emonth.value; 
	var edayfield = form.eday.value;
	var eyearfield = form.eyear.value;
	var edayobj = new Date(eyearfield, emonthfield-1, edayfield);
	var smonthfield = form.smonth.value; 
	var sdayfield = form.sday.value;
	var syearfield = form.syear.value;
	var sdayobj = new Date(syearfield, smonthfield-1, sdayfield);

	/////////////////////
	var sec = date2.getTime() - date1.getTime();
	var sec2 = date2.getTime() - date4.getTime();
	if (isNaN(sec))
	{
		alert("Input data is incorrect!");
		return false;
	}
	else if(sec2 < 0){
	alert("Please choose a date that has not already passed.");
	return false;
	} else if (sec > 0)
	{
		alert("Date In must be on or before Date Out.");
		return false;
	} else if(isNaN(form.claim.value) || form.claim.value == ''){
	alert("Please specify how much you would like to Claim.");
	form.claim.focus()
	return false; }

	else if(form.client.value == ''){
	alert("Please enter a Client name, eg \"Smith Family\".");
	return false; }
	
	else if(isNaN(form.guests.value) || form.guests.value == ''){
	alert("Please enter the Number of Guests.");
	form.guests.focus()
	return false; }
	else if (!validformat.test(form.emonth.value + "/" + form.eday.value + "/" + form.eyear.value)) {
	alert("The 'Date Out' you provided is invalid. Please try again."); return false; }
	else if (!validformat.test(form.smonth.value + "/" + form.sday.value + "/" + form.syear.value)) {
	alert("The 'Date In' you provided is invalid. Please try again."); return false; }
	else if((edayobj.getMonth()+1!=emonthfield)||(edayobj.getDate()!=edayfield)||(edayobj.getFullYear()!=eyearfield))
	{ alert("The 'Date Out' you provided is invalid. Please try again."); return false; } 
	else if((sdayobj.getMonth()+1!=smonthfield)||(sdayobj.getDate()!=sdayfield)||(sdayobj.getFullYear()!=syearfield))
	{ alert("The 'Date In' you provided is invalid. Please try again."); return false; } 

	
	else { return true; }
	
	}

var testresults
function checkemail(field){	
		var str= field.value
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
		if (filter.test(str)) 
		testresults=true
		else{ alert(str + " is not a valid email address. Please enter a valid email address.")
			testresults=false
			field.value = '';
			field.focus();
		}
		return (testresults)
}

function checklinkform(form){
if(form.name.value == ''){ alert("Please enter your name."); return false; }
else if(form.email.value == ''){ alert("Please enter your email address."); return false; }
else if(form.cat.value == '0'){ alert("Please select a category."); return false; }
else if(form.title.value == ''){ alert("Please enter a title."); return false; }
else if(form.desc.value == ''){ alert("Please enter a description."); return false; }
else if(form.url.value == ''){ alert("Please enter your website address."); return false; }
else if(form.reciprocal.value == ''){ alert("Please enter a reciprocal url \n (the page on your website where you will link back to us)."); return false; }
else return true;

}


function CheckRegForm(theform){

var error = "";
/*//*/
error += isBlank(theform.name.value,"Please enter your Name");
error += isBlank(theform.surname.value,"Please enter your Surname");
error += isBlank(theform.company.value,"Please enter your Company name");
error += checkEmail(theform.email.value,"Please enter a valid Email Address");
error += isBlank(theform.password.value,"Please enter a Password");
error += fieldmatch(theform.password.value,theform.password2.value,"Your passwords do not match. Please review");
error += isEmptyNum(theform.tel.value,"Please enter a valid Phone Number");
//error += isEmptyNum(theform.cell.value,"Your Cell Number is invalid");
//error += isEmptyNum(theform.fax.value,"Your Fax Number is invalid");
error += dropdown(theform.region,"Please select your Nearest Region");

if(error != ""){ alert(error); return false; }  // else { return true; }
}


function CheckBookForm(theform){

var error = "";
/*//*/
error += dropdown(theform.title,"Please select Title");
error += isBlank(theform.name.value,"Please enter your Name");
error += isBlank(theform.surname.value,"Please enter your Surname");
error += checkEmail(theform.email.value,"Please enter a valid Email Address");
error += isBlank(theform.arrival.value,"Please enter your approx. Arrival date.");
error += isBlank(theform.departure.value,"Please enter your approx. Departure date.");
error += isEmptyNum(theform.tel.value,"Please enter a valid Phone Number");

if(error != ""){ alert(error); return false; }  // else { return true; }
}



function isBlank(str,msg){
	var error = "";
	if(str.length == 0){ error = msg +'\n'; }
	if(str.length < 2){
		for (var i = 0; i <= str.length-1; i++){ /// all spaces?
			if(str.charAt(i) == " "){ error = msg +'\n';  } else {  error = "";
			}
		}
	}
	return error;
	}

function fieldmatch(str1,str2,msg){
	var error = "";
	if(str1 != str2){
	error = msg +'\n';
	}
	return error;

}



function checkEmail (strng,msg) {
var error="";
	if (isBlank(strng)) { error = msg + "\n"; }
	
		var emailFilter=/^.+@.+\..{2,3}$/;
		if (!(emailFilter.test(strng))) { error = msg + "\n"; }
		else {
		   var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
			 if (strng.match(illegalChars)) { error = msg + "\n"; }
		}
	return error;    
}

function isEmptyNum(strng,msg) {
var error = "";
	if (isBlank(strng)) { error = msg + "\n"; } else {
		   var illegalChars= /[\@\<\>\,\;\:\\\"\[\]]/
			 if (strng.match(illegalChars)) { error = msg + "\n"; }
		}
	return error;	  
}
function valNum(strng,msg) {
var error = "";
	if(strng.length != 0){
		   var illegalChars= /[\@\<\>\,\;\:\\\"\[\]]/
			 if (strng.match(illegalChars)) { error = msg + "\n"; }
	}
	return error;	  
}


function radio(radiobut,strng){
var error = "";
var radio_choice = false;
for (i = 0; i < radiobut.length; i++){
if (radiobut[i].checked)
radio_choice = true; 
}
if (!radio_choice){ error = ""+strng+"\n"; }
return error; }

function dropdown(menu,strng){
var error = "";
 if ( menu.selectedIndex == 0 )
    {
        error = strng+" \n";
        valid = false;
    }
	return error; }
	


function toggleLayer(whichLayer){
if (document.getElementById) {
	// this is the way the standards work
	var style2 = document.getElementById(whichLayer).style;
	style2.display = style2.display? "":"block";
}
else if (document.all){
	// this is the way old msie versions work
	var style2 = document.all[whichLayer].style;
	style2.display = style2.display? "":"block";
} else if (document.layers) {
	// this is the way nn4 works
	var style2 = document.layers[whichLayer].style;
	style2.display = style2.display? "":"block"; }
}

function dropother(menu,layer){
 if ( menu.selectedIndex == 1 ){
 	toggleLayer(layer); } else { 	
	if(document.getElementById(layer).style.display == "block"){
 	toggleLayer(layer); } }

}
function testform(thisform){
				if(!CheckBookForm(thisform)){ alert("Works!!"); } else { alert("Bug!!"); }
}

/*

FREESTYLE MENUS v1.0 RC (c) 2001-2006 Angus Turnbull, http://www.twinhelix.com
Altering this notice or redistributing this file is prohibited.

*/

 
	

function CheckPost(theform){

var error = "";
/*//*/
error += isBlank(theform.title.value,"Please enter a Title for your post");
error += isBlank(theform.text.value,"Please enter your Post");

if(error != ""){ alert(error); return false; }  // else { return true; }
}


function toggle(id){
	
	if(element(id).style.display=='none'){
		element(id).style.display='block';
	} else {
		element(id).style.display='none';
	}
}