// global variables needed for ajax-forms
var oSuccess = 'responseSuccess';
var oFailed = 'responseFailed';
var oSource = 'responseSource';
var oCookie = 'responseCookie';


IG.util.Browser = function() {
	return this.init();
};

IG.util.Browser.prototype = {
	ua: navigator.userAgent,
	win: (navigator.platform == "Win32") ? true : false,
	mac: (navigator.platform == "MacPPC") ? true : false, 
	ver: navigator.appVersion, 
	dom: document.getElementById ? true : false, 
	ff: false,
	op: (typeof window.opera != "undefined"), 
	op9up: false, 
	safari: false, 
	ie5: false,
	ie6: false,
	ie7: false,
	ie: false,
	ie5up: false,
	ns4: (document.layers) ? true : false, 
	ns6: false, 
	ns7: false, 
	ns: false,
	ns6up: false,
	supported: false,
	init: function() {
		this.ie5 = (this.ver.contains("MSIE 5") && this.dom);
		this.ie6 = (this.ver.contains("MSIE 6") && this.dom);
		this.ie7 = (this.ver.contains("MSIE 7") && this.dom);
		this.ie = (this.ie5 || this.ie6 || this.ie7);
		this.ie5up = this.ie;
		this.ff = (this.ua.contains("Firefox") && this.dom);
		this.safari = (this.ua.contains("Safari") && this.dom);
		this.ns6 = (this.dom && parseInt(this.ver,10) == 5 && !this.ie);
		this.ns7 = this.ua.contains('Netscape/7');
		this.ns = (this.ns4 || this.ns6 || this.ns7);
		this.ns6up = (this.ns6 || this.ns7);
		this.op9up = (this.op && parseInt(this.ver,10) >= 9);
		this.supported = (this.ie5up || this.ns6up || this.ff || this.op9up || this.safari);
		if(this.mac) {
			var script, elHead, type;
			type   = 'text/css';
			elHead = d.getElementsByTagName('head')[0];
			script = d.createElement('style');
			script.type = type;
			script.innerHTML =  '@import url(/css/mac.css);';
			elHead.appendChild(script);  
		//	d.write('<style type="text/css">@import url(/css/mac.css);</style>');
		}
		return this;

	}
};

/******* AJAX OBJECT *******/
/* Purpose: creates and sends JS And XML object (AJAX/XMLHTTP) request
 * Usage: [variable] = AJAX([String], [Function]);
 * Arguments: url string, function to call with rendered HTML
 * Returns: window-level XMLHTTP object
 */
IG.util.AJAX = {
	rand:	function(){
		var rand =  "ajax_"+Math.round(Math.random()*5000)
		while(typeof window[rand] != "undefined") {
			rand = "ajax_"+Math.round(Math.random()*5000);
		}
		return rand;
	},
	
	ajaxObj: function(){
		if(IG.util.Browser.ie) {
			try {
				return new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					return new ActiveXObject("Microsoft.XMLHTTP");
				} catch(E) {
					return false;
				}
			}
		} else if(typeof XMLHttpRequest != "undefined") {
			 return new XMLHttpRequest();
		}
	},
	
	init: function(url, fn) {
		var rand = this.rand;
		window[rand] = this.ajaxObj();
		if(window[rand]) {
			window[rand].open("GET", url, true);
			window[rand].onreadystatechange = function() {
				if(window[rand].readyState == 4 && window[rand].status == 200) { 
					fn(window[rand].responseText);
				} else if(window[rand].readyState == 4 && window[rand].status == 404) { 
					fn("AJAX Error "+window[rand].status+": Page not found"); 
				} else if(window[rand].readyState == 4 && parseInt(window[rand].status) == 5) {
					fn("AJAX error "+window[rand].status+": Internal server error");
				}
			};
			window[rand].send(null);
			
			return window[rand];
		} else {
			return null;
		}
	}
}
/******* END AJAX OBJECT *******/



/******* COOKIES *******/
IG.util.Cookie = {
	
	set: function (n, v, dy) { 
		var s = "";
		if(dy) {
				var dt = new Date();
				dt.setTime(dt.getTime() +(dy*24*60*60*1000));
				s = "; expires="+dt.toGMTString();
		}
		d.cookie = n+"="+v+s+"; path=/";
	},

	get: function (n) {
		var nEQ = n+"=";
		var aC = d.cookie.split(';');
		for(var i=0;i < aC.length;i++) {
			var c = aC[i];
			while(c.charAt(0)==' ') {c = c.substring(1,c.length);}
			if(c.indexOf(nEQ)===0) {return c.substring(nEQ.length,c.length);}
		}
		return null;
	},

	eat: function (n) {
		this.set(n,"",-1);
	},
	
	set_href: function(){
		var sQPID = this.get('qpid');
		if(sQPID){
			var q = sQPID.split(',');
			var query = '?qpid='+ q[0] +'&qppid='+ q[1];
			var url = gE('demoLink');
			if(url){
				url.href = url.href + query;
			}
		}
	},
	agreeTerms: function(){
		IG.util.Cookie.set("agreeTerms", "1", 180);
		document.location.replace(gE("aAgree").getAttribute("href"));
		return false;
	},
	
	init: function(){
		if (gE('setCookie')){
			IG.util.Cookie.set_href();
		}
		if (gE('saveSettings')){
			gE('saveSettings').onclick = function(){
				if (gE("flash-hp-on").checked){
					IG.util.Cookie.eat("hideFlash");
				} else {
					IG.util.Cookie.set("hideFlash", true, 365);
				}
				alert("Setting saved.");
			};
		}
		if (this.get("hideFlash") && gE("flash-hp-off")){
			gE("flash-hp-off").checked = true;
		}
		if (gE('fn_agreeTerms') && !IG.util.Cookie.get("agreeTerms") && window.location.hash != "#agree"){
			IG.util.Site.goTo(gE('fn_agreeTerms').getAttribute('url'));
		} else if (IG.util.Cookie.get("agreeTerms") && gE("aAgree")) {
			IG.util.Cookie.agreeTerms();
		} else if (gE("aAgree")) {
			gE("agreeTerms").onclick = function(){
				IG.util.Cookie.agreeTerms();
			};
			gE("checkboxAgree").onclick = function(){
				IG.util.Cookie.agreeTerms();
			};
			gE("checkboxDisagree").onclick = function(){
				IG.util.Site.goTo(gE('aDisagree').getAttribute('href'));
			};
		}
	}
};


/* Purpose: Hard reload top frame to root if no iconStateSetting cookie found
 * Usage: confirmContext();
 * Arguments: None
 * Returns: None
 */
if (gE('confirmContext') && !IG.util.Cookie.get("iconStateSetting")) {
	top.location.replace("/");
}


IG.util.recordQPID = {
	init: function(){
		// Affiliate redirection
		var qpid = getQS("qpid");
		var qppid = getQS("qppid");
		if(qpid != "") {
			var lM = gT('meta');
			for(var i=0; i<lM.length; i++){
				if(lM[i].getAttribute('id')=='softid'){
					var sWebSiteId = lM[i].getAttribute('content');
				} else if(lM[i].getAttribute('id')=='locale'){
					var sLocale = lM[i].getAttribute('content');
				}
			}
			if(sWebSiteId && sLocale){
				var prospectsUrl = "/prospects4/controller?action=marketing_cache&nobh&qpid="+ qpid +"&qppid="+ qppid +"&processId=xtb&webSiteId="+ sWebSiteId +"&locale="+ sLocale +"&redirectUrl=" + location.pathname;
				IG.util.AJAX.init(prospectsUrl, function(str){var a=str;});
				IG.util.Cookie.set('qpid', qpid + ',' + qppid, 7);
			}
		}
	}
};

IG.util.recordQPID.init();








IG.util.Tour = {
   oTimer : null ,
   /* Purpose: set 'pause' values specific to that page
    * Usage: pause = Pause([String],[String]);
    * Arguments: bodyId string, fileName string
    * Returns: int
    */
      
   goForth: function(){
      var DOM = YAHOO.util.Dom;
      if (DOM.get("ctrlForward")) {
			d.location = DOM.get("ctrlForward").href;
		}
   },
   
   slide: function(b, p){
      var DOM = YAHOO.util.Dom;
      if(!b){
         clearTimeout(this.oTimer);
         DOM.addClass('ctrlPause','current');
         DOM.removeClass('ctrlPlay','current');
      }else{
         this.oTimer = setTimeout("IG.util.Tour.goForth()",p);
         DOM.addClass('ctrlPlay','current');
         DOM.removeClass('ctrlPause','current');
      }
   },
   toggleTlnNav: function (e){
      var currentClss = e.className;
      var DOM = YAHOO.util.Dom;
      var arrDLs = DOM.getElementsByClassName('tln');
      var l = arrDLs.length;
      for(var i = 0;i < l;i++){
         DOM.replaceClass(arrDLs[i],"open","closed");
      }
      if (currentClss!=="tln open"){
         DOM.replaceClass(e,"closed","open");
      }
   },

      
      
   init : function(){
      // enable Tour page to auto refresh at the end of the slide
      var elDemo = gE("demoNos");
		var elContent = gE("demoContent");
		if (elDemo || elContent){
         var elSlides = gT("li");
         var intSlideLength = elSlides.length;
         // dont slide if its the last page or if there are no pages
         if (elSlides[intSlideLength-1]){
            if (elSlides[intSlideLength-1].innerHTML.indexOf(IG.util.Site.Page)<0){
               var pause = IG.util.TourPause(IG.util.Site.Page);
               if(pause){
                  this.slide(true, pause);
               }
            }
         }
      }
      var elPause = gE("ctrlPause");
      if (elPause){
         elPause.onclick = function(){IG.util.Tour.slide(false);return false;};
      }
      var elPlay = gE("ctrlPlay");
      if (elPlay){
         elPlay.onclick = function(){IG.util.Tour.slide(true);return false;};
      }

      // enable 'pureDeal Overview menu
      var elDL = gT("dl");
      if (elDL){
         var elDLlength =elDL.length;
         for (var x=0; x<elDLlength; x++){
            var el = elDL[x];
            if ((/open/i.test(el.className)) || (/closed/i.test(el.className))){// || .substr(0,3) == "tln"
               var elDt = el.getElementsByTagName("dt");
               if(elDt.length>0){
                  elDt[0].onclick = function(){
                     IG.util.Tour.toggleTlnNav(this.parentNode);
                  };
               }
            }
         }
      }
   }
};



IG.util.PopUp = {
   /* Purpose: enables close-window links
    * Usage: init();
    * Arguments: na
    * Returns: na
    */
   menu:gE("btnMenu"),
	
 	openWindow: function(url, n, w, h, bResize, bScroll, bStatus, nSame) {
		var l = parseInt((screen.availWidth/2)-(w/2));
		var t = parseInt((screen.availHeight/2)-(h/2));
		n = n.replace(' ','_');
		if(!nSame){
			n += Math.floor(Math.random()*99);
		}
		var win = window.open(url, n, 'toolbar=0,location=0,menubar=0,directories=0,scrollbars='+bScroll+',status='+bStatus+',resizable='+bResize+',Width='+w+',Height='+h+',left='+l+',top='+t+',screenX='+l+',screenY='+t+'');
		if(win && !win.closed) {
			win.focus();
		}
		if(top.wins) {
			top.wins[top.wins.length] = win;
		}
		return win;
	},
	
   closeWindow: function(){  
      var elCloseWindow = gE("close-window");
      if (elCloseWindow){
         elCloseWindow.onclick = function(){ 
            window.close();
         };
      }
      if (this.menu && this.menu.innerHTML == 'Menu'){
         this.menu.onclick = function(){ 
            window.close();
         };
      }
   },
   
   backWindow: function(){
      var elCloseWindow = gE("back-window");
      if (elCloseWindow){
         elCloseWindow.onclick = function(){ 
            history.back();
         };
      }
      if (this.menu && this.menu.innerHTML == 'Back'){
         this.menu.onclick = function(){ 
            history.back();
         };
      }
   },
   
   init: function() {
		var el = null; var form = null; var xMin = 4;
		var demoLink = gE('demoLink');
		var launchOnlineForm = gE('launchOnlineForm');
		var requestInfoPack = gE('requestInfoPack');
		if (demoLink){
			el = 	demoLink;
			form = 'demo_form';
		}
		if (launchOnlineForm){
			el = 	launchOnlineForm;
			form = 'appform';
		}
		if (requestInfoPack){
			el = 	requestInfoPack;
			form = 'appform';
		}
		if (el !== null){
         el.onclick = function(){
				var href = this.getAttribute("href");
			   if (href.indexOf('/')!=0 && href.indexOf('http')!=0){// ensure there is a preceding slash
					href = '/' + href;
				}
				IG.util.OpenPopUp(this.href,form);
				return false;
			}
      }
		//Dynamically add new popups bassed on class name
		// MUST HAVE href and type as attirbutes on the A tag
		var arrPopUpLinks = gC('fn_popup','a');
		var arrLength = arrPopUpLinks.length;
		for (var x=0; x<arrLength; x++){
			arrPopUpLinks[x].onclick = function(){
				var type = (this.getAttribute('type'))?this.getAttribute('type'):'default';
				IG.util.OpenPopUp(this.href,type);
				return false;
			};
		}
		this.closeWindow();
      this.backWindow();
   }
};




IG.util.Tracker = {
	
   init: function(){
      // Function used in inc/ig_tracker_include.html
      var elTrackerInclude = gE("tracker-include");
  /*    if((/\/\/www\./.test(d.location.href)) && elTrackerInclude) {
         var script = d.createElement('script');
         script.type = 'text/javascript';
         script.src =  d.location.protocol + '//jdc.marketdatasystems.com/cgi-bin/ctasp-server.cgi?i=' + i + '&fp=1&p=' + d.location.protocol.replace(":","") + '&c='+escape(d.cookie);
         gT('head')[0].appendChild(script);  
      }
		if(/\/\/www\./.test(document.location.href) && elTrackerInclude) {
			var i = IG.util.TrackerCode(IG.util.Site.Locale);
			document.write('<s'
			+ 'cript language="javascript" src="'
			+ document.location.protocol
			+ '//jdc.marketdatasystems.com'
			+ '/cgi-bin/ctasp-server.cgi'
			+ '?i=' + i
			+ '&fp=1'
			+ '&p=' + document.location.protocol.replace(":","")
			+ '&c='+escape(document.cookie)
			+ '"></'
			+ 'script>');
		}
  */
	}
};



IG.util.InitForms = {
   
   msgEmail : function(strLocale){
      switch (strLocale){
      case 'en_gb' :
         return  'Please enter a valid e-mail address.';
      case 'de_de' :
         return  'Bitte geben Sie eine g\374ltige Email Adresse ein.';//&#252;
      case 'fr_fr' :
      case 'fr_lu' :
         return  'Veuillez saisir une adresse email valide.';
      case 'it_it' :
         return  'Inserire un indirizzo e-mail valido.';
      case 'ru_ru' :
         return IG.util.Site.convertCode('&#1055;&#1086;&#1078;&#1072;&#1083;&#1091;&#1081;&#1089;&#1090;&#1072;, &#1074;&#1074;&#1077;&#1076;&#1080;&#1090;&#1077; &#1074;&#1089;&#1077; &#1090;&#1088;&#1077;&#1073;&#1091;&#1077;&#1084;&#1099;&#1077; &#1076;&#1072;&#1085;&#1085;&#1099;&#1077;');
      case 'sv_se' :
         return 'Var god fyll i en giltig e-postadress.';
		default :
         return  'Please enter a valid e-mail address.';
      }
   },
   
   msgTerms : function(strLocale){
      switch (strLocale){
         case 'fr_fr' :
         case 'fr_lu' :
            return 'Veuillez accepter les conditions.';
         case 'en_gb' :
            return 'You have to agree the terms.';
         default :
            return 'You have to agree the terms.';
      }
   },
   
   msgCompleteAll : function(strLocale){
      switch (strLocale){
            case 'fr_fr' :
            case 'fr_lu' :
                return "Veuillez saisir l'ensemble des informations.";
            case 'en_gb' :
                return 'Sorry, please complete all details.';
			case 'zh_cn' :
				return IG.util.Site.convertCode('&#35831;&#22635;&#20889;&#25152;&#26377;&#26639;&#30446;');
			case 'zh_tw' :
				return IG.util.Site.convertCode('&#35531;&#22635;&#23531;&#25152;&#26377;&#27396;&#30446;');
         default :
            return 'Sorry, please complete all details.';
      }
   },
   
   of : '',
   
   oForm : function (frm){
      this.of = new oFormVal(frm);
   },

   contact_toggle : function(){
         var DOM = YAHOO.util.Dom;
         var e = DOM.get("trCallback");
         var v = DOM.get("callback_yes");
         var opt = DOM.get("cbOpt");
      
         if(v.checked){
            DOM.removeClass(e,"hidden");
            DOM.addClass(opt,"hidden");
         } else {
            DOM.addClass(e,"hidden");
            DOM.removeClass(opt,"hidden");
         }
   },
   
   contact_submit : function(){
      var DOM = YAHOO.util.Dom;
		if(DOM.get("callback_yes")){
	      if(DOM.get("callback_yes").checked){
	         if(!DOM.get("day").value && !DOM.get("time").value){
	            alert(this.msgCompleteAll(IG.util.Site.Locale));
	            DOM.get("day").focus();
	            return false;
	         }
	      }else{
	         this.of.notRequired('telephone');
	         this.of.notRequired('day');
	         this.of.notRequired('time');
	      }
		}
		if(document.contactForm){
			var s = (gE(document.contactForm.JSvalidateString))?s.value:this.msgCompleteAll(IG.util.Site.Locale);
		} else{s = document.contactForm}
        //above does not make sense to me - AJM - but this didn't end up being the bit I needed to fix...
        //var s = document.contactForm && document.contactForm.JSvalidateString ? document.contactForm.JSvalidateString.value : this.msgCompleteAll(IG.util.Site.Locale);        
		return this.of.validate(s);
   },
   
   contactUs: function(){
         this.of.addMail('from',this.msgEmail(IG.util.Site.Locale));
         this.of.notRequired('message');
         this.of.notRequired('callback');
         
         if (gE("callback_yes")){
            var _toggle = function(){
               IG.util.InitForms.contact_toggle();
            };
            gE("callback_no").parentNode.onclick = _toggle;
            gE("callback_yes").parentNode.onclick = _toggle;
         }

         IG.google.Maps.add_contactUs();
         
         gE("contactSubmit").onclick=function(){
            return IG.util.InitForms.contact_submit();
         };

   },
	   
   feedbackForm: function(){
         this.of.notRequired('from');
         this.of.notRequired('message');
         this.of.notRequired('callback');
         this.of.notRequired('account_number');
         
         if (gE("callback_yes")){
            var _toggle = function(){
               IG.util.InitForms.contact_toggle();
            };
            gE("callback_no").parentNode.onclick = _toggle;
            gE("callback_yes").parentNode.onclick = _toggle;
         }
         
         gE("contactSubmit").onclick=function(){
            return IG.util.InitForms.contact_submit();
         };

   },
   
   regional_toggleOpt : function(e,t){
      gE(t).value = (e.checked)?"":"1";
   },

   regional_toggleExisting : function(){
      var DOM = YAHOO.util.Dom;
      var existing = DOM.get("existing_yes");
      var arrExisting = DOM.getElementsByClassName('existing');
      var arrNotExisting = DOM.getElementsByClassName('not-existing');
      if(!existing.checked){
         for(i = 0;i < arrNotExisting.length;i++){
            DOM.removeClass(arrNotExisting[i],"hidden");
         }
         for(i = 0;i < arrExisting.length;i++){
            DOM.addClass(arrExisting[i],"hidden");
         }
      }else{
         for(i = 0;i < arrExisting.length;i++){
            DOM.removeClass(arrExisting[i],"hidden");
         }
         for(i = 0;i < arrNotExisting.length;i++){
            DOM.addClass(arrNotExisting[i],"hidden");
         }
      }
   },
   
   regional_submit : function(){
      if(DOM.get("existing_yes").checked){
         this.of.notRequired('street');
         this.of.notRequired('city');
         this.of.notRequired('state');
         this.of.notRequired('zip');
         this.of.notRequired('country');
      }else{
         this.of.notRequired('00N20000001Jezl');
      }
		returnDealer();
		//set qpid
		var sQPID = gC('qpid');
		var fQPID = gE('QPID__c');
		if(sQPID && fQPID){
			fQPID.value = sQPID.split(',')[0];
		}
      return this.of.validate();
   },

   regionalSeminars: function(){
      this.of.addMail('email',this.msgEmail(IG.util.Site.Locale));
      this.of.notRequired('existing');
      this.of.notRequired('optIn');
      this.of.notRequired('emailOptOut');
      
      gE("semReg").onsubmit=function(){
         return IG.util.InitForms.regional_submit();
      };
      gE("existing_no").onclick=function(){
         IG.util.InitForms.regional_toggleExisting();
      };
      gE("existing_yes").onclick=function(){
         IG.util.InitForms.regional_toggleExisting();
      };
      gE("optIn").onclick=function(){
         IG.util.InitForms.regional_toggleOpt(this,'emailOptOut');
      };

   },
   mobileDealing: function(){
      this.of.addMail("email", this.msgEmail(IG.util.Site.Locale));
      gE("frmMobileDealing").onsubmit=function(){
 			var s = (typeof d.frmMobileDealing.JSvalidateString != "undefined")?d.frmMobileDealing.JSvalidateString.value:IG.util.InitForms.msgCompleteAll(IG.util.Site.Locale);
	      return IG.util.InitForms.of.validate(s);
      };

   },

	referAFriend: function(){
		var locale = (IG.util.Site.Locale)?IG.util.Site.Locale:'en_GB';
		
        switch(locale) {
            case 'fr_fr':
            case 'fr_lu':
                this.of.addRequiredCheckBox('z_accept_agreement', this.msgTerms(locale));
                this.of.addMail('b_friends_email', this.msgEmail(locale));
                this.of.addMail('d_customers_email', this.msgEmail(locale));
                break;
        
            case 'en_GB':
            default:
                this.of.addRequiredCheckBox('accept_agreement', this.msgTerms(locale));
                this.of.addMail('friends_email', this.msgEmail(locale));
                this.of.addMail('customers_email', this.msgEmail(locale));
        }
	
        switch(locale) {
            case 'en_gb':
                gE("appRefer").onsubmit = function(e){
                    var gift_book = gE("gift_book");
                    var gift = document.getElementsByName("gift");
                    var the_gift = gE("the_gift");
                    var gift_books = gE("gift_books");
                    
                    if (gift_book.checked){
                        the_gift.value = gift_books.value;
                    } else {
                        for(g=0;g<gift.length;g++){
                            if(gift[g].checked){
                                the_gift.value = gift[g].value
                            }
                        }
                        //the_gift.value = gift.value; gift is an array! fixed.
                        IG.util.InitForms.of.notRequired('gift_books');				
                    }
                    //return submitXForm(this,IG.util.InitForms.of.validate());			
                    return IG.util.InitForms.of.validate();
                };
                break;
                
            default:
                gE("appRefer").onsubmit = function(e){
                    //return submitXForm(this,IG.util.InitForms.of.validate());			
                    return IG.util.InitForms.of.validate(IG.util.InitForms.msgCompleteAll(locale));
                };
                break;
        }
	},

   survey_checkKnowledge:function(e){
      var DOM = YAHOO.util.Dom;
      var kW = DOM.get("knowledge_work");
      var kE = DOM.get("knowledge_education");
      var kN = DOM.get("knowledge_none");
      
      if(e == kN){
         kW.checked = false;
         kE.checked = false;
      }
      if(e == kW || e == kE){
         kN.checked = false;
      }
   },

   survey_validator: function(){
      var DOM = YAHOO.util.Dom;
      if(this.of.validate() && (DOM.get("knowledge_work").checked || DOM.get("knowledge_education").checked || DOM.get("knowledge_none").checked)){
         sC("doneSurvey", "1", 180);
         return true;
      }else{
         alert(this.msgCompleteAll(IG.util.Site.Locale));
         return false;
      }
   },

   survey: function(){
        var completeAll = this.msgCompleteAll(IG.util.Site.Locale);

      this.of.addRequiredRadio('a_Account_opened',completeAll);
      this.of.addRequiredRadio('b_1_Shares_Bonds',completeAll);
      this.of.addRequiredRadio('b_2_Warrants_Options_Exchange_traded_derivatives',completeAll);
      this.of.addRequiredRadio('b_3_CFDs_Spreadbets_OTC_derivatives',completeAll);
      this.of.addRequiredRadio('c_Trading_method',completeAll);
      this.of.notRequired('e_name');
      this.of.notRequired('e_account_number');
      
      gE("knowledge_work").onclick = function(){
         IG.util.InitForms.survey_checkKnowledge(this);
      };
      gE("knowledge_education").onclick = function(){
         IG.util.InitForms.survey_checkKnowledge(this);
      };
      gE("knowledge_none").onclick = function(){
         IG.util.InitForms.survey_checkKnowledge(this);
      };
      gE("appSurvey").onsubmit = function(){
         return submitXForm(this,IG.util.InitForms.survey_validator());
      };
      
      if(IG.util.Cookie.get("doneSurvey")){
         var DOM = YAHOO.util.Dom;
         DOM.addClass(DOM.get(oSource),"hidden");
         DOM.removeClass(DOM.get(oCookie),"hidden");
      }
   },

	freeSeminar: function(){
      this.of.addMail('b_email',this.msgEmail(IG.util.Site.Locale));
      this.of.notRequired('d_account');
		gE("seminarSubmit").onclick=function(){
			var s = (gE(document.freeSeminar.JSvalidateString))?s.value:IG.util.InitForms.msgCompleteAll(IG.util.Site.Locale);
	      if (IG.util.InitForms.of.validate(s)){
				gE("freeSeminar").submit();
			}
      };

	},

	semFree: function(){
      this.of.addMail('email',this.msgEmail(IG.util.Site.Locale));
      this.of.notRequired('00N20000001Jezl');
		this.of.notRequired('optIn');
		this.of.notRequired('emailOptOut');
		returnDealer();
		gE("seminarSubmit").onclick=function(){
			var s = (gE(document.semFree.JSvalidateString))?s.value:IG.util.InitForms.msgCompleteAll(IG.util.Site.Locale);
	      if (IG.util.InitForms.of.validate(s)){
				gE("semFree").submit();
			} else {
				return false;
			}
      };
		if (gE("optIn")){
			gE("optIn").onclick=function(){
				IG.util.InitForms.regional_toggleOpt(this,'emailOptOut');
			};
		} 
	},

	dblSubmit: function(){
      this.of.addMail('Email',this.msgEmail(IG.util.Site.Locale));
		this.of.notRequired('cqAns0');
		this.of.notRequired('Webinar_ID__c');
		this.of.notRequired('Camapaign_ID');
		this.of.notRequired('Trade_With_Competitor__c');
		this.of.notRequired('Trading_Frequency__c');
		this.of.notRequired('Products_Interested_in__c');
		this.of.notRequired('Future_Seminar_Topics__c');
		this.of.notRequired('Friend_s_Email__c');
		this.of.notRequired('optIn');
		this.of.notRequired('emailOptOut');
		returnDealer();
		getQpid();		
		
		var arrGotoMeeting = [];
		arrGotoMeeting[0] = "https://www1.gotomeeting.com/en_US/island/webinar/registration.flow";
		arrGotoMeeting[1] = "Name_First";
		arrGotoMeeting[2] = "Name_Last";
		arrGotoMeeting[3] = "cqAns0";
		arrGotoMeeting[4] = "Email";
		arrGotoMeeting[5] = "PhoneNumber";
		arrGotoMeeting[6] = "WebinarKey";
		var arrSalesForce = [];
		arrSalesForce[0] = "https://www.salesforce.com/servlet/servlet.WebToLead?encoding=iso-8859-1";
		arrSalesForce[1] = "first_name";
		arrSalesForce[2] = "last_name";
		arrSalesForce[3] = "00N20000001Jezl";
		arrSalesForce[4] = "email";
		arrSalesForce[5] = "phone";
		arrSalesForce[6] = "Webinar_ID__c";

		gE("seminarSubmit").onclick=function(){
			var s = (gE(document.dblSubmit.JSvalidateString))?s.value:IG.util.InitForms.msgCompleteAll(IG.util.Site.Locale);
	      if (IG.util.InitForms.of.validate(s)){
			
		      frm = DOM.get('dblSubmit');
		      frm.setAttribute('action', arrGotoMeeting[0])
		      frm.submit(); //to new window
		      
		      frm.setAttribute('target', '_self')
		      frm.setAttribute('action', arrSalesForce[0]);
		      for(i=1;i<arrSalesForce.length;i++) {
		         for(f=0, flds=frm.getElementsByTagName('input');f<flds.length;++f){
		            if(flds[f].name==arrGotoMeeting[i]) {
		               flds[f].name = arrSalesForce[i];
		            }
		         }
		         for(f=0, flds=frm.getElementsByTagName('select');f<flds.length;++f){
		            if(flds[f].name==arrGotoMeeting[i]) { gmField = flds[f] }
		            if(flds[f].name==arrSalesForce[i]) { sfField = flds[f] }
		         }
		      }
		      var sfField2 = DOM.get('Campaign_ID');
		      if(sfField2!='undefined' && sfField!='undefined') {
		         sfField.selectedIndex = gmField.selectedIndex;
		         sfField2.selectedIndex = gmField.selectedIndex;
		      }
				gE("dblSubmit").submit();
			} else {
				return false;
			}
      };
	},

	l2Register: function(){
		gE('l2RegisterSubmit').onclick = function(){
				IG.util.InitForms.l2Register_submit();
				return false
		}
	},
	
	l2Register_submit: function(){
			this.of.addMail('email_address',this.msgEmail(IG.util.Site.Locale));
		
			var DOM = YAHOO.util.Dom;
			this.of.notRequired('name');
			this.of.notRequired('account_number');
			this.of.notRequired('email_address');
			this.of.notRequired('telephone');
			if(this.of.validate()){
				var f = document.l2Register;
				var aS = DOM.get("tdConfirm").getElementsByTagName("input");
				var bC = false;
				for (var i = 0; i < aS.length; i++){
					if(aS[i].checked){
						bC = true;
						break;
					}
				}
				if(!bC){
					alert("Please confirm that you have read and understood the L2 Trading Manual.");
					return false;
				} else {
					f.submit();
				}
			}else{
				return false;
			}

	},
	
	init: function(){
      if (gE('contactForm')){
         this.oForm('contactForm');
         this.contactUs();
      } else if (gE('feedbackForm')){
         this.oForm('feedbackForm');
         this.feedbackForm();
      } else if (gE('semReg')){
         this.oForm('semReg');
         this.regionalSeminars();
      } else if (gE('semFree')){
         this.oForm('semFree');
         this.semFree();
      } else if (gE('frmMobileDealing')){
         this.oForm('frmMobileDealing');
         this.mobileDealing();
      } else if (gE('appRefer')){
         this.oForm('appRefer');
         this.referAFriend();
      } else if (gE('appSurvey')){
         this.oForm('appSurvey');
         this.survey();
      } else if (gE('freeSeminar')){
         this.oForm('freeSeminar');
         this.freeSeminar();
      } else if (gE('l2Register')){
         this.oForm('l2Register');
         this.l2Register();
      } else if (gE('dblSubmit')){
         this.oForm('dblSubmit');
         this.dblSubmit();
		}
   }
};


/******* MACROMEDIA FLASH FUNCTIONS *******/
IG.util.InsertFlash = {
	
	bFlash : true,
   get_link : '#',
   get_gif : '',
	width: 720,
	height: 335,
	img: '',
	swf:'',
	Link:'',
	
	get_controlVersion: function(){
		var version;
		var axo;
		var e;
		// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
		try {
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
		if (!version){
			try {
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				version = "WIN 6,0,21,0";
				axo.AllowScriptAccess = "always";
				version = axo.GetVariable("$version");
			} catch (e) {
			}
		}
		if (!version){
			try {
				// version will be set for 4.X or 5.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = axo.GetVariable("$version");
			} catch (e) {
			}
		}
		if (!version){
			try {
				// version will be set for 3.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			} catch (e) {
			}
		}
		if (!version){
			try {
				// version will be set for 2.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			} catch (e) {
				version = -1;
			}
		}
		return version;
	},
	
	get_swfVersion: function(){
		var flashVer = -1;
		if (navigator.plugins != null && navigator.plugins.length > 0) {
			if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
				var descArray = flashDescription.split(" ");
				var tempArrayMajor = descArray[2].split(".");			
				var versionMajor = tempArrayMajor[0];
				var versionMinor = tempArrayMajor[1];
				var versionRevision = descArray[3];
				if (versionRevision == "") {
					versionRevision = descArray[4];
				}
				if (versionRevision[0] == "d") {
					versionRevision = versionRevision.substring(1);
				} else if (versionRevision[0] == "r") {
					versionRevision = versionRevision.substring(1);
					if (versionRevision.indexOf("d") > 0) {
						versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
					}
				}
				flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			}
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1){
			flashVer = 4;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1){
			flashVer = 3;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1){
			flashVer = 2;
		} else if ( isIE && isWin && !isOpera ){
			flashVer = this.get_controlVersion();
		}	
		return flashVer;
	},
	
	get_flashVersion: function(reqMajorVer, reqMinorVer, reqRevision){
			var versionStr = this.get_swfVersion();
			if (versionStr == -1 ) {
				return false;
			} else if (versionStr != 0) {
				if(isIE && isWin && !isOpera) {
					// Given "WIN 2,0,0,11"
					var tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
					var tempString        = tempArray[1];			// "2,0,0,11"
					var versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
				} else {
					var versionArray      = versionStr.split(".");
				}
				var versionMajor      = versionArray[0];
				var versionMinor      = versionArray[1];
				var versionRevision   = versionArray[2];
		
					// is the major.revision >= requested major.revision AND the minor version >= requested minor
				if (versionMajor > parseFloat(reqMajorVer)) {
					return true;
				} else if (versionMajor == parseFloat(reqMajorVer)) {
					if (versionMinor > parseFloat(reqMinorVer)){
						return true;
					} else if (versionMinor == parseFloat(reqMinorVer)) {
						if (versionRevision >= parseFloat(reqRevision)){
							return true;
						}
					}
				}
				return false;
			}
	},

	/* Purpose: Insert flash movie into document
	 * Usage: showFlash([String], [Number], [Number], [String], [String], [String], [String|Object]);
	 * Arguments: Movie URL string, width, height, window mode, background colour, movie variables, 
				  optional target for embed - id of HTML element or HTML object or no arg to write to document
	 * Returns: None
	 */
	insertFlash: function(mode, bg, vars, target){
		var movie=this.swf;
		var w=this.width;
		var h=this.height
		var replacementIMG=this.img;
		var replacementURL=this.Link;
		var plugin = "http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash";
		var quality="high";
		var str = "";

			if(this.bFlash ) {
				var a = [["movie", movie], ["wmode", mode], ["bgcolor", bg], ["flashvars", vars], ["pluginspage",plugin], ["quality",quality]];
					
				str = '<object pluginspage="'+plugin+'" quality="'+quality+'" type="application/x-shockwave-flash" data="'+ movie +'" width="' +w +'" height="'+ h +'">';
				for(var i=0; a[i]; i++) {
					if(a[i][1]) {
						str += '<param name="'+a[i][0]+'" value="'+a[i][1]+'" />';
					}
				}
				str += '</object>';
			} else {
				if(replacementIMG && replacementURL){
					str = "<a href="+ replacementURL +"><img src=\""+ replacementIMG +"\" width="+ w +" height="+ h +" border='0'></a>";
				}
			}

         if(!target || target == "undefined") { 
				d.write(str);
			} else if(target == "return string") { 
				return str;
			} else if(typeof target == "string") { 
				if(gE(target)) {
					gE(target).innerHTML = str;
				}
			} else if(typeof target == "object") { 
				target.innerHTML = str;
			}
	},
	
	setAttributes: function(el){
		if (!el) return;
		var dir = '/lib/swf/';
		if (el.id.toLowerCase()!='banner'){
			dir = '/img/swfs/';
		}
			if (!el.getAttribute('swf')){
				this.swf = dir + IG.util.InsertFlashSWF(IG.util.Site.Page); //home page swf is held in different path
				this.img = '/img/' + this.get_gif;
				this.Link = this.get_link;
			} else {
				this.swf = dir +  el.getAttribute('swf');  
				this.img = '/img/' + el.getAttribute('img');  
				this.Link = (el.getAttribute('link'))?el.getAttribute('link'):''; 
				this.height = el.getAttribute('height'); 
				this.width = el.getAttribute('width'); 
				el.removeAttribute('swf');
				el.removeAttribute('img');
				el.removeAttribute('link');
				el.removeAttribute('height');
				el.removeAttribute('width');
			}

	},
	
   init: function(){
		// if the is flash content - and its not using the fade image function - and its not filled with static images - AND not imageSlider
		var swf; var gif; var Link; var el;
		this.bFlash = this.get_flashVersion(8, 0, 0);
		
      if (gE("flashContent") || gE("flashContentRes")){
			el = (gE("flashContent"))?gE("flashContent"):gE("flashContentRes");
			var strHTML = el.innerHTML.toLowerCase();
			if (((strHTML.indexOf('javascript')==-1 && strHTML.indexOf('<img')==-1)|| (strHTML.indexOf('javascript')==-1 && strHTML.indexOf('noscript')>-1)) && (strHTML.indexOf('imageslider')==-1) && el){
				this.setAttributes(el);
				this.insertFlash(false, "#fff", false, el);
			}
		} else if (gE("slide-banner")){
			  IG.util.BannerSlide.init();
		} else if (gE("home") || gE("public_website") || IG.util.Site.Page == "home.html"){
				if (this.bFlash){
					this.bFlash = !IG.util.Cookie.get("hideFlash");
				}
				this.setAttributes(gE('banner'));
				IG.util.Loader.add(this.insertFlash(false, "#fff", false, "banner"));
		}
   }

};























/******* FORM VALIDATION *******/
/******* LOGIN VALIDATION *******/
/* Global boolean to prevent multiple login tries */
var bLogin = true;

/* Purpose: Submit form via href onclick if enter pressed
 * Usage: checkSubmit([Event]);
 * Arguments: Event object
 * Returns: none
 */
function checkSubmit(e) {
	if(e.keyCode == 13) {
		var target = e.target || e.srcElement;
		var form = target.parentNode;
		while(form.tagName.toLowerCase() != "form" && form != document) {
			form = form.parentNode;
		}
		form.getElementsByTagName("a")[0].onclick();
	}
}

/* Purpose: Check to see if a form field value has been changed from default
 * Usage: fieldHasValue([Object]);
 * Arguments: Input object
 * Returns: Boolean
 */
function fieldHasValue(o) {
	return (o.getAttribute("type") == "hidden" || (o.value !== "" && o.value != o.defaultValue));
}

/* Purpose: Clear a form field
 * Usage: clearField([Object]);
 * Arguments: Input object
 * Returns: None
 */
function clearField(o) {
	if(o.value == o.defaultValue) {
		o.value = "";
	}
}

/* Purpose: Login validation
 * Usage: submitLogin([Object]);
 * Arguments: Form object, optional argument account number error message, optional argument account password message
 * Returns: Boolean | submits form
 */
function submitLogin(f) {
	var s1 = arguments[1] || "Please enter your Account Number.";
	var s2 = arguments[2] || "Please enter your Password.";
	if(bLogin) {
		var id = f.account_id;
		var pass = f.password;
		if(!fieldHasValue(id)) {
			alert(s1);
			id.focus(); id.select();
			return false;
		} else if(!fieldHasValue(pass)) {
			alert(s2);
			pass.focus(); pass.select();
			return false;
		} else {
			id.value = id.value.toUpperCase();
			pass.value = pass.value.toUpperCase();
         var domain = d.location.hostname;
         if(/^https/.test(f.action)) {
            if (/^DEMO-/.test(id.value)) {
               f.action = f.action.replace("www.", "demo.");
            } else if(!(/www./.test(domain))) {
               f.action = f.action.replace("www", domain.substring(0, domain.indexOf(".")));
            }
         } else {
            if (/^DEMO-/.test(id.value))  {
               f.action = "https://demo"+ domain.substring(domain.indexOf(".")) +f.action.replace(d.location.protocol+"//"+d.location.hostname, "");
            } else {
   			   f.action = "https://"+d.location.hostname+f.action.replace(d.location.protocol+"//"+d.location.hostname, "");
            }
         }
			bLogin = false;
			f.submit();
		}
		return false;
	}
}
/******* END LOGIN VALIDATION *******/
/* Purpose: Instantiate a validation object
 * Usage: [variable] = new oFormVal([String]) OR [variable] = new oFormVal([String],[String])
 * Arguments: Name of form, optional span to output messages to
 * Returns: Object
 */
function oFormVal(sName , spanID){
	this.active = true;
	this.checkboxes = [];
	this.checkboxesm = [];
	this.radios = [];
	this.radiosm = [];
	this.mails = [];
	this.mailsm = [];
	this.longer = [];
	this.longerm = [];
	this.nr = [];
	this.either = [];
	this.dateText = [];
	this.sName = sName;
	this.spanID = (arguments.length = 2)?spanID:null;
}

/* Purpose: Add checkbox input to form validation
 * Usage: [Object].addRequiredCheckBox([String], [String]);
 * Arguments: Input name, alert message
 * Returns: none
 */
oFormVal.prototype.addRequiredCheckBox = function(sName, sMessage) {
	this.checkboxes.push(sName);
	this.checkboxesm.push(sMessage);
};

/* Purpose: Add radio input to form validation
 * Usage: [Object].addRequiredRadio([String], [String]);
 * Arguments: Input name, alert message
 * Returns: none
 */
oFormVal.prototype.addRequiredRadio = function(sName, sMessage) {
	this.radios.push(sName);
	this.radiosm.push(sMessage);
};

/* Purpose: Add email address validation
 * Usage: [Object].addMail([String], [String]);
 * Arguments: Input name, alert message
 * Returns: none
 */
oFormVal.prototype.addMail = function(sName,sMessage) {
	this.mails.push(sName);
	this.mailsm.push(sMessage);
};

/* Purpose: Add either one field or another mandatory
 * Usage: [Object].addEither([String], [String], [String]);
 * Arguments: Input name1, Input name2, alert message
 * Returns: none
 */
oFormVal.prototype.addEither = function(sName1,sName2,sMessage){
   this.either.push( [sName1,sName2,sMessage] );
   this.nr[sName1] = true;
   this.nr[sName2] = true;
};

/* Purpose: Add date-field validation
 * Usage: [Object].addDate([String], [String]);
 * Arguments: Input name, alert message
 * Returns: none
 */
oFormVal.prototype.addDate = function(sName,sMessage) {
   this.dateText.push( [sName, sMessage] );
};

/* Purpose: Add 2 character minimum input validation
 * Usage: [Object].addLonger([String], [String]);
 * Arguments: Input name, alert message
 * Returns: none
 */
oFormVal.prototype.addLonger = function(sName,sMessage) {
	this.longer.push(sName);
	this.longerm.push(sMessage);
};

/* Purpose: Remove an input from validation
 * Usage: [Object].notRequired([String]);
 * Arguments: Input name
 * Returns: none
 */
oFormVal.prototype.notRequired = function(sName) {
	this.nr[sName] = true;
};

/* Purpose: Sees if an element is a checkbox
 * Usage: [Object].isCheckBox([String]);
 * Arguments: Input name
 * Returns: Boolean
 */
oFormVal.prototype.isCheckBox = function(o) {
	return (typeof o.nodeName == "string" && o.type == "checkbox");
};

/* Purpose: Sees if an element is a radio
 * Usage: [Object].isRadio([String]);
 * Arguments: Input name
 * Returns: Boolean
 */
oFormVal.prototype.isRadio = function(o) {
	return (o.type == "radio");
};

/* Purpose: Display output messages
 * Usage: (used internally by this.validate method)
 * Arguments: Message to output
 * Returns: none
 */
oFormVal.prototype.outputMessage = function( s ){
	if (this.spanID == null)	{
		alert( s );
	} else {
		document.getElementById( this.spanID ).innerHTML = s;
	}
}

/* Purpose: Validate the form
 * Usage: [Object].validate([String]);
 * Arguments: Optional default error message string
 * Returns: Boolean
 */
oFormVal.prototype.validate = function(s) {
	var f = d.forms[this.sName].elements;
	s = s || 'Sorry, please complete all details.';
	if (this.spanID != null) { document.getElementById( this.spanID ).innerHTML = ''; }
	for(var i=0; f[i]; i++) {
		if(!this.nr[f[i].name] && f[i].name.length > 0 && !fieldHasValue(f[i]) && !this.isCheckBox(f[i]) && !this.isRadio(f[i])) {
			this.outputMessage(s);
			f[i].focus();
			return false;
		}
	}
   for(i=0; this.either[i]; i++) {
      if( (f[this.either[i][0]].value.length+f[this.either[i][1]].value.length) == 0 )
      {
         this.outputMessage(this.either[i][ 2 ]);
         f[this.either[i][0]].focus();
         return false;
      }
   }
   for(i=0; this.dateText[i]; i++) {
      if(!/^(0[1-9]|[12]\d|3[01])\/(0[1-9]|1[0-2])\/19[4-9]\d/.test(f[this.dateText[i][0]].value)) {
         this.outputMessage(this.dateText[i][1]);
         f[this.dateText[i][0]].focus();
         return false;
      }
   }
	for(i=0; this.checkboxes[i]; i++) {
		if(!f[this.checkboxes[i]].checked) {
			this.outputMessage(this.checkboxesm[i]);
			return false;
		}
	}
	for(i=0; this.radios[i]; i++) {
		var radioChecked = false;
		for(var p=0; f[this.radios[i]][p]; p++) {
			if(f[this.radios[i]][p].checked) {
				radioChecked = true;
			}
		}
		if(!radioChecked) {
			this.outputMessage(this.radiosm[i]);
			return false;
		}
	}
	for(i=0; this.mails[i]; i++) {
		if(!/^.+\@[A-Za-z0-9][A-Za-z0-9\-]+\..+[A-Za-z]$/.test(f[this.mails[i]].value)) {
			this.outputMessage(this.mailsm[i]);
			f[this.mails[i]].focus();
			return false;
		}
	}
	for(i=0; this.longer[i]; i++) {
		if(f[this.longer[i]].value.length < 2) {
			this.outputMessage(this.longerm[i]);
			f[this.longer[i]].focus();
			return false;
		}
	}
	return true;
};
var submitXForm = function(f,o){
   if(o){
      var fields = f.getElementsByTagName("input");
      var postData;
      var arRadios = {};
      for (var i = 0; i < fields.length; i++){
         if(fields[i].type != "radio"){
            if(fields[i].type == "checkbox"){
               if(fields[i].checked){
                  postData += "&"+ fields[i].name +"="+ fields[i].value;
               }
            }else{
               postData += "&"+ fields[i].name +"="+ fields[i].value;
            }
         }else{
            arRadios[fields[i].name] = true;
         }
      }
      for (var rName in arRadios) {
         var radioName = f[rName];
   		for(var p = 0; radioName[p]; p++){
   			if(radioName[p].checked){
               postData += "&"+ radioName[p].name +"="+ radioName[p].value;
   			}
   		}
      }
      //try { if (getQS("debug") == "1") { alert(f.action);alert(postData);alert(callback); } } catch(e) {}
      var request = YAHOO.util.Connect.asyncRequest('POST', f.action, callback, postData);
   }
   return false;
};
/* Purpose: Return a dealer if one is required
 * Usage: [Object].validate([String]);
 * Arguments: None
 * Returns: Dealer to form
 */
function returnDealer()	{
	var DOM = YAHOO.util.Dom;
	o = DOM.get('WtoL_Owner__c');
   
   if(o!='undefined') {
   	var t = 0;
   	var elements = DOM.getElementsByClassName('dealer', 'input'); 
   	for(i=0;i<elements.length;++i)	{ t+=parseInt(elements[i].value) }
   	r = parseInt(rand(t));
   	t = 0;
   	for(i=0;i<elements.length;++i)	{ 
   		t+=parseInt(elements[i].value)
   		o.value = elements[i].id;
   		if(t>=r)	{
   			break;
   		} 
   	}
   }
}
/* Purpose: Return a qpid if one is required
 * Usage: [Object].validate([String]);
 * Arguments: None
 * Returns: Dealer to form
 */
function fillQpid()	{
	var DOM = YAHOO.util.Dom;
	qp = DOM.get('QPID__c');
	
	var sQPID = IG.util.Cookie.get('qpid');
	
	if(sQPID && qp!= 'undefined'){
		qp.value = sQPID.split(',')[0];
	}
}

function rand(number)
{
	return Math.ceil(Math.random()*number);
};

/******* END FORM VALIDATION *******/













IG.util.Slideshow = {
	
	slide: function(b){
		var ss = IG.util.Slideshow;
		var _play = ss.play;
		play=b;
		if (!b){
			clearTimeout(ss.oTimer);
		}else{
			if (!_play){
				ss.oTimer = setTimeout("IG.util.Slideshow.rotateimage()",ss.pause/2);
			}
		}
	},
	
	
	fill: function(){
		var ss = IG.util.Slideshow;
		var preloadedimages=new Array()
		for (var p=0;p<ss.fadeimages.length;p++){
			preloadedimages[p]=new Image();
			preloadedimages[p].src=ss.fadeimages[p][0];
		}
	},
	
	create: function(){
		var ss = IG.util.Slideshow;
		if (ss.ie4 || ss.dom){
			gE('flashContent').innerHTML = '<div style="position:relative;width:'+ss.width+';height:'
			+ss.height+';overflow:hidden"><div  id="canvas0" style="position:absolute;width:'+ss.width+';height:'+ss.height
			+';top:0;left:0;filter:alpha(opacity=10);-moz-opacity:10"></div><div id="canvas1" style="position:absolute;width:'+ss.width+';height:'+ss.height
			+';top:0;left:0;filter:alpha(opacity=10);-moz-opacity:10;visibility: hidden"></div></div>';
		} else {
			gE('flashContent').innerHTML = '<img name="defaultslide" src="'+ss.fadeimages[0][0]+'">';
		}
		
	},
	
	fadepic: function(){
		var ss = IG.util.Slideshow;
		if (ss.curpos<100){
			ss.curpos+=10;
			if (ss.tempobj.filters) {
				ss.tempobj.filters.alpha.opacity = ss.curpos;
			} else if (ss.tempobj.style.MozOpacity) {
				ss.tempobj.style.MozOpacity = ss.curpos/101;
			}
		} else {
			clearInterval(ss.dropslide);
			nextcanvas=(ss.curcanvas=="canvas0")? "canvas0" : "canvas1";
			ss.tempobj=ss.ie4? eval("document.all."+nextcanvas) : gE(nextcanvas);
			ss.tempobj.innerHTML=ss.insertimage(ss.nextimageindex);
			ss.nextimageindex=(ss.nextimageindex<ss.fadeimages.length-1)? ss.nextimageindex+1 : 0;
			var tempobj2=ss.ie4? eval("document.all."+nextcanvas) : gE(nextcanvas);
			tempobj2.style.visibility="hidden";
			if (ss.play){
				ss.oTimer = setTimeout("IG.util.Slideshow.rotateimage()",ss.pause);
			}
		}
	},
	
	insertimage: function(i){
		var ss = IG.util.Slideshow;
		var tempcontainer=ss.fadeimages[i][1]!=""? '<a href="'+ss.fadeimages[i][1]+'" target="'+ss.fadeimages[i][2]+'">' : "";
		tempcontainer+='<img src="'+ss.fadeimages[i][0]+'" border="0">';
		tempcontainer=ss.fadeimages[i][1]!=""? tempcontainer+'</a>' : tempcontainer;
		return tempcontainer;
	},
	
	rotateimage: function(){
		var ss = IG.util.Slideshow;
		if (ss.ie4 || ss.dom){
			ss.resetit(ss.curcanvas);
			var crossobj=ss.tempobj=ss.ie4? eval("document.all."+ss.curcanvas) : gE(ss.curcanvas);
			crossobj.style.zIndex++;
			ss.tempobj.style.visibility="visible";
			var temp='setInterval("IG.util.Slideshow.fadepic()",50)';
			ss.dropslide=eval(temp);
			ss.curcanvas=(ss.curcanvas=="canvas0")? "canvas1" : "canvas0";
		} else {
			d.images.defaultslide.src=ss.fadeimages[ss.curimageindex][0];
		}
		ss.curimageindex=(ss.curimageindex<ss.fadeimages.length-1)? ss.curimageindex+1 : 0;
	},

	resetit: function(what){
		var ss = IG.util.Slideshow;
		ss.curpos=10;
		var crossobj=ss.ie4? eval("document.all."+what) : gE(what);
		if (crossobj.filters) {
			crossobj.filters.alpha.opacity=ss.curpos;
		} else if (crossobj.style.MozOpacity){
			crossobj.style.MozOpacity=ss.curpos/101;
		}
	},

	startit: function(){
		var ss = IG.util.Slideshow;
		var crossobj=ss.ie4? eval("document.all."+ss.curcanvas) : gE(ss.curcanvas);
		crossobj.innerHTML=ss.insertimage(ss.curimageindex);
		ss.rotateimage();
	},
	
	init: function(){
		IG.util.Slideshow.ie4 = document.all;
		IG.util.Slideshow.dom = document.getElementById;
		IG.util.Slideshow.play = true;
		IG.util.Slideshow.width = '720px';
		IG.util.Slideshow.height = '335px';
		IG.util.Slideshow.pause = 1500;
		IG.util.Slideshow.curpos = 10;
		IG.util.Slideshow.degree = 10;
		IG.util.Slideshow.curcanvas = "canvas0";
		IG.util.Slideshow.curimageindex = 0;
		IG.util.Slideshow.nextimageindex = 1;
		IG.util.Slideshow.fadeimages = IG.util.slideImages;
		IG.util.Slideshow.oTimer = 0;
		IG.util.Slideshow.dropslide = 0;
		IG.util.Slideshow.tempobj = null;
		
		if (gE('imageSlider')){
			IG.util.Slideshow.fill();
			IG.util.Slideshow.create();
			
			IG.util.Loader.add(this.startit);
		}
	}

};

IG.util.BannerSlide = {
	DOM: (typeof YAHOO == 'undefined')?gE:YAHOO.util.Dom,
	EVENT:(typeof YAHOO == 'undefined')?null:YAHOO.util.Event, 
	banner: gE("slide-banner"),
	currentSlide : '',
	animationFadeOut : '',
	animationFadeIn : '',
	animationTimer: false, 
	fadeDuration: 0.3,
	slideDuration:10000,
	addListeners: function(){
		this.EVENT.addListener(this.banner,"mouseover",function(){
			var bs = IG.util.BannerSlide;
			window.clearTimeout(bs.animationTimer);
			bs.animationTimer=false;
		});
		this.EVENT.addListener(this.banner,"mouseout",function(){
			var bs = IG.util.BannerSlide;
			if(!bs.animationTimer){
				bs.animationTimer=window.setTimeout("IG.util.BannerSlide.showNextSlide();",bs.slideDuration/2);
			}
		});
	},
	showNextSlide:function(){
		var bs = IG.util.BannerSlide;
		bs.EVENT.purgeElement(bs.banner);
		bs.animationFadeOut=new YAHOO.util.Anim(bs.currentSlide);
		bs.animationFadeOut.duration=bs.fadeDuration;
		bs.animationFadeOut.onComplete.subscribe(IG.util.BannerSlide.postProcessFadeOut);
		bs.animationFadeOut.attributes.opacity={to:0};
		bs.animationFadeOut.animate();
	},
	postProcessFadeOut:function(){
		var bs = IG.util.BannerSlide;
		bs.currentSlide.style.display="none";
		var nextSlide=bs.DOM.getNextSibling(bs.currentSlide);
		if(!nextSlide){
			nextSlide=bs.DOM.getChildren(bs.banner)[0];
		}
		bs.currentSlide=nextSlide;
		bs.currentSlide.style.display="block";
		bs.animationFadeIn=new YAHOO.util.Anim(bs.currentSlide);
		bs.animationFadeIn.duration=bs.fadeDuration;
		bs.animationFadeIn.attributes.opacity={from:0,to:1};
		bs.animationFadeIn.onComplete.subscribe(IG.util.BannerSlide.postProcessFadeIn);
		bs.animationFadeIn.animate();
	},
	postProcessFadeIn:function(){
		var bs = IG.util.BannerSlide;
		bs.addListeners();
		bs.animationTimer=window.setTimeout("IG.util.BannerSlide.showNextSlide();",bs.slideDuration);
	},

   init:function(){
			this.currentSlide=this.DOM.getChildren(this.banner)[0];
			this.animationTimer=window.setTimeout("IG.util.BannerSlide.showNextSlide();",this.slideDuration);
			this.addListeners();
	}
};




/**** ToggleLayer ****
 ** Required: dl tag with class='toggleMe'
 **			: dt tag to start with the id 'title_'
 **			: dd tag to start with the id 'description_' 
 **					AND to end in the same id of the corresponding dt tag (minus the 'title_')
****/				
IG.util.ToggleLayer = {
	byClass: function(className, tag){
		var arrObj = new Array();
		var tags = gT(tag);
		for (var x=0; x<tags.length; x++){
			if (tags[x].className && tags[x].className.indexOf(className)>=0){
				arrObj.push(tags[x])
			}
		}
		return arrObj;
	},
	
	show: function(elClicked){
		if (elClicked.tagName && elClicked.tagName.toLowerCase()=='dl'){
			var x = (isIE)?0:1;
			elClicked = elClicked.childNodes[x];
		}
		var b = IG.util.Browser
		var el = gE(elClicked.id.replace('title','description'))
		if (elClicked.childNodes.length>0 ){
			elClicked.childNodes[0].className += ' hover';
		} else {
			elClicked.className += ' hover';
		}
		el.style.display = 'block';
	},
	
	hide: function(elToggle){
		var elDD = elToggle.childNodes;
		for (var x=0; x<elDD.length; x++) {
			var el = elDD[x];
			if (el.tagName && el.tagName.toLowerCase() == 'dd') {
				el.style.display = 'none';
			} else if (el.tagName && el.tagName.toLowerCase() == 'dt' && el.childNodes) {
				el.childNodes[0].className = el.childNodes[0].className.replace(/hover/g,'');
			}
		}
	},
	
	init: function(){
		var arrToggle = this.byClass('toggleMe', 'DL');
		for (var x = 0; x<arrToggle.length; x++){
			var elToggle = arrToggle[x];
			elToggle.className='toggleMeJS';
			this.hide(elToggle);
			this.show(elToggle);
			switch (elToggle.getAttribute('change')){
			case 'hover' :
				var elDT = elToggle.childNodes;
				for (var y=0; y<elDT.length; y++) {
					if (elDT[y].tagName && elDT[y].tagName.toLowerCase() == 'dt') {
						elDT[y].onmouseover = function(e){
							if (this.tagName.toLowerCase() == 'dt'){
								IG.util.ToggleLayer.hide(elToggle);
								IG.util.ToggleLayer.show(this);
							}
						};
					}
				}
				break;
			case 'click' :
			default :
				elToggle.onclick = function(e){
					var evTarget = IG.util.Site.getEventTarget(e);
					if (evTarget.tagName.toLowerCase() == 'dt'){
						IG.util.ToggleLayer.hide(this);
						IG.util.ToggleLayer.show(evTarget);
					} else if (evTarget.tagName.toLowerCase() == 'a'){
						IG.util.ToggleLayer.hide(this);
						IG.util.ToggleLayer.show(evTarget.parentNode);
						return false;
					}
				};
				break;
			}
		}
	}
};


/* Read XML data using AJAX
	Can handle filtering on a local level
	Must have a schema namespace intialised
	Can be used onLoad like the following
			IG.util.XML.init(IG.util.XMLSchema_EconomicCalendar);  
	Schemas and initialisation are held in ig_util_*local*.js files
*/

IG.util.XML = {
	originalXML: null,
	workingXML: null,
	schema: null,
	
	xmlReplace: function(str){
		var tmp = str.replace('&','&amp;');
		tmp = tmp.replace('<','&lt;');
		tmp = tmp.replace('>','&gt;');
		tmp = tmp.replace('"','&quot;');
		return tmp;
	},
	
	createDataTable: function(schema){
		var myDataSource = null;
		myDataSource = new YAHOO.util.DataSource(schema.workingXML);
		myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
		myDataSource.connXhrMode = "queueRequests";
		//schema.schema; pass the smaller, original contents of the schema to the datasource (set in .init())
		myDataSource.responseSchema = schema.schema; 
		var myDataTable = null;
		myDataTable = new YAHOO.widget.DataTable(schema.resultsArea, schema.columns, myDataSource, {scrollable:true, height:"30em"}); //40em LLoback changed
	},
		
	createElement: function(type,str){
		if (type==0)
			return '<' + str + '>';
		else
			return '</' + str + '>';
	},
	
	recreateXML: function(schema){
		var include=false, newXML='<ResultSet>',tmpXML;
		var resultNode=schema.resultNode;
		var x = schema.originalXML.getElementsByTagName(resultNode);
		for (var i=0;i<x.length;i++) {
			var xx=x[i];
			if (typeof xx.tagName != 'undefined'){
				include=false;
				if (schema.filter(xx)){
					include = true;
				}
				tmpXML = '';
				for (var ii=0; ii<xx.childNodes.length;ii++){
					var xxx=xx.childNodes[ii];
					if (typeof xxx.tagName != 'undefined'){
						tmpXML += IG.util.XML.createElement(0,xxx.tagName);
						for (var iii=0; iii<xxx.childNodes.length;iii++){
							tmpXML += IG.util.XML.xmlReplace(xxx.childNodes[iii].nodeValue);
						}
						tmpXML += IG.util.XML.createElement(1,xxx.tagName);
					}
				}
				if (include) {
					newXML += IG.util.XML.createElement(0,resultNode) + tmpXML + IG.util.XML.createElement(1,resultNode);
				}
			}
		}
		newXML+='</ResultSet>';
		schema.workingXML = IG.util.XML.init(newXML);
		IG.util.XML.createDataTable(schema);
	},
	
	initResponse: function(localxmlhttp,schema){
		if(localxmlhttp.readyState!=4) return;
		if(localxmlhttp.status!=200) {
			alert("Problem retrieving XML data");
			return;
		}
		schema.originalXML = localxmlhttp.responseXML.documentElement;
		schema.workingXML = schema.originalXML;
		IG.util.XML.createDataTable(schema);
			
	},

	init: function(schema){
		var xmlDoc, parser;
		var strXML = (schema.source)?schema.source : schema;

		if (strXML.indexOf('<')===0){ // parse xml text
			try{ //Internet Explorer
				xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
				xmlDoc.async="false";
				xmlDoc.loadXML(strXML);
				return xmlDoc; 
			} catch(e) {
				try { //Firefox, Mozilla, Opera, etc.
					parser=new DOMParser();
					xmlDoc=parser.parseFromString(strXML,"text/xml");
					return xmlDoc; 
				} catch(e) {
					alert(e.message);
					return;
				}
			}
		} else { // parse an xml document
			var xmlhttp=null;
			schema.schema = schema; //odd i know, but used to pass the original contents of the schema to the dataTable;
											//i dont want to pass the whole contents later as this name space will be growing alot.
			schema.initResponse = this.initResponse;
			if (window.XMLHttpRequest)  {// code for IE7, Firefox, Mozilla, etc.
				xmlhttp=new XMLHttpRequest();
			} else if (window.ActiveXObject) {// code for IE5, IE6
				xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
			}
			if (xmlhttp!=null) {
				xmlhttp.onreadystatechange=function(){
					// building a function like this you implicitly make the aboce variables available
					schema.initResponse(xmlhttp,schema);
					}
				xmlhttp.open("GET",strXML,true);
				xmlhttp.send(null);
			} else {
				alert("Your browser does not support XMLHTTP.");
			}
			schema.init(); //filter onclick
		}
	}
};


/* YUI calendar in div
	Must have a schema namespace intialised
	Can be used onLoad like the following
			IG.util.Calendar.init(IG.util.CalendarSchema_firstDate);
	Schemas and initialisation are held in ig_util_*local*.js files
*/

IG.util.Calendar = {
	calendar: null,
	dialog:null,
	schema: null,
	showCal: function(schema){
		// 04-11-08... absolutely position the calendar in relation to button
		var xy = YAHOO.util.Dom.getXY(schema.calButton);
		xy[1] = xy[1] + 19;
		xy[0] = xy[0] - 68;
		
		//hide open calendars - hack to fix double calendar display 
		YAHOO.util.Dom.setXY(gE('containerFirst_c'), xy, true);
		YAHOO.util.Dom.setXY(gE('containerLast_c'), xy, true);
		gE('containerFirst_c').style.visibility = 'hidden'
		gE('containerLast_c').style.visibility = 'hidden'
		//end hack

		//then show calendar
		YAHOO.util.Dom.setXY(schema.container, xy, true);
		schema.dialog.show();
		if (YAHOO.env.ua.opera && document.documentElement) {// Opera needs to force a repaint
			 document.documentElement.style += "";
		} 
	},
	
	hideCal: function(schema){
		//schema.dialog.hide();
	},

	init: function(schema){
		var arrButtons;
		var okHandler = function() {
		var calendar = schema.calendar;
			if (calendar.getSelectedDates().length > 0 && schema.inputField !== null) {
				gE(schema.inputField).value = schema.returnString();
			} else if (schema.inputField !== null) {
				gE(schema.inputField).value = "";
			}
			schema.ok();
		};
  
			var cancelHandler = function() {
				schema.dialog.hide();
		  };
		  
		  
		  
		  // check to see if selectString has some text, if not then dont show it!
		if (schema.selectString.length==0){
			arrButtons = [ {text:schema.cancelString, handler:cancelHandler}];
		} else {
			arrButtons = [ {text:schema.selectString, isDefault:true, handler: okHandler}, 
							 {text:schema.cancelString, handler: cancelHandler}];
		}

			schema.calendar = new YAHOO.widget.Calendar(schema.calArea, {
				iframe:false,          // Turn iframe off, since container has iframe support.
				hide_blank_weeks:true  // Enable, to demonstrate how we handle changing height, using changeContent
			});

			schema.okHandler = this.okHandler;
			schema.cancelHandler = this.cancelHandler;
			schema.dialog = new YAHOO.widget.Dialog(schema.container, {
				context:[schema.calButton, "tl", "bl"],
				buttons: arrButtons ,
				width:"16em",  // Sam Skin dialog needs to have a width defined (7*2em + 2*1em = 16em).
				draggable:false,
				underlay:'none',
				close:false
			});

		  schema.calendar.render();
		  schema.dialog.render();
		  schema.dialog.hide();

		//show calendar on button click	
		  YAHOO.util.Event.on(schema.calButton, "click", function() {
				this.showCal(schema);
			},this, true);
		  
		  
		  //show calendar when textbox gets focus
		  YAHOO.util.Event.on(schema.inputField, "focus", function() {
				this.showCal(schema);
			},this, true);
		  
		  //hides calendar when textbox loses focus
		  YAHOO.util.Event.on(schema.inputField, "blur", function() {
				//this.hideCal(schema);
			},this, true);
		  
			
		  schema.calendar.renderEvent.subscribe(function() {
				IG.util.Calendar.dialog.fireEvent("changeContent");
		  });
		  
        schema.extend(schema);
	}
	
};

IG.util.Tour.init();

IG.util.PopUp.init();

IG.util.InitForms.init();

IG.util.InsertFlash.init();

IG.util.Tracker.init();

IG.util.Cookie.init();

IG.util.Slideshow.init();

IG.util.ToggleLayer.init();

IG.util.Loader.add(IG.util.Site.onload);

IG.util.Loader.add(IG.util.schemas.init());
