if (typeof PurpleParking == "undefined") {
    PurpleParking = {};
}




/* Object Declaration
 */
PurpleParking.objects = {
    
    CarPark: function(xmldata){
  
        this.cpid = "";
        
        this.servicecode = "";
        this.servicename = "";
        //this.extras = null;
        
        /* Load from the xml thing */
        var carparkXml = xmldata.firstChild;
        if(carparkXml.nodeName!="carpark")
        {
            return;
        }
        
        /* step through the child nodes */
        var currentNode;
        for(var i=0; i < carparkXml.childNodes.length; i++)
        {
            currentNode = carparkXml.childNodes[i];
            if(currentNode.nodeName=="servicename")
            {
                this.servicename = currentNode.firstChild.data;
            } else if(currentNode.nodeName=="servicecode")
            {
                this.servicecode = currentNode.firstChild.data;
            } else if(currentNode.nodeName=="airport")
            {
                this.airport = new PurpleParking.objects.Airport(currentNode);
            } else if(currentNode.nodeName=="extras")
            {
                var elExtras = currentNode.getElementsByTagName("extra");
                this.extras = new Array(elExtras.length);
                for(var r=0; r < elExtras.length; r++)
                {
                    this.extras[r] = new PurpleParking.objects.Extra(elExtras[r]);
                }       
            }
            
        }
        
        
        

    
    },

    
    
    Airport: function(xmldata){
        this.terminals = null;
        
        /* get terminals */
        var elTerminals = xmldata.getElementsByTagName("terminals");
        var elTerminal = elTerminals[0].getElementsByTagName("terminal");
        this.terminals = new Array(elTerminal.length);
        for(var r=0; r < elTerminal.length; r++)
        {
            var terminal = elTerminal[r];
            this.terminals[r] = terminal.firstChild.data;
            //alert(terminal.firstChild.data);
        }
    
    },
    
    Extra: function(xmldata){
        this.id = "";
        
        if(xmldata.nodeName!="extra")
        {
            alert("extra is not an " + xmldata.nodeName);
            return;
        }
        this.id = xmldata.getAttribute("id");
      
    }
    
};



PurpleParking.events = {
    addDOMLoadEvent: function(func) {
        if (!window.__load_events) {
          var init = function () {
              // quit if this function has already been called
              if (arguments.callee.done) return;

              // flag this function so we don't do the same thing twice
              arguments.callee.done = true;

              // kill the timer
              if (window.__load_timer) {
                  clearInterval(window.__load_timer);
                  window.__load_timer = null;
              }

              // execute each function in the stack in the order they were added
              for (var i=0;i < window.__load_events.length;i++) {
                  window.__load_events[i]();
              }
              window.__load_events = null;

              // clean up the __ie_onload event
              /*@cc_on @*/
              /*@if (@_win32)
                  document.getElementById("__ie_onload").onreadystatechange = "";
              /*@end @*/
          };

          // for Mozilla/Opera9
          if (document.addEventListener) {
              document.addEventListener("DOMContentLoaded", init, false);
          }

          // for Internet Explorer
          /*@cc_on @*/
          /*@if (@_win32)
              document.write("<scr"+"ipt id=__ie_onload defer src='//:'><\/scr"+"ipt>");
              var script = document.getElementById("__ie_onload");
              script.onreadystatechange = function() {
                  if (this.readyState == "complete") {
                      init(); // call the onload handler
                  }
              };
          /*@end @*/

          // for Safari
          if (/WebKit/i.test(navigator.userAgent)) { // sniff
              window.__load_timer = setInterval(function() {
                  if (/loaded|complete/.test(document.readyState)) {
                      init(); // call the onload handler
                  }
              }, 10);
          }

          // for other browsers
          window.onload = init;

          // create event function stack
          window.__load_events = [];
        }

        // add function to event stack
        window.__load_events.push(func);
    },

    addEvent: function(obj, evType, fn){ 
        if (obj.addEventListener){ 
            obj.addEventListener(evType, fn, false); 
            return true; 
        } else if (obj.attachEvent){ 
            var r = obj.attachEvent("on"+evType, fn); 
            return r; 
        } else { 
            return false; 
        } 
    },

    // Returns the event's source element 
    getSourceElement: function(e) {	
	if(!e) e = window.event;	
	if(e.target)
            var srcE = e.target;
	else
            var srcE = e.srcElement;
	if(!srcE) return null;
	if(srcE.nodeType == 3) srcE = srcE.parentNode; // safari weirdness		
	if(srcE.tagName.toUpperCase()=='LABEL' && e.type=='click') { 
            // when clicking a label, firefox fires the input onclick event
            // but the label remains the source of the event. In Opera and IE 
            // the source of the event is the input element. Which is the 
            // expected behavior, I suppose.		
            if(srcE.getAttribute('for')) {
                srcE = document.getElementById(srcE.getAttribute('for'));
            }
	}
	return srcE;
    }
}



// util.js
/**
 * @author spollard
 */

PurpleParking.util = {
    removeSpaces: function(startstring) {
        while (startstring.indexOf(" ") > -1) {
            startstring = startstring.replace(" ", "");
        }
        return startstring;
    },

    bookmark: function() {
        if( window.sidebar && window.sidebar.addPanel ) {
            //Gecko (Netscape 6 etc.) - add to Sidebar
            window.sidebar.addPanel( this.title, this.href, '' );
        } else if( window.external && ( navigator.platform == 'Win32' ||
              ( window.ScriptEngine && ScriptEngine().indexOf('InScript') + 1 ) ) ) {
            //IE Win32 or iCab - checking for AddFavorite produces errors for no
            //good reason, so I use a platform and browser detect.
            //adds the current page page as a favourite; if this is unwanted,
            //simply write the desired page in here instead of 'location.href'
            window.external.AddFavorite( location.href, document.title );
        } else if( window.opera && window.print ) {
            //Opera 6+ - add as sidebar panel to Hotlist
            return true;
        } 
        return false;
    },


    // getTop / getLeft  
    // Returns pixel coordinates from the top-left window corner.
    getTop: function(obj) {
	var cur = 0;
	if(obj.offsetParent) {		
            while(obj.offsetParent) {
                    if(PurpleParking.util.getComputedStyle(obj,'position') == 'relative' ) {
                        // relatively postioned element
                        return cur;
                    }
                    cur+=obj.offsetTop;
                    obj = obj.offsetParent;
            }
	}
	return cur;
    },

    getLeft: function(obj) {
	var cur = 0;
	if(obj.offsetParent) {		
            while(obj.offsetParent) {
                if(PurpleParking.util.getComputedStyle(obj,'position') == 'relative' ) {
                    // relatively postioned element
                    return cur;
                }
                cur+=obj.offsetLeft;
                obj = obj.offsetParent;
            }
	}
	return cur;
    },

    getComputedStyle: function(element, styleName) {
	if(window.getComputedStyle) {
		return window.getComputedStyle(element,"").getPropertyValue(styleName);
	} else if(element.currentStyle) {	
		return element.currentStyle[styleName];
	}
	return false;
    }
    

};



function toggleElement(sElementName)
{
    var el = document.getElementById(sElementName);

    if(el.style.display=='block')
    {
        el.style.display = 'none';
    } else
    {
        el.style.display = 'block';
    }
}


function setField(sFieldName, sFieldValue)
{
    var field = document.getElementById(sFieldName);
    field.value = sFieldValue;
}



// fuse.js

/**
 * @author bpowell
 * @copyright 2007 Spook Media Ltd
 */


function setFuseAction(sAction, eTrigger)
{
    var fuseAction = eTrigger.form.elements['fuse.action'];
    if(fuseAction==null)
    { 
        alert("Fuse Action is not on this form.");
    } else
    {
        fuseAction.value = sAction;
    }
}



function setFuseActionData(sActionData, eTrigger)
{
    var fuseActionData = eTrigger.form.elements['fuse.actiondata'];
    if(fuseActionData==null)
    { 
        alert("Fuse Action Data is not on this form.");
    } else
    {
        fuseActionData.value = sAction;
    }
}


function setFuseSubaction(sSubaction)
{
    var fuseSubaction = document.getElementById('fuse.subaction');
    if(fuseSubaction==null)
    { 
        alert("fuse subaction is not on this page.");
    } else
    {
        fuseSubaction.value = sSubaction;
    }
}





// add flash.js

PurpleParking.flash = {

    inserthomepageflash: function() {
        if (!$("airportflash")) return;
        var so = new SWFObject("/flash/map.swf", "flashmovie", "310", "450", "7");
        so.addParam("FlashVars", "");
        so.addParam("Src", "/flash/map.swf");
        so.addParam("Play", "true");
        so.addParam("Loop", "true");
        so.addParam("Quality", "High");
        so.addParam("SAlign", "");
        so.addParam("Menu", "0");
        so.addParam("Base", "");
        so.addParam("AllowScriptAccess", "always");
        so.addParam("Scale", "ShowAll");
        so.addParam("DeviceFont", "0");
        so.addParam("EmbedMovie", "0");
        so.addParam("wmode", "transparent");
        so.write("airportflash");
    },

    insertdetailsflash: function() {
        if (!$("detailsflash")) return;
        var name = customerName;
        var so = new SWFObject("/flash/carspace.swf?nameVar=" + name, "flashmovie", "400", "300", "7");
        so.addParam("FlashVars", "");
        so.addParam("Src", "/flash/carspace.swf?nameVar=" + name);
        so.addParam("Play", "true");
        so.addParam("Loop", "true");
        so.addParam("Quality", "High");
        so.addParam("SAlign", "");
        so.addParam("Menu", "0");
        so.addParam("Base", "");
        so.addParam("AllowScriptAccess", "always");
        so.addParam("Scale", "ShowAll");
        so.addParam("DeviceFont", "0");
        so.addParam("EmbedMovie", "0");
        so.addParam("wmode", "transparent");
        so.write("detailsflash");
    },

    init: function() {
            PurpleParking.flash.inserthomepageflash();
            PurpleParking.flash.insertdetailsflash();
    }
}

PurpleParking.events.addDOMLoadEvent(PurpleParking.flash.init);






var W3CDOM = (document.createElement && document.getElementsByTagName);



PurpleParking.forms = {
    updatename: function() {
        var surname = $F('surname');
        surname = surname.substr(0,1).toUpperCase() + surname.slice(1);
        var title = $F('utitle');
        
        if (surname == "")
        {
            $('customername').innerHTML = "Your";
        }
        else
        {
            if (surname.lastIndexOf("s") == surname.length - 1)
            {
                $('customername').innerHTML = title + " " + surname + "'";
            }
            else
            {
                $('customername').innerHTML = title + " " + surname + "'s";
            }
        }
    },

    init: function() {
        if ($('page-book-details'))
        {
            PurpleParking.events.addEvent($('surname'), "blur", PurpleParking.forms.updatename)
            PurpleParking.events.addEvent($('utitle'), "change", PurpleParking.forms.updatename)
        }
    },

    lookupAddress: function() {
        var postcode = $F('postcode');
        if (postcode == "")
        {
            alert("You must enter a postcode first.");
        }
        else
        {
            // lookup address and add to boxes
            $('addressblock').style.display = "block";
            $('addressblock-error').style.display = "block";
        }
    }
}

PurpleParking.events.addDOMLoadEvent(PurpleParking.forms.init);

PurpleParking.CONSTS = {};

PurpleParking.CONSTS.idSuffix_fieldHint           = "-H";                     // a hint id is the associated field id (or name) plus this suffix
PurpleParking.CONSTS.className_inactiveFieldHint  = "field-hint-inactive";    // visual effect depends on CSS stylesheet
PurpleParking.CONSTS.className_activeFieldHint    = "field-hint";             // visual effect depends on CSS stylesheet

PurpleParking.forms.behaviors = {};

PurpleParking.forms.behaviors.hint = {
    // evaluate: check if the behavior applies to the given node. Adds event handlers if appropriate
    evaluate: function(node) {
        if(node.id) {
            if(node.id.indexOf(PurpleParking.CONSTS.idSuffix_fieldHint)>0) {               	   
                // this looks like a field-hint. See if we have a matching field.               	    
                // try first with the id, then with the name attribute.
                var id     = node.id.replace(PurpleParking.CONSTS.idSuffix_fieldHint, '');               	     
                var hinted = document.getElementById(id) || wFORMS.processedForm[id];
            } 
            if(hinted) {
                var hintedGroup = new Array(hinted);
                l = 1;
            }

            for(var i=0;i<l;i++) {
                hinted = hintedGroup[i];

                switch(hinted.tagName.toUpperCase()) {
                    case 'SELECT': 
                    case 'TEXTAREA':						   
                    case 'INPUT':
                        PurpleParking.events.addEvent(hinted,'focus',PurpleParking.forms.behaviors.hint.run);
                        PurpleParking.events.addEvent(hinted,'blur' ,PurpleParking.forms.behaviors.hint.remove);
                        break;
                    default:
                        PurpleParking.events.addEvent(hinted,'mouseover',PurpleParking.forms.behaviors.hint.run);
                        PurpleParking.events.addEvent(hinted,'mouseout' ,PurpleParking.forms.behaviors.hint.remove);
                        break;
                }
						   
            }
        } 
    },

    // run: executed when the behavior is activated
    run: function(e) {
        var element   = PurpleParking.events.getSourceElement(e);
        var fieldHint = $(element.id  + PurpleParking.CONSTS.idSuffix_fieldHint);
        if(!fieldHint) // try again with the element's name attribute
            fieldHint = $(element.name + PurpleParking.CONSTS.idSuffix_fieldHint);
        if(fieldHint) {
            Element.addClassName(fieldHint, PurpleParking.CONSTS.className_activeFieldHint);
            Element.removeClassName(fieldHint, PurpleParking.CONSTS.className_inactiveFieldHint);

            // Field Hint Absolute Positioning
            fieldHint.style.top  =  (PurpleParking.util.getTop(element)).toString() + "px";
            if(element.tagName.toUpperCase() == 'SELECT') 
                fieldHint.style.left =  (PurpleParking.util.getLeft(element) + (element.offsetWidth - 8)).toString() + "px";
            else 
                fieldHint.style.left =  (PurpleParking.util.getLeft(element) + (element.offsetWidth - 8)).toString() + "px"; /* + element.offsetWidth */
        }
    },
		   
    // remove: executed if the behavior should not be applied anymore
    remove: function(e) {
        var element = PurpleParking.events.getSourceElement(e);
        var fieldHint = document.getElementById(element.id   + PurpleParking.CONSTS.idSuffix_fieldHint);
        if(!fieldHint) // try again with the element's name attribute
            fieldHint = document.getElementById(element.name + PurpleParking.CONSTS.idSuffix_fieldHint);
        if(fieldHint) {
            Element.addClassName(fieldHint, PurpleParking.CONSTS.className_inactiveFieldHint);
            Element.removeClassName(fieldHint, PurpleParking.CONSTS.className_activeFieldHint);
        }
    }
}

PurpleParking.forms.behaviors.init = function() {
    if ($('telephone-H'))
    {
        PurpleParking.forms.behaviors.hint.evaluate($('telephone-H'));
    }
    if ($('cvc-H'))
    {
        PurpleParking.forms.behaviors.hint.evaluate($('cvc-H'));
    }
}

PurpleParking.events.addDOMLoadEvent(PurpleParking.forms.behaviors.init);