
window.onload = function(){
   Valid.init();
   ContacForm.init();
}

var Valid = {
   fields:{},
   init:function(){
      if($('cForm')){
         this.container = $('cForm');
         this.form = $('contacForm');
       	this.fields.FirstName	= $("txtFirstName");
         this.fields.Surname		= $("txtSurname");
         this.fields.Email		= $("txtEmail");
         this.fields.Telephone	= $("txtTelephone");
         this.fields.LocationID	= $("ddlLocation");
         this.fields.GenderID	= $("ddlGender");
         var group		= $("ddlGroupSize");
         this.fields.GroupSize	= group.options[group.selectedIndex];
         this.fields.EventDate	= $("txtEventDate");
         this.fields.Itinerary	= $("txtItinerary");
         this.error = {
            FirstName:'* Please Enter Your First name',
            Surname:'* Please Enter Your Surname',
            Email:'* Please Enter Your Email Address',
            EmailCorect:'* Please Enter a Valid Email Address',
            Telephone:'* Please Enter Your Telephone',
            LocationID:'* Please Tell Us Where You Would Like To Go',
            GenderID:'',
//            Group:'',
            GroupSize:'',
            EventDate:'* Please Tell Us When You Would Like To Go\n'
//            Itinerary:''
         };
         this.clean();
         this.setupCal();
      }
   },
   setupCal:function(){
      Calendar.setup({
         inputField     :    "txtEventDate",			// id of the input field
         ifFormat       :    "%d/%m/%Y",			// format of the input field
         button         :    "imgCalendar",		// trigger for the calendar (button ID)
         align          :    "Tl",				// alignment (defaults to "Bl")
         singleClick    :    true
      });
      Calendar.setup({
         inputField     :    "txtEventDate",			// id of the input field
         ifFormat       :    "%d/%m/%Y",			// format of the input field
         button         :    "txtEventDate",		// trigger for the calendar (button ID)
         align          :    "Tl",				// alignment (defaults to "Bl")
         singleClick    :    true
      });	
   },
   clean:function(){
      var sp = this.container.getElementsByTagName('span');
      for(var i = sp.length-1;i>=0 ;--i){
         if(sp[i] && sp[i].className == 'redstar'){
            sp[i].parentNode.removeChild(sp[i]);
         }
      }
   },
   check:function(){
      this.clean();
      var f,msg ='';
      for(var i in this.fields){
         f = this.fields[i];

         if(this.error[i] && (f.value == '' || f.value == -1)){
            msg+= this.error[i] + '\n'
            this.select(f);
            continue;
         }
         if(i == 'Email'){
            var email=/^[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*@[A-Za-z0-9]+([_\.-][A-Za-z0-9]+)*\.([A-Za-z]){2,4}$/i;
            if(!email.test(f.value)){
               msg+= this.error['EmailCorect'] + '\n'
               this.select(f);
            }
         }
      }
      if(msg != ''){
         alert(msg);
         return false;
      }

      this.form.action = 'http://www.lastnightoffreedom.co.uk/forms/PostEnquiry.aspx?AffiliateID=121';
      //this.form.action = 'http://www.lastnightoffreedom.co.uk';
      var a = new Ajax();
      a.url = 'module-Contact-action-Save.html';
      var temp = {};
      for(var i in this.fields){
         temp[i] = this.fields[i].value;
      }
      a.setParam(temp);
      a.open();
      
      this.form.submit();
      return true;
   },
   select:function(field){
      var s = document.createElement('SPAN');
      s.innerHTML = '*';
      s.className = 'redstar';
      field.parentNode.appendChild(s);
   }
}

var ContacForm = {
   imgClose:'img/banerContact.jpg',
   imgOpen:'img/contact/button.gif',
   init:function(){
      if($('cForm')){
         //wczytujemy nie co wczesniej
         var img = new Image()
         img.src = this.imgOpen;

         this.cForm = $('cForm');
         this.panels = [];
         this.actual = -1;

         var finds = getChildren(document.body,'className','contactHandler');
         var cont;
         for(var i = 0;i < finds.length;++i){
            cont = finds[i];
            img = this.createHand(i);
            cont.appendChild(img);
            this.panels[i] = {};
            this.panels[i].cont = cont;
            this.panels[i].hand = img;
         }
      }
   },
   open:function(i){
      if(this.actual == i){
         this.cForm.style.display = 'none';
         this.panels[this.actual].hand.src = this.imgClose;
         this.actual = -1;
      }else{
         if(this.actual != -1){
            this.panels[this.actual].hand.src = this.imgClose;
         }
         this.cForm.style.display = 'block';
         this.panels[i].hand.src = this.imgOpen;
         this.panels[i].cont.appendChild(this.cForm);
         this.actual = i;
      }
   },
   createHand:function(i){
      var img = document.createElement('IMG');
      img.src= this.imgClose;
      img.className = 'cursorHand';
      addEvent(img,'click',this.open.bind(this,i));
      return img;
   }
}

function Ajax(){
   this.method = 'POST';
   this.url = null;
   this.async = false;
   this.headers = null;
   this._params = [];
   

   this.create = function(){
      if (typeof XMLHttpRequest != 'undefined'){
         return new XMLHttpRequest();
      } else {
         var version = [ 'MSXML2.XMLHttp.6.0', 'MSXML2.XMLHttp.5.0', 'MSXML2.XMLHttp.4.0', 'MSXML2.XMLHttp.3.0', 'MSXML2.XMLHttp', 'Microsoft.XMLHttp' ];
         for(var i = 0; i<version.length;i++){
            try{
               var oXHttp = new ActiveXObject(version[i]);
               return oXHttp;
            }catch(oError){
            }
         }
      }
      this.event('Fatal');
      return null;
   };

   this.init = function(){

      if(this._connect != null)
         this.destroy();

      this._connect = this.create();
      if(this._connect == null)
         return false;
      this._semaphore = [false,false,false,false,false];
      var _this = this; 
      this._connect.onreadystatechange = function(){
			var state = _this._connect.readyState;
			// TODO _this.event('ReadyStateChange', state);
         if(!_this._semaphore[state])
            _this.handlerRedyState(state);
      };
      return true;
   };
   this.handlerRedyState = function(){
       
   };
   this.destroy = function(){
      try {
         delete this._connect['onreadystatechange'];
      } catch(e) {}
      this._connect = null;
   };
   this.open = function(){
      if(!this.init())
         return false;
      var ap = new Array();
      for(var i in this._params){
         var sp = encodeURIComponent(i) +'='+ encodeURIComponent(this._params[i]);
         ap.push(sp);
      }
      var query = ap.join('&');
      try {
         this._connect.open(this.method, this.url, this.async);
      } catch(e) {
         return false;
      }
      for (var i in this.headers)
         this._connect.setRequestHeader(encodeURIComponent(i), encodeURIComponent(this.headers[i]));

      if (this.method == 'POST') {
            try {
                this._connect.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            } catch(e) {}
            this._connect.send(query);

        } else if (this.method == 'GET') {
            this._connect.send('');
        }
   };
   this.setParam = function(args){
      for(var i in args){
            if(i == 'headers'){
                for (var j in args[i])
                  this.headers[j] = args[i][j];
            }else{
               this._params[i] = args[i];
         }
      }
   };
}


