window.onload = initAll;


/****** global vars ***********/

/******* formValidation global vars *********/
var formErrors = true;

/******** calendar gloabal vars ************/
var calendarXhr;

/********** page Preview global vars **********/
var xPos;
var yPos;
var xhr = false;

/******** projects global vars **********/

// to be used as toggle
var showPagePreview = false;

var tuning = new Array();
  tuning[0] = new Array();
  tuning[0][0] = "http://www.wiredbanner.com/images/tuning.jpg";
  tuning[0][1] = "currently tuning...";
  
  
// this will hold xml data following successful ajax call
var projects = new Array();
// set global var pointer to 0
var pointer = 0;
  
  // set global length of projects 
var length;


/*****************************/
  
  function initAll() {
  
  // for any forms
  initValidation();
  initPreviewPage();
  initPlayer();
  initCalendar();
  
  } 
  
/****************** player code ******************/
  
  function initPlayer() {
  
  if (document.getElementById("player-projects")) {
  
  
  // need to create XMLhttpRequest object
  if (window.XMLHttpRequest) {
    
      xhr = new XMLHttpRequest();
    
     } else {
     
     if (window.ActiveXObject) {
     
      try {
      
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      
      
      } catch (e) {}
     
     }
    
     }
  
  
  if (xhr) {
  
      xhr.onreadystatechange = fetchProjects;
      xhr.open("GET",'http://www.wiredbanner.com/index/ajax-some-of-our-work/ajax/true', true);
      xhr.send(null);
      
      } else {
      
      
      alert("Oops! We couldn't create an XMLHttpRequest object!");
      
      
      }
  }
  
  }
  
  function fetchProjects() {
  
    if (xhr.readyState == 4) {
  
      if (xhr.status == 200) {
      
      // need to iterate over xml document and populate array with info....
      var xmlProjects = xhr.responseXML;
      
      
      
          for (var x=0; x < xmlProjects.getElementsByTagName("project").length; x++) {
          
         projects[x] = new Array();
         projects[x][0] = xmlProjects.getElementsByTagName("title")[x].childNodes[0].nodeValue;
          projects[x][1] = xmlProjects.getElementsByTagName("blurb")[x].childNodes[0].nodeValue;
           projects[x][2] = xmlProjects.getElementsByTagName("picture")[x].childNodes[0].nodeValue;
            projects[x][3] = xmlProjects.getElementsByTagName("link")[x].childNodes[0].nodeValue;
        
          
          
          }
      
     
  
      length = projects.length;
  
      rotate();
  
  
     }
    }
  
  } // closing function

  
  function initPreviewPage() {

  // using DOM to create DIV on page
  var previewDiv = document.createElement("div");
  previewDiv.id = "previewWin";
  var body = document.getElementsByTagName("body");
  body[0].appendChild(previewDiv);
  
  var allLinks = document.getElementsByTagName("a");
  
  for (var x = 0; x < allLinks.length; x++) {
  
    allLinks[x].onmouseover = showPreview;
  
  }
} // closing initPreviewPage
  
  
  function rotate() {
  
      // check not at the end, if so, reset to 0
      if (pointer >= length) {
  
          pointer = 0;
  
      // if not at the end, increment by 1
      } 
      
      // create tuning effect...
      document.getElementById("player-projects").src = tuning[0][0];
      var counter = pointer + 1;
      document.getElementById("player-message").innerHTML = '<p style="text-align: center;">Tuning...</p>';
     
      // call display function
      setTimeout("display()",1000);

  }
  
  
  
  function display() {
  
    // now display current picture
    document.getElementById("player-projects").src = projects[pointer][2];
    // now display current message
    var counter = pointer + 1;
    document.getElementById("player-message").innerHTML = '<h3 class="player-title">' + projects[pointer][0] +'</h3><p class="player-blurb">' + projects[pointer][1] + '</p><p><a href="' + projects[pointer][3] + '">'+projects[pointer][3]+'</a>';
      
    // increment pointer here...
    pointer += 1;
    setTimeout("rotate()", 10000);
  
  }
  
 
 
/*********** previewPage code ************/


function setPagePreview() {

  // if already true, then assign to false, otherwise set to true
  if (showPagePreview == true) {
 
   showPagePreview = false;
   document.getElementById("page-preview-toggle").innerHTML = "page preview off";
   
   } else {
   
   showPagePreview = true;
    document.getElementById("page-preview-toggle").innerHTML = "page preview on";
   
   }

} // closing setPagePreview

function showPreview(evt) {

  if (showPagePreview == true) {

  getPreview(evt);
  
  }
  return false;


} // closing showPreview

function hidePreview() {

  document.getElementById("previewWin").style.visibility = "hidden";

} // close hidePreview

function getPreview(evt) {

  if (evt) {
  
    var url = evt.target;
  
  } else {
  
    evt = window.event;
    var url = evt.srcElement;
    
    }
    
    xPos = evt.clientX;
    yPos = evt.clientY;
    
    if (window.XMLHttpRequest) {
    
      xhr = new XMLHttpRequest();
    
     } else {
     
     if (window.ActiveXObject) {
     
      try {
      
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      
      
      } catch (e) {}
     
     }
    
     }
  
  
  if (xhr) {
  
      xhr.onreadystatechange = showContents;
      xhr.open("GET",url, true);
      xhr.send(null);
      
      } else {
      
      
      alert("Oops! We couldn't create an XMLHttpRequest object!");
      
      
      }
  
  
  
  } // closing getPreview
  
  
function showContents() {
 
  var prevWin = document.getElementById("previewWin");
  
  if (xhr.readyState == 4) {
  
    // here, we simply get the source code of the page and dump it into the div
    prevWin.innerHTML = (xhr.status == 200) ? xhr.responseText : "Oops! There was a problem fetching the preview page: " + xhr.status;
    prevWin.style.top = parseInt(yPos)+ 20 + "px";
    prevWin.style.left = parseInt(xPos)+ 20 + "px";
    prevWin.style.visibility = "visible";
    setOpacity(prevWin,0.8);
    //prevWin.style.opacity = 0.3;
    //prevWin.style.zoom = 0.5;
    prevWin.onmouseout = hidePreview;
  
  }
 
} // closing showContents


function setOpacity(elm,val) {
          if(window.attachEvent) {
               elm.style.zoom = 1;
               elm.style.filter = "alpha(opacity=" + parseFloat(val*100) + ")";
                return elm;
          }
          elm.style.opacity  = parseFloat(val); 
   return elm;
} // closing setOpacity

/****************************/


/****** form validation code ***********/




function initValidation() {

    //store forms in array
    var forms = document.getElementsByTagName("form");
    
   if (forms.length > 0) {
    
    // loop through each form
    for (var x=0; x < forms.length; x++) {
      
        // capture form elements
       // var elems = forms[x].getElementsByTagName("input");
       var elems = forms[x].elements;
       var addSubmit = false;

        // loop through each form input element and assign event listeners
        //for (var y=0; y < elems.length; y++) {
        for (var y=0; y < elems.length; y++) {
        
          // only assigning eventlisteners to fields marked as reqd
          if (elems[y].className == "reqd") {
                 
              //addEvent(elems[y],"blur",checkFieldEvent,true);
              //addEvent(elems[y],"change",checkFieldEvent,true);
              // make sure we add an onsubmit, here setting flag
              addSubmit = true;
          
          } // closing if
            
          if (elems[y].className == "email") {
            
              //addEvent(elems[y],"blur",checkEmailEvent,true);
              //addEvent(elems[y],"change",checkEmailEvent,true);
              // make sure we add an onsubmit, here setting flag
              addSubmit = true;
            
          } // closing if reqd
          
        } // closing element loop
        
        // if flag set to true, add onSubmit EventListener
        if (addSubmit == true) {
        
          // call function to add code in cross-browser way
          addOnsubmit(forms[x]);
        
            
            
            //addEvent(forms[x], "submit", checkForm, true);
        
        } // closing if
        
        
    } // closing form loop
    
    } 

} // closing init


// function handles calls from EventListeners
function checkFieldEvent(evt) {

  // if evt is false - ie browser, we use window.event.  If this returns something, we use it
  evt = (evt) ? evt : ((window.event) ? window.event : null);
  

  if (evt) {
      // here, we pass the correct object, so we don't need to double up on code
      var elem = (evt.target) ? evt.target : evt.srcElement;

  checkField(elem);

  }

} // closing function 

// function handles calls from EventListeners
function checkEmailEvent(evt) {

  // if evt is false - ie browser, we use window.event.  If this returns something, we use it
  evt = (evt) ? evt : ((window.event) ? window.event : null);
  

  if (evt) {
      // here, we pass the correct object, so we don't need to double up on code
      var elem = (evt.target) ? evt.target : evt.srcElement;

  // calling function now that performs any validation
  checkEmail(elem);

  }

} // closing function 



// due to IE not using W3C AddEventListener, we need to use window event object
function checkField(elem) {

 
  if (elem.value.replace(/\s/g, "") == "")  {
  
        // if error message already posted for this field, remove it...
        var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
       
        }
  
        var message = document.createTextNode("please complete " + elem.name + " field");
        var p = document.createElement("p");
        p.className = "error-message";
        p.id = "error" + elem.name;
        p.appendChild(message);
        document.getElementById("form-messages").appendChild(p);
       //document.getElementById("form-messages").innerHTML = 'please complete ' + elem.name + ' field';
       elem.value = "";
       // this line isn't working
       //elem.focus();
       
       return false;
        
  } else {
  
  // clear any error messages
  // document.getElementById("form-messages").innerHTML = '';
  var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
          
        //formErrors = true;   
          return true;
       
        }
        
       
  
  }
  

} // closing function


function checkEmail(elem) {

  
  // keeping it simple, making sure there are chars before @ and between $ and . 
  //var reg = new RegExp("^[-/0-9a-zA-Z]+@[-0-9a-zA-Z]+[\.][-0-9a-zA-Z]+");
  var reg = new RegExp("^[-/0-9a-zA-Z]+@[-0-9a-zA-Z]+[\.][-0-9a-zA-Z]+");
  if (reg.test(elem.value) == false) {
  
        // if error message already posted for this field, remove it...
        var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
       
        }
  
  
        var message = document.createTextNode("please correctly complete " + elem.name + " field");
        var p = document.createElement("p");
        p.className = "error-message";
        p.id = "error" + elem.name;
        p.appendChild(message);
        document.getElementById("form-messages").appendChild(p);
        
       // reset field value
       elem.value = "";
       // this line isn't working
       //elem.focus();
       
       return false;
        
  } else {
  
        // clear any error messages
        // document.getElementById("form-messages").innerHTML = '';
        var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
          
       // formErrors = true;  
          return true;
       
        }
        
        
  }
  

} // closing function




function checkPhone(elem) {

  
  // keeping it simple, making sure there are only digits 
  var reg = new RegExp("^[0-9]+$");
  if (reg.test(elem.value) == false) {
  
        // if error message already posted for this field, remove it...
        var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
       
        }
  
  
        var message = document.createTextNode("please complete " + elem.name + " field");
        var p = document.createElement("p");
        p.className = "error-message";
        p.id = "error" + elem.name;
        p.appendChild(message);
        document.getElementById("form-messages").appendChild(p);
        
       // reset field value
       elem.value = "";
       // this line isn't working
       //elem.focus();
       
       return false;
        
  } else {
  
        // clear any error messages
        // document.getElementById("form-messages").innerHTML = '';
        var old = "error" + elem.name;
        if (document.getElementById(old)) {
          
          var oldElem = document.getElementById(old);
          var parent = document.getElementById(old).parentNode;
          parent.removeChild(oldElem);
          
       // formErrors = true;  
          return true;
       
        }
        
        
  }
  

} // closing function













// due to IE not using W3C AddEventListener, we need to use window event object
function checkForm(form) {

    var errors = new Array();


    var elems = form.elements;
  
   // loop through each element
    for (var x = 0; x < elems.length; x++) {
        // if reqd, then call checkField
        if (elems[x].className == "reqd") {
            // if function returns false, then skip further checking and return false
            if (checkField(elems[x]) == false) {
            
                //return false;
                //formErrors = false;
                errors[x] = true;
            
            } // closing if
        
        } // closing if reqd
        
         if (elems[x].className == "phone") {
            // if function returns false, then skip further checking and return false
            if (checkPhone(elems[x]) == false) {
            
                //return false;
                //formErrors = false;
                errors[x] = true;
            
            } // closing if
        
        } // closing if reqd
        
         if (elems[x].className == "email") {
            // if function returns false, then skip further checking and return false
            if (checkEmail(elems[x]) == false) {
            
                //formErrors = false;
                errors[x] = true;
                //return false;
            
            } // closing if
        
        } // closing if email
    
    
    } // closing loop
    
    if (errors.length > 0) {
    
        return false;
    
    } else {
      
      // everything is okay, so let's submit the form
      
      // problems with Firefox not submitting on true, so explicitly calling
      form.submit();
      
      
         }

} // closing function

function addEvent(elem, evtType, func, captureEvt) {

  if (elem.addEventListener) {
    elem.addEventListener(evtType, func, captureEvt);
  } else if (elem.attachEvent) {
    elem.attachEvent("on" + evtType, func);
  } else {
    elem["on" + evtType] = func;
  }
} // closing function


function addOnsubmit(form) {

  // grab form object, we need this to pass a reference following onsubmit
  var thisForm = form;

  if (form.addEventListener) {

    form = addEventListener('submit', function(e) { e.preventDefault(true); return checkForm(thisForm); }, false); 

  } else if (form.attachEvent) {
  
    form.attachEvent("onsubmit", function() { return checkForm(thisForm); });
  
  } 

} // closing function 


/*************** calendar code *******************/



//window.onload = initCalendar;

//var calendarXhr;

function initCalendar() {

  if (document.getElementById("calendar-table")) {
  
      var events = document.getElementById("calendar-table").getElementsByTagName("a");
      
      // loop through any calendar anchor tags - ie ones that have an event...
      for (var x=0;x<events.length;x++) {
        
        addEvent(events[x],"mouseover",getEvent,true);
     
      }
  
  
  }
  
}  // closing function

  function getEvent(evt) {
  
   // if evt is false - ie browser, we use window.event.  If this returns something, we use it
  evt = (evt) ? evt : ((window.event) ? window.event : null);
  

  if (evt) {
      // here, we pass the correct object, so we don't need to double up on code
      var event = (evt.target) ? evt.target : evt.srcElement;
      
      var url = event.href;
      
      }
  
  
      if (window.XMLHttpRequest) {
    
        calendarXhr = new XMLHttpRequest();
      
       } else {
       
       if (window.ActiveXObject) {
       
        try {
        
          calendarXhr = new ActiveXObject("Microsoft.XMLHTTP");
        
        
        } catch (e) {}
       
       }
      
       }
    
        
      if (calendarXhr) {
      
          url = url + '/ajax-request/1/uid/' + Math.random();
          calendarXhr.onreadystatechange = displayEvent;
          calendarXhr.open("GET",url, true);
          calendarXhr.send(null);
            
          } else {
            
            
          alert("Oops! We couldn't create an XMLHttpRequest object!");
            
            
          }
      
 // }
 

}

function displayEvent() {

     if (calendarXhr.readyState == 4) {
  
      if (calendarXhr.status == 200) {
      
      // need to iterate over xml document and populate array with info....
      var xmlEvents = calendarXhr.responseXML;
      var html = '';
      
      
      for (var x=0; x < xmlEvents.getElementsByTagName("event").length; x++) {
          
         html += xmlEvents.getElementsByTagName("event")[x].childNodes[0].nodeValue;
          
          
      }
          
      if (document.getElementById("news")) {
        
        document.getElementById("news").innerHTML = html;
        
        }
      }
  }
}