Event.observe(window, 'load', function() {
	HighlightFormElements();
	ExpandTextareas();
});

var callbackExpanded = false;

function HighlightFormElements() {
	focustags = new Array('input','select','textarea');
	
	for(i=0;i<focustags.length;i++) {
		inputs = document.getElementsByTagName(focustags[i]);
		for(j=0;j<inputs.length;j++) {
			Event.observe(inputs[j], 'focus', function(e) {
				var input = Event.element(e);
				if(input.type!='submit')
				{
				  input.addClassName('focus');
				}
			});
			Event.observe(inputs[j], 'blur', function(e) {
				var input = Event.element(e);
				input.removeClassName('focus');
			});
		}
	}
}

function ExpandTextarea(obj) {
	var counter = obj.value.match(/\n/gi);
	if(counter) {
		if(counter.length > 2) {
			obj.rows = counter.length+2;
		} else {
			obj.rows = 4;
		}
	}
}

function ExpandTextareas() {
	textareas = document.getElementsByTagName('textarea');
	
	for(i=0;i<textareas.length;i++) {
		Event.observe(textareas[i], "keyup", function(e) {
			element = Event.element(e);
			ExpandTextarea(element);
		});
	}
}

var ss = {
  fixAllLinks: function() {
    // Get a list of all links in the page
    var allLinks = document.getElementsByTagName('a');
    // Walk through the list
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if ((lnk.href && lnk.href.indexOf('#') != -1) && 
          ( (lnk.pathname == location.pathname) ||
	    ('/'+lnk.pathname == location.pathname) ) && 
          (lnk.search == location.search)) {
        // If the link is internal to the page (begins in #)
        // then attach the smoothScroll function as an onclick
        // event handler
        ss.addEvent(lnk,'click',ss.smoothScroll);
      }
    }
  },

  smoothScroll: function(e) {
    // This is an event handler; get the clicked on element,
    // in a cross-browser fashion
    if (window.event) {
      target = window.event.srcElement;
    } else if (e) {
      target = e.target;
    } else return;

    // Make sure that the target is an element, not a text node
    // within an element
    if (target.nodeType == 3) {
      target = target.parentNode;
    }

    // Paranoia; check this is an A tag
    if (target.nodeName.toLowerCase() != 'a') return;

    // Find the <a name> tag corresponding to this href
    // First strip off the hash (first character)
    anchor = target.hash.substr(1);
    // Now loop all A tags until we find one with that name
    var allLinks = document.getElementsByTagName('a');
    var allDivs = document.getElementsByTagName('div');
    var all = [allLinks, allDivs];
    var destinationLink = null;
    for (var j=0; j<all.length; j++) {
      for (var i=0;i<all[j].length;i++) {
        var lnk = all[j][i];
        if (lnk.name && (lnk.name == anchor)) {
          destinationLink = lnk;
          break;
        } else if (lnk.id && (lnk.id == anchor)){
	  destinationLink = lnk;
          break;
	}
      }
    }
    /*
    var allLinks = document.getElementsByTagName('a');
    var destinationLink = null;
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if (lnk.name && (lnk.name == anchor)) {
        destinationLink = lnk;
        break;
      }
    }
    */

    // If we didn't find a destination, give up and let the browser do
    // its thing
    if (!destinationLink) return true;

    // Find the destination's position
    var destx = destinationLink.offsetLeft; 
    var desty = destinationLink.offsetTop;
    var thisNode = destinationLink;
    while (thisNode.offsetParent && 
          (thisNode.offsetParent != document.body)) {
      thisNode = thisNode.offsetParent;
      destx += thisNode.offsetLeft;
      desty += thisNode.offsetTop;
    }

    // Stop any current scrolling
    clearInterval(ss.INTERVAL);

    cypos = ss.getCurrentYPos();

    ss_stepsize = parseInt((desty-cypos)/ss.STEPS);

    ss.INTERVAL =
setInterval('ss.scrollWindow('+ss_stepsize+','+ desty +',"'+anchor+'")',10);

    // And stop the actual click happening
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    }
    if (e && e.preventDefault && e.stopPropagation) {
      e.preventDefault();
      e.stopPropagation();
    }
  },

  scrollWindow: function(scramount,dest,anchor) {
    wascypos = ss.getCurrentYPos();
    isAbove = (wascypos < dest);
    window.scrollTo(0,wascypos + scramount);
    iscypos = ss.getCurrentYPos();
    isAboveNow = (iscypos < dest);
    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
      // if we've just scrolled past the destination, or
      // we haven't moved from the last scroll (i.e., we're at the
      // bottom of the page) then scroll exactly to the link
      window.scrollTo(0,dest);
      // cancel the repeating timer
      clearInterval(ss.INTERVAL);
      // and jump to the link directly so the URL's right
      location.hash = anchor;
    }
  },

  getCurrentYPos: function() {
    if (document.body && document.body.scrollTop)
      return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop)
      return document.documentElement.scrollTop;
    if (window.pageYOffset)
      return window.pageYOffset;
    return 0;
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener){
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent){
      var r = elm.attachEvent("on"+evType, fn);
      return r;
    } else {
      alert("Handler could not be removed");
    }
  } 
}

ss.STEPS = 25;

ss.addEvent(window,"load",ss.fixAllLinks);

function expandCallBack() {
  if (!callbackExpanded)
  {	
    showCallBack();	
    new Effect.Scale('innercallback',180,{scaleX:false,scaleContent:false,duration:0.5});
  }
  return false;
}

function contractCallBack() {
  if (callbackExpanded)
  {
    hideCallBack();
    new Effect.Scale('innercallback',49,{scaleX:false,scaleContent:false,duration:0.5});	
  }
  return false;
}

function hideCallBack() {
  $('contractCallback').setStyle({display: 'none'});	
  $('expandCallback').setStyle({display: 'block'});
  callbackExpanded = false;
}

function showCallBack() {
  $('expandCallback').setStyle({display: 'none'});
  $('contractCallback').setStyle({display: 'block'});
  callbackExpanded = true;
}

function showCallBackThanks() {
   Effect.toggle('callbackthanks');
}

Event.observe(window,'load',function(e) {
  if($('callbackfrm')) {
    Event.observe('callbackfrm','submit',function(e) {
      if($('name').value=='' || $('name').value=='Your Name') {
        alert("You must provide a name");
        Event.stop(e);
        return false;
      }
      
      if($('number').value=='' || $('number').value=='Your Phone Number') {
        alert("You must provide a phone number");
        Event.stop(e);
        return false;
      }
      
      new Ajax.Request($('callbackfrm').action+'?'+$('callbackfrm').serialize(), {
        method: 'get',
        onSuccess: function(transport) {
		  $('callback').setStyle({display: 'none'});
		  $('callbackthanks').setStyle({display: 'block'});	
          //Effect.toggle('callback', {afterFinish:showCallBackThanks});
          //new Effect.Scale('callbackbox',44,{scaleX:false,scaleContent:false,afterFinish:showCallBackThanks,duration:0.5});
        }
      });
      
      Event.stop(e);
      return false;
    });
  }
});