
function popup(url, w, h, resize, scroll) {
	window.open(url,"Link","toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars="+scroll+",resizable="+resize+",width="+w+",height="+h+",left=50,top=50");
	return false;
}


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 dropDownMenu = Class.create();
dropDownMenu.prototype = {
  initialize: function() {
    this.ddmenu = $('ddMenu');
    if(this.ddmenu) {
      this.button = this.ddmenu.getElementsByClassName('default')[0];
      this.arrow = this.ddmenu.getElementsByClassName('arrow')[0] !== null ? this.ddmenu.getElementsByClassName('arrow')[0] : this.ddmenu.getElementsByClassName('arrow-act')[0];
      this.ddLayout = this.ddmenu.getElementsByClassName('dropDown')[0];
      this.bodyElement = document.getElementsByTagName('body')[0];
      this.bodyElement.onclick = this.clickBody.bindAsEventListener(this);
    }
  },

  clickBody: function(evt) {
    var elem = Event.element(evt);
    if(elem.className == "arrow" || elem.className == "default" || elem.parentNode.className == "default") {

      if(getElementComputedStyle(this.ddLayout, 'height') == "0px") {
        this.appearLangMenu();
      }
      else {
        if(getElementComputedStyle(this.ddLayout, 'height') !== "0px") {
          new efx(this.ddLayout, "height", this.ddLayout.scrollHeight, 0, 0, 100, 10, "px");
          new efx(this.ddLayout, "opacity", 100, 0, 0, 100, 20, "");
          this.arrow.className = "arrow";
        }
      }
    }
    else {
      if(getElementComputedStyle(this.ddLayout, 'height') !== "0px") {
        new efx(this.ddLayout, "height", this.ddLayout.scrollHeight, 0, 0, 100, 10, "px");
        new efx(this.ddLayout, "opacity", 100, 0, 0, 100, 20, "");
        this.arrow.className = "arrow";
      }
    }
  },
  appearLangMenu: function() {
    new efx(this.ddLayout, "opacity", 0, 100, 0, 100, 20, "");
    new efx(this.ddLayout, "height", 0, this.ddLayout.scrollHeight, 0, 200, 10, "px");
    this.arrow.className = "arrow-act";
  }
  
}


var autocomplete = Class.create();
autocomplete.prototype = {
  initialize: function(elementClassName, type) {
    this.type = type;
    this.elementClassName = elementClassName;
    var elements = $$('input');
    for(var i=0; i<elements.length; i++) {
      if(elements[i].className == this.elementClassName) {
        (this.type == 'password') ? this.replaceElement(elements[i], 'text', elements[i].defaultValue) : '';
        elements[i].onfocus = this.focused.bindAsEventListener(this);
        elements[i].onblur =  this.blured.bindAsEventListener(this);
      }

    }
  },
  focused: function(evt) {
		var element = Event.element(evt);
    if(element.value == element.defaultValue) {
      this.type == 'password' ? this.replaceElement(element, 'password', '') : ''; 
      element.value = '';
      //element.className = this.elementClassName + ' active';
      element.style.color = '#000000';
    }
  },
  blured: function(evt) {
    var element = Event.element(evt)
      if(element.value == '') {
        this.type == 'password' ? this.replaceElement(element, 'text', element.defaultValue) : ''; 
        element.value = element.defaultValue;
        //element.className = element.className.replace(/\ active/, '');
        element.style.color = '#9f9f9f';
      }
  },
  replaceElement: function (element, type, setValue) {
    var newelement = document.createElement('input');
    newelement.className = element.className;
    newelement.defaultClass = element.defaultClass;
    newelement.setAttribute('type', type);
    newelement.setAttribute('name', element.name);
    newelement.setAttribute('style', element.style);
    newelement.defaultValue = element.defaultValue;
    newelement.value = setValue;
    element.parentNode.appendChild(newelement);
    if(setValue == '') {  newelement.focus(); /*newelement.className += ' active';*/ newelement.style.color = '#000000'; }
    else {/*newelement.className = newelement.className.replace(/\ active/, '');*/ newelement.style.color = '#9f9f9f'; }

    element.parentNode.removeChild(element);
    newelement.onfocus = this.focused.bindAsEventListener(this);
    newelement.onblur =  this.blured.bindAsEventListener(this);
    
    return newelement;
  }
 
};






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].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 mpServices = Class.create();
mpServices.prototype = {
  initialize: function() {
    this.canvas = document.getElementsByClassName("mp-services")[0];
    if(this.canvas) {
      this.btns = this.canvas.getElementsByTagName("a");
      this.colors = new Array();
      for(var i=0; i<this.btns.length; i++) {
        if(this.btns[i].id !== null && this.btns[i].id !== '') {
          this.colors[this.colors.length] = this.btns[i].id;
          this.btns[i].onclick = this.clicked.bindAsEventListener(this);
        }
      }
      this.defaultColor = this.colors[parseInt(Math.random()*10/2)];
      this.setDefault(this.defaultColor);
    }
  },
  clicked: function(evt) {
    var elem = Event.element(evt);
    this.selectBtn(elem);
    
    if(elem.id !== this.defaultColor) {
      var leftElemPost = this.selectLeftColor(this.defaultColor);
      var rightElemPost = this.selectRightColor(this.defaultColor);
      var leftElem = this.selectLeftColor(elem.id);
      var rightElem = this.selectRightColor(elem.id);
      this.defaultColor = elem.id;
    
    
      new efx(leftElemPost, "right", 0, -101, 0, 300, 10, "%");
      new efx(leftElem, "right", -101, 0, 300, 300, 10, "%");
      new efx(rightElemPost, "left", 0, -100, 0, 300, 10, "%");
      new efx(rightElem, "left", -100, 0, 300, 300, 10, "%");
    }
  },
   
  
  selectBtn: function(btn) {
    this.unselectBtns();
    btn.parentNode.className = "act";
  },
  
  selectLeftColor: function(color) {
    var element = this.canvas.getElementsByClassName("left")[0];
    var element = element.getElementsByClassName(color)[0];
    return element;
  },
  
  selectRightColor: function(color) {
    var element = this.canvas.getElementsByClassName("right")[0];
    var element = element.getElementsByClassName(color)[0];
    return element;
  },
  
  unselectBtns: function() {
    for(var i=0; i<this.btns.length; i++) {
      if(this.btns[i].id !== null && this.btns[i].id !== "") {
        this.btns[i].parentNode.className = "";
      }
    }
  },
  
  setDefault: function(color) {
    var btn = $(color);
    btn.parentNode.className = "act";
    var leftElem = this.selectLeftColor(color);
    var rightElem = this.selectRightColor(color);
    leftElem.style.right = "0";
    rightElem.style.left = "0";
  }
  
}

var rSubMenuMotion = Class.create();
rSubMenuMotion.prototype = {
  initialize: function() {
    this.elem = document.getElementsByClassName('rsubmenu')[0];
    if(this.elem != null) {
      new efx(this.elem, "left", -100, 0, 0, 300, 10, "%");
    }
  }
}


var vacancyMenu = Class.create();
vacancyMenu.prototype = {
  initialize: function() {
    this.vacancyBody = document.getElementsByClassName("vacancy")[0];
    if(this.vacancyBody) {
      var btnElems = this.vacancyBody.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");
    }
     
  }
}





var eventsMenu = Class.create();
eventsMenu.prototype = {
  initialize: function() {
    this.vacancyBody = document.getElementsByClassName("events")[0];
    if(this.vacancyBody) {
      var btnElems = this.vacancyBody.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");
    }
     
  }
}




function run() {
  new dropDownMenu();
  new autocomplete("search", "search")
  new mpServices();
  new rSubMenuMotion();
  new vacancyMenu();
  new eventsMenu();
  new formchecker("form");
}


evt.add(window, 'load', run);  

