/*************

Download Helper file

@require prototype, scriptaculous
@author : Barrington Henry
@modified : 1/13/2009

**************/

Download = Class.create();
Download.prototype = {
		FUNCTION_CACHE_MAPPING:$H(),
		OBSERVER_CACHE:[],
		actionTrigger:null,
		finishDownload:false,
		actionTracking:null,
		productType:{
			foxaddon:'firefoxaddon',
			browser:'browser',
			nodown:'nodownload'
		},
		initialize: function(type, options, params){
				this.type = type;
				this.source = '';
				this.options  = Object.extend({delay: 1.0, addloading:true}, options || {});
				this.params   = Object.extend({}, params || {});
				
				this.originaltoppos = {'down_instructions':($('down_instructions') != null) ? parseInt($('down_instructions').style.top):0,
									  'down_instructions2':($('down_instructions2') != null) ? parseInt($('down_instructions2').style.top):0,
								  	  'dialog_notification':($('dialog_notification') != null) ? parseInt($('dialog_notification').style.top):0
								  }
				
				this.addObservers();
				
				this.themeDownload = false;
				this.downloadttype = '';
				this.gmRecaptcha = '';
				this.themeInst = null;
				this.scrollInstance = null;
				
				this.profileSubmitted = false;
				if(this.params.theme != undefined && this.params.theme instanceof Theme_Builder){
					this.themeInst = this.params.theme;
				}
		},
		
		doOverlay: function(){
			$('down_overlay').show();
		},
		
		/**
		 * Submit profile 
		 * @param {Object} event
		 */
		submitProfile:function(event){
			inputObj = {};
			
			if (Prototype.Browser.IE && arguments[1] != undefined) {		
				this.actionTrigger = arguments[1];
			}else{
				this.actionTrigger = event.element();
			}
			
			var typerequest = '';
			var downInstructions = $('down_instructions')
			
			if(downInstructions != null){
				var downid = ($('down_instructions').visible()) ? 'down_instructions' :'down_instructions2';
				this.scrollInstance = new Effect.ScrollTo($(downid));
			}
			
			var action = '/gmasync/download';
			
			if(this.actionTrigger.tagName == 'INPUT' && this.actionTrigger.type == 'button'){
				var formElement = this.actionTrigger.up('FORM');
				
				if(formElement == undefined){
					if((attrib = this.actionTrigger.readAttribute('formsubmit')) != undefined){
						formElement = $(attrib);
					}else{
						parentelem = this.actionTrigger.up(1);
						formElement = parentelem.down('FORM');
					}
				}
				
				this.params.form = formElement.id;
				action = formElement.action;
				typerequest = formElement.name;
			}
						
			allinputstext = $(this.params.form).getInputs('text');			
			allinputspass = $(this.params.form).getInputs('password');
			allinputshidden = $(this.params.form).getInputs('hidden');
			
			defaultchecked = $$('input.defaultchecked');			
			
			allinputstext.each(function(elem){
				inputObj[elem.name] = elem.value 
			});
			
			allinputspass.each(function(elem){
				inputObj[elem.name] = elem.value
			});		
			
			allinputshidden.each(function(elem){
				inputObj[elem.name] = elem.value
			});
			
			selected = $A($(this.params.form).getElementsByTagName('select'));
			if(selected.size() > 0){
				selected.each(function(elem){
					inputObj[elem.name] = elem.value
				});
			}
					
			defaultchecked.each(function(el){
				if(el.checked){
					inputObj[el.name] = el.value;
				}
			});
			
			if (Prototype.Browser.IE){
				inputObj['browser'] = 'ie6';
			}
			
			if(this.options.addloading){
				this.loading();
			}
			
			var processInfo = new AjaxSetInfo('submitdownload', {pars:inputObj}, {source:action});
			
			new PeriodicalExecuter(function(pe) {
				if (this.finishDownload) {
					this.setTrackingCall();
					pe.stop();
  				}
			}.bind(this), 0.3);
			
			AjaxSetInfo.addMethods({
				AfterProcess: this.postDownload.bind(this)
			}).bind(this);			
			
			processInfo.makeSet();
			
			this.profileSubmitted = true;
		},
		
		loading:function(){
			var loading = new Loading('gm_popup_dialog', 'world', 'Preparing Download...', {background:true, color:'#FFFFFF'}, {width:260});
			loading.modalMask();
			this.FUNCTION_CACHE_MAPPING.set('loadinginst', loading);
		},
		
		getDownload:function(event, element){	
			var downid = ($('down_instructions').visible()) ? 'down_instructions' :'down_instructions2';
			Event.stop(event);
			inputObj = {};
				
			var elemtriggered = element;//event.element();

			if(this.themeDownload){
				inputObj['theme'] = this.themeInst.getSelection();
				var themebuilddown = $('themebuildExt');
				
				if(themebuilddown != null && themebuilddown.hasClassName('themebuildExt')){
					var download_location = themebuilddown.value + '/thm/' + inputObj['theme'];
					document.location = download_location ;
					return;
				}
			}
			
			Effect.ScrollTo($(downid));
			if(event.element().hasClassName('causeimg')){
				causeCollection = new Array();
				var elemanchor = event.element();
				var anchorancestor = event.element().up(1);
				
				if(anchorancestor != null || anchorancestor != undefined){
					causeCollection.push(anchorancestor.down('input.req').value)
				}else{
					var code = elemanchor.readAttribute('refcode')
					if(!code.blank()){
						causeCollection.push(code);
					}
				}
				inputObj['causes'] = causeCollection;
			}
			
			if (Prototype.Browser.IE){
				inputObj['browser'] = 'ie6';
			}
			
			var loading = new Loading('gm_popup_dialog', 'world', 'Preparing Download...', {background:true, color:'#FFFFFF', animations:false}, {width:260});
			loading.modalMask();
			this.FUNCTION_CACHE_MAPPING.set('loadinginst', loading);
			
			formaction = elemtriggered.readAttribute('formaction');

			if(formaction != undefined){
				inputObj['formaction'] = formaction; 
				var downtype = elemtriggered.readAttribute('downtype');
				
				if(downtype != undefined){
					inputObj['downloadtype'] = downtype; 	
				}
				
				var processInfo = new AjaxSetInfo('submitdownload',{pars:inputObj},{source:'/gmasync/download'});		
			}
			
			new PeriodicalExecuter(function(pe) {
				if (this.finishDownload) {
					this.setTrackingCall();
					pe.stop();
  				}
			}.bind(this), 0.3);
		

			AjaxSetInfo.addMethods({
				AfterProcess: this.postDownload.bind(this)
			}).bind(this);
			processInfo.makeSet();
		},
		
		getSigninForm:function(e){
			var overlib = new GM_overlib();
			var elem = e.element();
			
			overlib.generateoverlib({},
				{	bubbleselect:'progress', 
					innercontent:' Retrieving signin form...', 
					elem:elem, 
					bubbleidpostfix:elem.identify(),
					regex:elem.identify(),
					anchorY:-20,
					anchorX:-150
				}
			);
			
			var wrapper = $('contentverify').wrap('div');
			var downloadType = $('downloadtype') != null ? $('downloadtype') : '';
			var signinObj = {
				contentverify:wrapper.innerHTML,
				postreg:downloadType
			}
			
			var processInfo = new AJAXgetinfo('getsigninForm',{source:'/gmasync/getsigninform'},{pars:signinObj});
			AJAXgetinfo.addMethods({
				afterProcess:function(data){
					var diagActions = {
						actionparams : {download:this},
						okAction:function(actparams){
							var loading = new Loading('gm_popup_dialog', 'world', 'Preparing Download...', {animations:false}, {width:250});
							loading.modalMask();
							actparams.download.submitProfile(actparams.evalue);
						}.bind(this)
					}
					
					overlib.disabletip(elem.identify());
					var results = data.responseText.evalJSON();

					var message = results.signinform;
					
					params = {header:'Signin', message:message, actions:diagActions, doverlay:'down_overlay', buttonnames:{'ok':'Submit'}};
					options = {width:400, buttons:['ok', 'close2'], override:true, overflow:true, animations:false};
					
					var popdiag = new Popup_dialog(options, params);
					this.FUNCTION_CACHE_MAPPING.set('popupdiaginst', popdiag);
				}.bind(this)
			});
			processInfo.getinfoGen2();
		},
				
		addObservers:function(){
			if ($('instruction_wrapper') != null) {
				$('instruction_wrapper').select('div.close').invoke('observe', 'click', this.closeOverlay.bind(this));
			}
			
			var docwidth = Element.getWidth(document.body);
			if ($('down_instructions2') != null) {
				var elemwidth = $('down_instructions2').getWidth();
				var elemdiff = docwidth - elemwidth;
			}

			if (Prototype.Browser.IE) {
				var downInstructions2 = $('down_instructions2');
				var downOverlay = $('down_overlay');
				var answerYes = $('answer_yes');
				var answerNo = $('answer_no');
				
				if(downInstructions2 != null){
					downInstructions2.setStyle({left:elemdiff + 'px'});
				}
				
			 	var dim = getPageDimensions();
			 	
				if(downOverlay != null){
					downOverlay.setStyle({
			 			position: 'absolute',
			 			height: dim.height
			 		});
				}
				
				if(answerYes != null){
					answerYes.observe('click', this.notification.bindAsEventListener(this, 'yes'));
				}
				
				if(answerNo != null){
					answerNo.observe('click', this.notification.bindAsEventListener(this, 'no'));
				}
				
				if($('iesecuritycheck') != null && $('iesecuritycheck').value == 'securitycheck'){
					$$('div.main_content').invoke('hide');
					$$('div.footer').invoke('hide');
			 		
					var instruct = $('down_instructions2').down('div#IE_instructions');
					instruct.show();
					instruct.down('li#clickYellowBar').setStyle({color:'#c0c0c0'});
					instruct.down('li#clickYellowBar div.arrow_str_up').hide();

					$('down_instructions2').show();
					var top = $('down_instructions2').getHeight();
					$('down_instructions2').setStyle({
								top: -top + 'px'
					});		
					$('down_overlay').setStyle({display:'block'});
					document.location = $('downuri').value;
					var moveby = $('down_instructions2').getHeight();
					new Effect.Move($('down_instructions2'), {y: moveby,x:0,duration: 1.0});	
				}
		 	}else{
				downInstructions = $('down_instructions2');
				if(downInstructions != null){
					downInstructions.setStyle({left:elemdiff + 'px'});
				}
		 	}

			this.testIfGeckoBrowser();

			if(!this.testIfCanDownloadBrowser()){
				return;
			}

			if(this.type == 'install'){
				$('downbrowserext').observe('click', this.doOverlay);
				processInfo.makeSet();
			}
			
			if (this.type == 'installLoggedin') {
				$$('a#download_button_grn').invoke('observe', 'click', this.getDownload.bindAsEventListener(this));
				$$('a.addon_download').invoke('observe', 'click', this.getDownload.bindAsEventListener(this));
			}
			
			if(this.type == 'step2'){
				
				var applyChange = $('applychange');
				if (applyChange != null) {
					Event.observe($('applychange'), 'click', this.activateCapture.bindAsEventListener(this));
				}
				
				var signupform = $('get_signupform');
				
				if(signupform != null){
					signupform.observe('click', this.getSigninForm.bind(this));
				}
			}			

			if(this.type == 'home'){
				var download_button_grn = $$('.download_trigger');
				var theme_selection = $('themeselection');
				var submit_download = $$('.submit_download');
				var select_addon_download = $$('.addon_download_wrapper');
				
				//Event.observe($('applychange'), 'click', this.submitProfile.bindAsEventListener(this));
				
				if (download_button_grn.size() !== 0) {
					download_button_grn.each(function(el){
						el.onclick = function(){
							return false;
						}
					});
									
					download_button_grn.invoke('observe', 'click', this.getDownload.bindAsEventListener(this));
				}
				
				if(submit_download.size() !== 0){
					submit_download.invoke('observe', 'click', this.submitProfile.bindAsEventListener(this))
				}
				
				if(select_addon_download.size() !== 0){
					//select_addon_download.invoke('observe', 'click', this.getDownload.bindAsEventListener(this));
					select_addon_download.each(function(elem){
						elem.on("click", "a.addon_download", this.getDownload.bind(this));
					}.bind(this));
				}
				
				var sidedowns = $$('div.sidebar div#downbrowse');
				
				if (sidedowns.size() !== 0) {
					sidedownsid = 'div.sidebar div#downbrowse<%cssselect%>';
					this.FUNCTION_CACHE_MAPPING.set(sidedownsid, this.getRegistrationForm.bindAsEventListener(this));
					sidedowns.invoke('observe', 'click', this.FUNCTION_CACHE_MAPPING.get(sidedownsid));
					this.OBSERVER_CACHE.push(sidedownsid);
				}
				
				if($$('table.c_mod_lg').size() != 0){
					$$('table.c_mod_lg div.cause_button a.causeimg').invoke('observe', 'click', this.getRegistrationForm.bindAsEventListener(this));
					$$('table.c_mod_lg div.cause_button a.textlink').invoke('observe', 'click', this.getRegistrationForm.bindAsEventListener(this));
				}
			}
		},
		
		releaseObservers:function(){
			this.OBSERVER_CACHE.each(function(elem){				
				var result = /<%cssselect%>$/.test(elem);
				if(result){
					var replacedstr = elem.replace( /<%cssselect%>$/, '');
					if($$(replacedstr).size() !== 0){
						$$(replacedstr).invoke('stopObserving', 'click', this.FUNCTION_CACHE_MAPPING.get(elem));
					}
				}else{
					$(elem).stopObserving('click', this.FUNCTION_CACHE_MAPPING.get(elem));
				}
			}.bind(this))
		},
		
		resetObservers:function(){
			this.releaseObservers();
			this.addObservers();
		},
		
		notification:function(e){
			Event.stop(e);
			var data = $A(arguments);
			data.shift();
			var response = data[0];

			if (response == 'yes') {
				$('IE_instructions').show();
				$('down_instructions2').setStyle({
					top: (0) + 'px'
				});
				new Effect.Parallel([new Effect.Fade('dialog_notification', {
					sync: true
				}), new Effect.Appear('down_instructions2', {
					sync: true
				})], {
					duration: 1.0,
					afterFinish: function(){
						$('bool_notification').hide()
					}
				});
			}else if(response == 'no'){
				new Effect.Parallel([new Effect.Fade('heading_1', {
					sync: true
				}),new Effect.Fade('bool_notification', {
					sync: true
				}),new Effect.Fade('notification_arrow', {
					sync: true
				}), new Effect.Appear('heading_2', {
					sync: true
				}),new Effect.Appear('install_notification', {
					sync: true
				})], {
					duration: 1.0
				});
			}
		},
		closeOverlay:function(){
			var downid = ($('down_instructions').visible()) ? 'down_instructions' :'down_instructions2';
			$('down_instructions').setStyle({top:this.originaltoppos.down_instructions + 'px'});
			
			var browser_not_supported = $('browser_not_supported');
			var mac_not_supported = $('browser_instructions_nosupport_mac_butfirefox');
			
			new Effect.Parallel([
					new Effect.Fade('down_overlay', { sync: true }),
					new Effect.Fade(downid, { sync: true })
				],{
					duration:0.5,
					afterFinish:function(){
						$('down_instructions').setStyle({top:this.originaltoppos.down_instructions + 'px'});
						$('down_instructions2').setStyle({top:this.originaltoppos.down_instructions2 + 'px'});
						if($('causes_coverflow') != null){
							swfobject.embedSWF('/flash/coverflow.swf', 'causes_coverflow', 300, 210, '9.0.0', '', {xml_path: '/causes_v7.xml'}, {menu:false, scale:'noScale'});	
						}
						
						if(browser_not_supported != null){
							browser_not_supported.hide();
						}
			
						if(mac_not_supported != null){
							mac_not_supported.hide();
						}					
					}.bind(this)
				});
		},
		
		ifthemeSelected:function(e){
			this.themeDownload = true;

			this.getDownload(e);
		},
		
		testIfGeckoBrowser:function(){
			if(!Prototype.Browser.Gecko){
				var download_extension_button = $('download_extension_button');
				var addon_download = $$('.select_addon_download');
				var addon_button = $$('.addon_button');
				
				if(download_extension_button != null){
					download_extension_button.observe('click',this.cannotDownloadExtension.bind(this));
					download_extension_button.onclick = function() {return false;};
				}
				
				if(addon_download.size() !== 0){
					addon_download.invoke('observe', 'click', this.cannotDownloadExtension.bind(this));
					addon_download.each(function(elem){
						elem.onclick = function(){return false;}
						elem.removeClassName('gmlightbox');
					});
				}
				
				if(addon_button.size() !== 0){
					addon_button.invoke('observe', 'click', this.cannotDownloadExtension.bind(this));
					addon_button.each(function(elem){
						elem.onclick = function(){return false;}
						elem.removeClassName('gmlightbox');
					});
				}
			}		
		},
		
		testIfCanDownloadBrowser:function(){
			var ua = navigator.userAgent.toLowerCase(); 
			if((ua.indexOf('mac') != -1) && !Prototype.Browser.Gecko){
				var download_browser_button = $$('.submit_download');;
				if(download_browser_button.size() != 0){
					download_browser_button.invoke('observe', 'click',this.cannotDownloadBrowser.bind(this));
					download_browser_button.each(elem, function(){
						elem.onclick = function() {return false;};
					});		
				}
				return false;
			}else{
				return true;
			}		
		},
		
		setThemeInst:function(themeInst){
			this.themeInst = themeInst;
		},
		
		reloadGMCaptcha:function(){
			var processInfo = new AJAXgetinfo('customcaptcha',{source:'/gmasync/customcaptcha'},{pars:inputObj});
			AJAXgetinfo.addMethods({
					afterProcess:function(transport){
						var response = transport.responseText;
						var jsoneval = response.evalJSON();
						
						$$('div#GM_captcha_wrapper #GM_captcha_image').first().innerHTML = jsoneval.captchaimg;
						$$('form#form1 input#captchaid').first().value = jsoneval.captchaid;
							
					}.bind(this)
				});
			processInfo.getinfoGen2();		
		},	
		
		cannotDownloadExtension:function(evt){
			Event.stop(evt);
			var downid = ($('down_instructions').visible()) ? 'down_instructions' :'down_instructions2';
			
			if($('causes_coverflow') != null){
				swfobject.embedSWF('/flash/coverflow.swf', 'causes_coverflow', 300, 210, '9.0.0', '', {xml_path: '/causes_v7.xml'}, {menu:false, scale:'noScale', wmode:'transparent'});	
			}
			
			Effect.ScrollTo($(downid));
				 if (Prototype.Browser.IE) {
 					test = getPageDimensions();
 					$('down_overlay').setStyle({
 						position: 'absolute',
 						height: test.height
 					})
				}
				
				$('browser_not_supported').show();
				$('down_instructions2').show();
				var duration = 1.0;
				var instructid = 'down_instructions2';
				var top = $(instructid).getHeight();
				$('down_instructions2').setStyle({
					top: -top + 'px'
				});
				
				$("welcome_header2").down('b').update('');
				$("installing_is_easy2").update('Hello User!');
				$("divInstallingIsEasy2").setStyle({
					'color':'#000000',
					'fontSize':'16px'
				})
				
				Effect.Appear('down_overlay', {
					duration: 0.5,
					from: 0.0,
					to: 0.7
				});
				var moveby = $(instructid).getHeight();
				new Effect.Move($(instructid), {duration: 1.0,y: moveby});			
		},
		
		cannotDownloadBrowser:function(){
	        Effect.Appear('down_overlay', {
	                duration: 0.5,
	                from: 0.0,
	                to: 0.7
	        });
	        
			if($('causes_coverflow') != null){
				swfobject.embedSWF('/flash/coverflow.swf', 'causes_coverflow', 300, 210, '9.0.0', '', {xml_path: '/causes_v7.xml'}, {menu:false, scale:'noScale', wmode:'transparent'});	
			}
			                                        
	        $('browser_instructions_nosupport_mac_butfirefox').show();
	        var downinstruct = $('down_instructions2');
	        downinstruct.show();
	        var duration = 1.0;
	        var instructid = 'down_instructions2';
	        var top = $(instructid).getHeight();
	        $('down_instructions2').setStyle({
	                                top: -top + 'px'
	        });
	        $("welcome_header2").down('b').update('');
	        $("installing_is_easy2").update('Hello Mac User!');
	        $("divInstallingIsEasy2").setStyle({
	                'color':'#000000',
	                'fontSize':'16px'
	        });
	        
	        var moveby = downinstruct.getHeight();
	        new Effect.Move(downinstruct, {duration: 1.0,y: moveby});  
		},
		
		refreshFormFieldColors:function(){
			var formtypes = ['enrollform', 'sign_form_signup_page'];
			
			formtypes.each(function(elemstring){
				var element = $(elemstring);
				
				if(element != null){
					allinputstext = element.getInputs('text');
					allinputspass = element.getInputs('password');
					allinputstext.invoke('setStyle', {borderColor:'#D2D2FF'});
					allinputspass.invoke('setStyle', {borderColor:'#D2D2FF'});
				}
			});	
		},
		setPixelConfirm:function(url){
			body = $$('body')[0];
			if (body)
			{
    			pixel = new Element('img', {src:url, height:1, width:1, border:0, hspace:0, vspace:0});
    			body.appendChild(pixel);
			}
		},
		setIframeConfirm:function(url){
			var rand = 1 + Math.floor((Math.random()*32767));
			
			var iframe = new Element('iframe', {'id': 'conversion_frame_' + rand,
					'name':'conversion_frame_' + rand,
					'src':url,
					'height':'auto',
					'width':'auto',
					'frameborder': 0,
					'marginwidth':0,
					'style':'display:none;visibility:hidden;border:1px solid #0000b7;',
					'hspace':0,
					'vspace':0,
					'marginheight':0});
			var body = $$('body')[0];
		
			if(body){
				body.appendChild(iframe);
			}
		},
		setTrackingCall:function(){		
			if (this.actionTracking !== null) {
				if (this.actionTracking.iframe != undefined) {
					if(Object.isArray(this.actionTracking.iframe) && this.actionTracking.iframe != 0){
						$A(this.actionTracking.iframe).each(function(ifr){
							this.setIframeConfirm(ifr);
						}.bind(this));
					}
				}
				
				if (this.actionTracking.pixel != undefined) {
					if(Object.isArray(this.actionTracking.pixel) && this.actionTracking.pixel != 0){
						$A(this.actionTracking.pixel).each(function(pix){
							this.setPixelConfirm(pix);
						}.bind(this));
					}
				}
			}							
		},
				
		setTracking:function(tracking){
			this.actionTracking = tracking;
		},
		postDownload:function(data){			
			var response = data.responseText.evalJSON();
			this.FUNCTION_CACHE_MAPPING.get('loadinginst').fadeMask();
			this.refreshFormFieldColors();	
			
			if (!response.err) {
				this.finishDownload = true;								
				var popdiaginst = this.FUNCTION_CACHE_MAPPING.get('popupdiaginst');
				if(GM.validationobject != undefined){
					GM.validationobject.refresh();
				}
				
				if(response.confirm != undefined){
					this.setPixelConfirm(response.confirm);
				}
				
				if(response.tracking != undefined){
					this.setTracking(response.tracking);
				}
					
				if(popdiaginst != undefined){
					popdiaginst.terminateDialog();
				}
				
				if (response.type == this.productType.foxaddon) {
					this.extensionDownloadNotice(response);
				}
				
				if (response.type == this.productType.browser) {
					this.browserDownloadNotice(response);
				}else{
					if (response.redirect) {
						document.location = response.url;
						return;
					}else{
						return;
					}	
				}			
			}else{
				
				if(GM.validationobject != undefined){
					GM.validationobject.refresh();
				}
							
				$(response.errcontainer).addClassName('ui-state-error');
				var recaptcha = $('recaptcha_response_field');
				var infoGraphicExists = $('infographic');
				
				if(recaptcha != null){
					this.testandReloadCaptcha(response.errcollection);
				}else{
					this.reloadGMCaptcha();
				}				
				
				if(infoGraphicExists != null){
					//;
					if(this.scrollInstance != null){
						this.scrollInstance.cancel();
						this.scrollInstance = new Effect.ScrollTo($('right'));
					}
				}
				
				str = this.createErrorString(response.errcollection);
				
				$(response.errcontainer).update(str);
				$('down_overlay').hide();
				
				//TODO:throwing an error debug
				this.FUNCTION_CACHE_MAPPING.get('popupdiaginst').bodyOverflow().bind(this);	
			}
		},
		testandReloadCaptcha:function(collection){
			collection.each(function(elem){
				
				if(elem.field == 'recaptcha'){						
					var recaptach_reload = $('recaptcha_reload_btn');			
					
					if(recaptach_reload != null){
						Recaptcha.reload();
					}
					
					if(this.gmRecaptcha.empty() || this.gmRecaptcha == null){
						this.gmRecaptcha = $('gm_recaptcha');
					}
					
					this.gmRecaptcha.show();
				}	
			}.bind(this));
		},
		createErrorString:function(collection){
			str = '<ul class="errors">';				
			for(var i=0; i < collection.length; i++){
				var field =  collection[i]['field'];
				str += '<li>'+ collection[i]['errtext'] + '</li>';
				
				if($(field) != null){
					$(field).style.borderColor = '#FF0000';
				}										
			}				
			str += '</ul>';
			
			return str;
		},
		
		browserDownloadNotice:function(response){										
				var ua = navigator.userAgent;
				Object.extend(Prototype.Browser, {Chrome:ua.indexOf('Chrome') > -1});
				
				if (parseInt(response.errcollection.length) == 0) {
						if (Prototype.Browser.IE && response.type == 'browser') {
							$('bool_notification').show();
							$('heading_1').show();
							$('dialog_notification').down("div#notification_arrow").show();
							$('install_link').href = response.url;
							doEventDispatch($('install_link'));
							var instructid = 'dialog_notification';
							var duration = 1.0;
						}
						else 
							if (Prototype.Browser.Gecko && response.type != 'browser') {
								$('ff3_instructions').show();
								$('down_instructions').show();
								var instructid = 'down_instructions';
								var duration = 1.0;
							}
							else 
								if (Prototype.Browser.Opera && response.type != 'browser') {
									$('other_instructions').show();
									$('down_instructions').show();
									var instructid = 'down_instructions';
									var duration = 0.0;
								}
								else 
									if (response.type == 'browser' && Prototype.Browser.Chrome) {
										$('browser_instructions_chrome').show();
										$('down_instructions2').show();
										var duration = 1.0;
										var instructid = 'down_instructions2';
										var top = $(instructid).getHeight();
										$('down_instructions2').setStyle({
											top: -top + 'px'
										});
									}
									else 
										if (response.type == 'browser' && Prototype.Browser.Opera) {
											$('browser_instructions').show();
											$('down_instructions2').show();
											var duration = 1.0;
											var instructid = 'down_instructions2';
										}
										else 
											if (response.type == 'browser' && !Prototype.Browser.IE && !Prototype.Browser.Gecko) {
												$('browser_instructions').show();
												$('down_instructions2').show();
												var duration = 1.0;
												var instructid = 'down_instructions2';
											}
											else 
												if (response.type == 'browser' && Prototype.Browser.Gecko) {
													$('browser_instructions_ff').show();
													$('down_instructions2').show();
													var duration = 1.0;
													var instructid = 'down_instructions2';
													$('browser_instructions_ff').down('span#productname').update(response.filename); 
													var top = $(instructid).getHeight();
													$('down_instructions2').setStyle({
														top: -top + 'px'
													});
												}
												else {
													$('other_instructions').show();
													$('down_instructions').show();
													var instructid = 'down_instructions';
													var duration = 1.0;
												}
						//document.location = response.url;

						window.location = response.url;
						
											   
    					//window.open(response.url,'Download');  
					}else{
						if(response.err.in_array('is_mac')){
							
								$('browser_instructions_nosupport_mac_butfirefox').show();
								$('down_instructions2').show();
								var duration = 1.0;
								var instructid = 'down_instructions2';
								var top = $(instructid).getHeight();
								$('down_instructions2').setStyle({
											top: -top + 'px'
								});
								$("welcome_header2").down('b').update('');
								$("installing_is_easy2").update('Hello Mac User!');
								$("divInstallingIsEasy2").setStyle({
									'color':'#000000',
									'fontSize':'16px'
								})
							}
					}
					
					$('down_overlay').show();
					/*Effect.Appear('down_overlay', {
						duration: 0.5,
						from: 0.0,
						to: 0.7
					});*/
			
					//$$('div.main_content').invoke('hide');
					//$$('div.footer').invoke('hide');

					if (Prototype.Browser.IE) {
						Effect.Appear(instructid, {
	 						duration: duration
	 				 	 });
					}
					else {
						var moveby = $(instructid).getHeight();
						new Effect.Move($(instructid), {duration: 1.0,y: moveby});
					}
					waitforbardown(1, orgheight);
		},
		
		extensionDownloadNotice:function(response){
			
			if (window.innerHeight) {
				orgheight = window.innerHeight;
			}
			else 
				if (document.all) {
					orgheight = document.body.clientHeight
				}
			
			if (Prototype.Browser.Gecko) {
				$('ff3_instructions').show();
				var instructid = 'down_instructions';
				var duration = 1.0;
			}else{
				return;
			}
						
			$('down_overlay').show();
			
			//$$('div.main_content').invoke('hide');
			//$$('div.footer').invoke('hide');
					
			Effect.Appear(instructid, {
				duration: duration
			});
			
			var params = {
		    	"GlobalMojo": { URL: response.url,
		             		IconURL: response.iconurl,
		             		toString: function () { return this.URL; }
		    		}
		  	};
		  	InstallTrigger.install(params);		  
			
			waitforbardown(1, orgheight);
		},
		
		yahoodefaultcheck:function(evt){	
		 	var ele = evt.element();
			
			if(!ele.checked){
				$('down_overlay').setStyle({
					zIndex:10005
				});
				
				//Effect.Appear('down_overlay', {duration:0.5, from:0.0, to:0.8});
				var engine_wrap = $('search_engine_wrap');
				if(window.innerHeight && window.innerWidth){
					winheight = window.innerHeight
					winwidth = window.innerWidth;
				} else {
					winheight = document.body.offsetHeight;
					winwidth = document.body.offsetWidth;
				}
				
				confirmheight = $('search_engine_wrap').getHeight();
				confirmwidth = $('search_engine_wrap').getWidth();
				
				var left = (winwidth - confirmwidth)/2;	
				var top = (winheight - confirmheight)/2;
				var position = '';
				if (Prototype.Browser.IE) {
					position = 'absolute';
				}else{
					position = 'fixed';
				}
				engine_wrap.show();
				engine_wrap.setStyle({
								position:position,
								left:left + 'px',
								zIndex:'10010'
							});
				var enginetop = $('search_engine_wrap').getStyle('top');			
				var diffheight = top - (parseInt(enginetop));
				new Effect.Move($('search_engine_wrap'), {duration:0.8, y:diffheight});				
			}
		},
		
		defaultengineselected:function(){
			var engine_wrap = $('search_engine_wrap');
			var enginetop = $('search_engine_wrap').getStyle('top');
			var diffheight = -300 - (parseInt(enginetop));
			
			new Effect.Move($('search_engine_wrap'), {
					duration: 0.5,
					y: diffheight
			});
			new Effect.Parallel([
					
					new Effect.Fade('search_engine_wrap', { sync: true })
					],{
						duration:0.5,
						afterFinish:function(){
							engine_wrap.setStyle({
								top:'-300px'
							});		
						}
					});
			$('down_overlay').setStyle({
					zIndex:1000
			});
		},
		
		activateCapture:function(e){
			
			if(this.profileSubmitted){
				this.submitProfile(e);
				return;	
			}
			
			var diagActions = {
				actionparams : {download:this},
				okAction:function(actparams){
					var loading = new Loading('gm_popup_dialog', 'world', 'Preparing Download...', {animations:false}, {width:250});
					loading.modalMask();
					this.gmRecaptcha = $('gm_recaptcha_clone');
					
					this.FUNCTION_CACHE_MAPPING.get('popupdiaginst_captcha').terminateDialog();
					$('gm_recaptcha').replace(this.gmRecaptcha.hide());
					actparams.evalue.element().writeAttribute('formsubmit', 'form1');
					actparams.download.submitProfile(actparams.evalue);
				}.bind(this)
			}
					
			//overlib.disabletip(elem.identify());
			
			var message = $('gm_recaptcha').clone(true).show();
			message.id = 'gm_recaptcha_clone';	
			params = {header:'Are You Human?', message:message, actions:diagActions, doverlay:'down_overlay', buttonnames:{'ok':'Finish'}};
			options = {width:500, buttons:['ok', 'close2'], override:true, overflow:true, animations:false};
					
			var popdiag = new Popup_dialog(options, params);
			this.FUNCTION_CACHE_MAPPING.set('popupdiaginst_captcha', popdiag);
		},
		htmlspecialchars_decode:function (string, quote_style) {
		    // Convert special HTML entities back to characters  
		    // 
		    // version: 1006.1915
		    // discuss at: http://phpjs.org/functions/htmlspecialchars_decode    // +   original by: Mirek Slugen
		    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		    // +   bugfixed by: Mateusz "loonquawl" Zalega
		    // +      input by: ReverseSyntax
		    // +      input by: Slawomir Kaniecki    // +      input by: Scott Cariss
		    // +      input by: Francois
		    // +   bugfixed by: Onno Marsman
		    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
		    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)    // +      input by: Ratheous
		    // +      input by: Mailfaker (http://www.weedem.fr/)
		    // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
		    // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
		    // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');    // *     returns 1: '<p>this -> &quot;</p>'
		    // *     example 2: htmlspecialchars_decode("&amp;quot;");
		    // *     returns 2: '&quot;'
		    var optTemp = 0, i = 0, noquotes= false;
		    if (typeof quote_style === 'undefined') {        quote_style = 2;
		    }
		    string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
		    var OPTS = {
		        'ENT_NOQUOTES': 0,        'ENT_HTML_QUOTE_SINGLE' : 1,
		        'ENT_HTML_QUOTE_DOUBLE' : 2,
		        'ENT_COMPAT': 2,
		        'ENT_QUOTES': 3,
		        'ENT_IGNORE' : 4    };
		    if (quote_style === 0) {
		        noquotes = true;
		    }
		    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags        quote_style = [].concat(quote_style);
		        for (i=0; i < quote_style.length; i++) {
		            // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
		            if (OPTS[quote_style[i]] === 0) {
		                noquotes = true;            }
		            else if (OPTS[quote_style[i]]) {
		                optTemp = optTemp | OPTS[quote_style[i]];
		            }
		        }        quote_style = optTemp;
		    }
		    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
		        string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
		        // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP    
			}
		    if (!noquotes) {
		        string = string.replace(/&quot;/g, '"');
		    }
		    // Put this in last place to avoid escape being double-decoded    string = string.replace(/&amp;/g, '&');
		 
		    return string;
		}						
}


