function showflash(param, version) {
	document.writeln(param); 
}


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;
}



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 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;
      }
    }
  }
}



var photoalbum = Class.create();
photoalbum.prototype = {
  initialize: function() {
  
    

    var film = document.getElementsByClassName("film");
    if(film.length>0) {
      this.filmPlace = film[0];
      
      for(var i=0; i<mas.length; i++) {
        this.createThumb(mas[i]);
      }
      
      this.makeFirstStep();
      
    }
  }, 
  createThumb: function(aliasFileName) {
    var newElement = document.createElement("div");
    newElement.className = "frame";
    newElement.rel = aliasFileName;
    var newImage = document.createElement("img");
    newImage.src = photos_dir+"/"+aliasFileName+"_s.jpg";
    newElement.appendChild(newImage);
    this.filmPlace.appendChild(newElement);
    
    newImage.onclick = this.thumbClicked.bindAsEventListener(this);
    
  },
  thumbClicked: function(evt) {
    var aliasClicked = Event.element(evt).parentNode.rel;
    this.showPhoto(aliasClicked);
    this.updateTextComment(aliasClicked);
    this.showSelection(aliasClicked);
  },
  showPhoto: function(aliasClicked) {
    var element = document.getElementsByClassName("img")[0];
    element.style.background = "url("+ photos_dir +"/"+aliasClicked+"_m.jpg) no-repeat center center";
  },
  
  updateFullscreenBtn: function(aliasClicked) {
    var element = $("zoombtn");
    element.href = photos_dir+"/"+aliasClicked+".jpg";
  }, 
  
  updateTextComment: function(aliasClicked) {
    /*for(var i=0; i<mas.length; i++) {
      if(mas[i]==aliasClicked) {
        $("photo-description").innerHTML = descr[i];
      }
    }*/
  },
  
  showSelection: function(aliasClicked) {
    for(var i=0; i<this.filmPlace.childNodes.length; i++) {
      if(this.filmPlace.childNodes[i].rel==aliasClicked && this.filmPlace.childNodes[i].className == "frame") {
        this.filmPlace.childNodes[i].childNodes[0].style.border = "3px solid #3da1bf";
      }
      else if(this.filmPlace.childNodes[i].className == "frame") {
        this.filmPlace.childNodes[i].childNodes[0].style.border = "none";
      }
    }
  },
  
  
  clickLeftButton: function(evt) {
    var btn = Event.element(evt);
    var elements = document.getElementsByClassName("frame");
    for(var i=0; i<elements.length; i++) {
      if(elements[i].rel == mas[this.getMasId(this.aliasClicked)-1]) {
        elements[i].childNodes[0].click();
        break;
      }
    }
  },
  
  
  clickRightButton: function(evt) {
    var btn = Event.element(evt);
    var elements = document.getElementsByClassName("frame");
    for(var i=0; i<elements.length; i++) {
      if(elements[i].rel == mas[this.getMasId(this.aliasClicked)+1]) {

        elements[i].childNodes[0].click();
        break;
      }
    }
  },
  
  getMasId: function(aliasFileName) {
    for(var i=0; i<mas.length; i++) {
      if(mas[i] == aliasFileName) {return i;}
    }
  },
  

  
  makeFirstStep: function() {
    this.showPhoto(mas[0]);
   this.showSelection(mas[0]);
  }
  
}





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].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];
      }
    }
  }

}





subway2 = Class.create();
subway2.prototype = {
  initialize: function(elementId, type) {
    this.elemBody = $(elementId);
    this.type = type;
    if(this.elemBody) {
      for(var i=0; i<this.elemBody.childNodes.length; i++) {
        if(this.elemBody.childNodes[i].tagName == "LI") {
          
          var link = this.getChildByClassName(this.elemBody.childNodes[i], "link");
          
          if(link.className == "link act") {
            var sister = this.getSisterByClassName(link, "description");
            this.rollOverClickedElem(sister);
          }
          
          link.onclick = this.clickedOnLink.bindAsEventListener(this);
          
          
        }
      }
    }
  },
  
  clickedOnLink: function(evt) {
    var elem = Event.element(evt);
    this.lastClicked = elem;
    
    
    if(this.type == "single") {
      this.rollOutAll();
    }
    
    var sister = this.getSisterByClassName(elem, "description");
    var sisterHeight = getElementComputedStyle(sister, 'height');
    
    if(elem.className == "link") {
      elem.className = "link act";
    }
    else {
      elem.className = "link";
    }

    if(sisterHeight !== "0px") {
      this.rollOutClickedElem(sister);
    }
    else {
      this.rollOverClickedElem(sister);
    }
    
    

  },
  
  
  rollOutAll: function() {
    for(var i=0; i<this.elemBody.childNodes.length; i++) {
        if(this.elemBody.childNodes[i].tagName == "LI") {
          var link = this.getChildByClassName(this.elemBody.childNodes[i], "link");
          
          if(link.className == "link act" && this.lastClicked !== link) {
            var sister = this.getSisterByClassName(link, "description");
            this.rollOutClickedElem(sister);
            link.className = "link";
          }
        }
    }
  },
  
  getChildByClassName: function(parentEl, classNm) {
    for(var i=0; i<parentEl.childNodes.length; i++) {
      
      if(parentEl.childNodes[i].className == classNm || parentEl.childNodes[i].className == classNm + ' act') {
        return parentEl.childNodes[i];
      }
      else {
        var reqElem = this.getChildByClassName(parentEl.childNodes[i], classNm);
      }
    }
    return reqElem;
  },
  
  getSisterByClassName: function(elem, classNm) {
    return this.getChildByClassName(elem.parentNode, classNm);
  },
  
  rollOverClickedElem: function(elem) {
    new efx(elem, "height", 0, elem.scrollHeight, 10, 250, 10, "px");
    //elem.style.height = "200px";  
  },
  
  rollOutClickedElem: function(elem) {
    new efx(elem, "height", elem.scrollHeight, 0, 10, 250, 10, "px");
  }
  
}



floorDescription = Class.create();
floorDescription.prototype = {
  initialize: function() {
    if($("bfl2")) {
      $("bfl1").onclick = this.clickFloor1.bindAsEventListener(this);
      $("bfl2").onclick = this.clickFloor2.bindAsEventListener(this);
    }
  }, 
  clickFloor1: function() {
    $("bfl1").className = "floor-btn act";
    $("bfl2").className = "floor-btn";
    $("fl1").style.zindex = "10";
    $("fl1").style.display = "block";
    $("fl2").style.zindex = "0";
    $("fl2").style.display = "none";
  },
  clickFloor2: function() {
    $("bfl1").className = "floor-btn";
    $("bfl2").className = "floor-btn act";
    $("fl1").style.zindex = "0";
    $("fl1").style.display = "none";
    $("fl2").style.zindex = "10";
    $("fl2").style.display = "block";
  }
}



function run() {
  new photoalbum();
  new formchecker('form');
  new subway2('comments', 'single');
  new floorDescription();
}


evt.add(window, 'load', run);  

