
var evt = {
  add: function(elem, evt, todo) {
    if(elem.addEventListener) {
      elem.addEventListener(evt, todo, false);
    }
    else if (elem.attachEvent) { // ie
      elem.attachEvent('on' + evt, todo);
    }
  },
  
  remove: function(elem, evt, todo) {
    if(elem.removeEventListener) {
      elem.removeEventListener(evt, todo, false);
    }
    else if (elem.detachEvent) { // ie
      elem.detachEvent('on' + evt, todo);
    }
  }
}



efx = Class.create();
efx.prototype = {
  initialize: function(obj, property, from, to, startTime, duration, frequency, quantity) {
    this.object = obj;
    this.property = property;
    this.from = from;
    this.to = to;
    this.duration = duration; 
    this.frequency = frequency;
    this.quantity = quantity;
    this.startTime = startTime;
    
    this.go();
  },
  
  go: function() {
    this.runTime = (new Date).getTime();
    this.clock = setInterval(this.run.bind(this), '1');
  },
  
  run: function() {
    if(((new Date).getTime() - this.runTime) >= this.startTime) {
      this.runTime = (new Date).getTime();
      clearInterval(this.clock);
      this.clock = setInterval(this.step.bind(this), this.frequency);
    }
  },
  
  step: function() {
    var curTime = (new Date).getTime();
    if((curTime - this.runTime) >= this.duration) {
      if(this.property == "opacity") {
        this.object.style.filter = "alpha(opacity="+this.to+")";
        this.object.style.opacity = this.to/100;
      }
      else {
        this.object.style[this.property] = this.to + this.quantity;
      }
      clearInterval(this.clock);
    }
    else {
      var normTime = (curTime - this.runTime) / this.duration;
      var curRes = (((this.to - this.from) * ((-Math.cos(Math.PI*normTime)/2) + 0.5) ) + parseFloat(this.from));
      
      if(this.property == "opacity") {
        this.object.style.filter = "alpha(opacity="+curRes+")";
        this.object.style.opacity = curRes/100;
      }
      else {
        this.object.style[this.property] = curRes + this.quantity;
      }
    }
  }
}



function getElementComputedStyle(elem, prop){  
  if (typeof elem!="object") elem = document.getElementById(elem);    
  // external stylesheet for Mozilla, Opera 7+ and Safari 1.3+  
  if (document.defaultView && document.defaultView.getComputedStyle)  {    
    if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();    
    return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);  
  }    

// external stylesheet for Explorer and Opera 9  
  if (elem.currentStyle)  {    
    var i;    while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);    
    return elem.currentStyle[prop];  
  }    return "";
}



var formchecker = Class.create();

formchecker.prototype = {
  initialize: function(formname) {
  
    this.formelement = document.getElementById(formname);

    if(this.formelement!=null) {  
      this.req = this.getrequiredfiels();
      this.checkformonrun();
    
      for(var i=0; i<this.req.length; i++) {
        this.req[i].onblur = this.onchangefieldvalue.bindAsEventListener(this);
        this.req[i].onkeyup = this.onchangefieldvalue.bindAsEventListener(this);
      }
      
      formElements = this.getFormElements();
      
      for(var i=0; i<formElements.length; i++) {
        if(formElements[i].className=='phone' || formElements[i].className=='phone require' || formElements[i].className=='digit'  || formElements[i].className=='digit require') {
          formElements[i].onkeydown = this.interceptValueAndMakeDigits.bindAsEventListener(this);
        }
      }
      
    }
  },
  
  interceptValueAndMakeDigits: function(evt) {
    var element = Event.element(evt);

    if(evt.keyCode) var code = evt.keyCode;
    else if(evt.which) var code = evt.which;

    if((code>=48 && code<=57) || (code>=97 && code<=105) || (code>=37 && code<=40) || (code==8 || code==9 || code==13 || code==46)) return true;
    else return false;
  },
  
  getfieldtype: function(element) {

    var elemclassname = element.className;
    
    var re = /phone/;
    if(re.test(elemclassname)) { return 'phone';  }
    
    var re = /email/;
    if(re.test(elemclassname)) { return 'email';  }
    
    
    else {  return 'default';   }
  },
  
  getrequiredfiels: function() {
    var allelems = this.formelement.elements;
    var elems = new Array();
    var re = /require/i; // regexp
    var j = 0;
    
    for(var i=0; i<allelems.length; i++) {
      if(re.test(allelems[i].className)) {
        elems[j] = allelems[i];
        j++;
      }
      
    }
    

    var req = new Array();
    var j = 0;
    for(var i in elems) {
      if(elems[i].className) {
        req[j] = elems[i];
        j++;
      }
    }
    return req;
  },
  
  getFormElements: function() {
    return this.formelement.elements;
  },
  
  checkfield: function(element) {
    var type = this.getfieldtype(element);
    switch(type) {
      case 'default' : return (element.value.length > 1) ? true : false; break;
      case 'email' : return this.checkfield_email(element); break;
      case 'phone' : return this.checkfield_phone(element); break;
    } 
    
  },
  
  checkfield_email: function(element) {
    if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(element.value)){ 
      return true 
    } 
    else { return false; }
  }, 

  checkfield_phone: function(element) {
    
    if (element.value.length > 7){ 
      var re = /^[0-9]{8,15}?/;
      if(re.test(element.value)) {
        return true;
      }
      else { return false; }
    } 
    else { return false; }
  },
  

  
  checkallfields: function() {
    for(var i=0; i<this.req.length; i++) {
      if(this.checkfield(this.req[i]) == false) {return false;}
    }
    return true;
  },
  
  onchangefieldvalue: function(evt) {
    var element = Event.element(evt);
    if(this.checkfield(element)) {
      this.fieldactivation(element);
    }
    else {
      this.fielddeactivation(element);
    }
    
    if(this.checkallfields()) { this.formactivation();  }
    else { this.formdeactivation();  }
  },
  
  checkformonrun: function() { 

    for(var i=0; i<this.req.length; i++) {
     
      if(this.checkfield(this.req[i]) == false) {
        this.fielddeactivation(this.req[i]);
      }else {
        this.fieldactivation(this.req[i]);
      }
    }
    
    if(this.checkallfields()) { this.formactivation();  }
    else { this.formdeactivation();  }
    
  },
  
  formactivation: function(element) {
    var submitbtn = this.findsubmit();
    submitbtn.disabled = false;
  },
  
  formdeactivation: function(element) {
    var submitbtn = this.findsubmit();
    submitbtn.disabled = true;
  },
  
  fieldactivation: function(element) {
    element.style.color = 'black';
    var brothers = element.parentNode.childNodes;
    for(var i=0; i<brothers.length; i++) {
      if(brothers[i].className == 'bullet') {
        
        brothers[i].style.display = 'none';
      }
    }
  },

  fielddeactivation: function(element) {
    element.style.color = 'red';
    var brothers = element.parentNode.childNodes;
    for(var i=0; i<brothers.length; i++) {
      if(brothers[i].className == 'bullet') {
        brothers[i].style.display = 'inline';
      }
    }

  },
  
  findsubmit: function() {
    for(var i=0; i<this.formelement.elements.length; i++) {
      if(this.formelement.elements[i].type == 'submit') {
        return this.formelement.elements[i];
      }
    }
  }

}



var centersMenu = Class.create();
centersMenu.prototype = {
  initialize: function() {
    this.centersBody = document.getElementsByClassName("centers")[0];
    if(this.centersBody) {
      var btnElems = this.centersBody.getElementsByClassName("sublink");
      for(var i=0; i<btnElems.length; i++) {
        btnElems[i].onclick = this.clicked.bindAsEventListener(this);
      }
    }
  },
  clicked: function(evt) {
    var elem = Event.element(evt);
    var checker = false;
    var contentElem = elem.nextSibling;
    while(contentElem.className !== "content" ) {
      contentElem = contentElem.nextSibling;
    }



    if(getElementComputedStyle(contentElem, "height") == "0px") {
      new efx(contentElem, "height", 0, contentElem.scrollHeight, 0, 300, 10, "px");
    }
    else {
      new efx(contentElem, "height", contentElem.scrollHeight, 0, 0, 300, 10, "px");
    }
     
  }
}


zebra = Class.create();
zebra.prototype = {
  initialize: function() {
    this.elems = document.getElementsByClassName("table");
    if(this.elems) {
     
        for(var i=0; i<this.elems.length; i++) {
          var elemsBrothers = this.elems[i].getElementsByClassName("tr");
          for(var j=0; j<elemsBrothers.length; j++) {
            elemsBrothers[j].onmouseover = this.mouseOvered.bindAsEventListener(this);
            elemsBrothers[j].onmouseout = this.mouseOuted.bindAsEventListener(this);
          }
        }

    }

  },
  
  mouseOvered: function(evt) {
    var elem = Event.element(evt);
    var elem = this.getParent(elem);
    if(getElementComputedStyle(elem, "background-color")!=="#93abe0" && getElementComputedStyle(elem, "background-color")!=="rgb(147, 171, 224)") {
      elem.style.background = "#e8e8e8";
    }

  },
  
  mouseOuted: function(evt) {
    var elem = Event.element(evt);
    var elem = this.getParent(elem);
    if(getElementComputedStyle(elem, "background-color")!=="#93abe0" && getElementComputedStyle(elem, "background-color")!=="rgb(147, 171, 224)") {
      elem.style.background = "none";
    }
  },
  
  getParent: function(elem) {
    if(elem.className == "tr") {
      return elem;
    }
    else {
      var result = this.getParent(elem.parentNode);
    }
    
    return result;
  }
  
}



function run() {
  new centersMenu();
  new formchecker("form");
  new zebra();
}


evt.add(window, 'load', run);  

