/* Write modal pre-requisites to DOM */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function createModal(fcidx) {
 /* fcidx = Flow Control InDeX */
	
	if(fcidx==undefined) fcidx = 1;

	if(fcidx ==0){
		
		strHTML = '<div id="modalContainer" style="display:none;">';
		if (browsertest){
		strHTML += '	<div id="regFormContainer" class="csp_window csp_initialOffer_bg" style="position:absolute; padding-left:27px;">';
		}else {
		strHTML += '	<div id="regFormContainer" class="csp_window csp_initialOffer_bg" style="position:absolute;">';
		}
		strHTML += '		<div id="regFormWrapper" class="csp_initialOffer_inlay" >';
		strHTML += '			<img src="/ChevySilverado/images/io/New2011Silverado_h1.jpg" /><img src="/ChevySilverado/images/io/FantasyFishing_logo.jpg" />';
		strHTML += '			<img src="/ChevySilverado/images/io/ChevyOffer_h2.jpg" class="csp_imgblock" />';
		strHTML += '			<img src="/ChevySilverado/images/io/ChevyOffer_h3.jpg" class="csp_imgblock" />';
		strHTML += '			<a href="javascript:void(0);" onclick="csp_tracking(\'SubmitIO\');csp_flowcontrol(1);"><img src="/ChevySilverado/images/io/EnterNow_btn.jpg" class="csp_imgblock" border="0" /></a>';
		strHTML += '			<a href="javascript:void(0);" onclick="$(\'#backdrop, .csp_window\').hide();"><img src="/ChevySilverado/images/io/NoThanks_btn.jpg" class="csp_imgblock" border="0" /></a>';
		strHTML += '			<img src="/ChevySilverado/images/io/ComingSummer2010_h5.jpg" class="csp_imgblock" style="margin-top:137px;" />';
		strHTML += '		</div><!-- #regFormWrapper -->';
		strHTML += '	</div><!-- #regFormContainer -->';
		strHTML += '    <div id="backdrop" onclick="alert(\'backdropclicked\');"></div>';
		strHTML += '</div><!-- #modalcontainer -->';

	} else {
		strHTML = '<div id="modalContainer" style="display:none;">';
		if (browsertest) {
		strHTML += '	<div id="regFormContainer" class="csp_window csp_regForm_bg" style="position:absolute; padding-left:27px;">';
		} else {
		strHTML += '	<div id="regFormContainer" class="csp_window csp_regForm_bg" style="position:absolute;">';
		}
		strHTML += '		<div id="regFormWrapper" class="" >';


		strHTML += '		</div><!-- #regFormWrapper -->';
		strHTML += '	</div><!-- #regFormContainer -->';
		strHTML += '    <div id="backdrop" onclick="alert(\'backdropclicked\');"></div>';
		strHTML += '</div><!-- #modalcontainer -->';
	
	}


	strCSS = '<link rel="StyleSheet" href="/ChevySilverado/m_style.css" type="text/css" media="screen">';
	
	$(document).ready(function(){
		$('body').prepend(strHTML).prepend(strCSS);

/* Deprecated -  Linktarget & location will write a link to the page to open the modal rather than opening it right when openModal() is called */
// 		if(linktarget){
// 			strLink = '<a href="javascript:void(0);" onclick="openModal();" style="position:absolute;border">Chevy Registration</a>';
// 			if(location=='append'){
// 				$('#'+linktarget).append(strLink);
// 			}else{
// 				$('#'+linktarget).prepend(strLink);
// 			}
// 		} else {
// 			$(document).ready(function(){
// 				setTimeout('openModal()',2000);
// 			});
// 		}
		if(!fcidx){
		
		}
		
		$(document).ready(function(){
			setTimeout('openModal();csp_flowcontrol('+fcidx+')',2000);
		});

	});
}

/* Image Pre-loader */
function preLoadImages(){
	IMGiomatrix = ['InitialOffer_bg-large.png','InitialOffer_inlay.jpg','ChevyOffer_h2.jpg'];
	IMGmatrix = ['regForm_bg-large.png','Questionnaire_h2.jpg','New2011Silverado_h1.jpg',
		'EnterNow-disabled_btn.jpg','Question-cont-left_bg.jpg','formContainer_bg.jpg','hint3_popup_image.jpg','question-unselected_li.jpg','EnterNow-enabled_btn.jpg','Question-cont-mid_bg.jpg','Silverado_img.jpg','hint-close_btn.jpg','FantasyFishing_logo.jpg','Question-cont-right_bg.jpg','Submit_btn.gif','hint1_popup_image.jpg','Question-hint_btn.jpg','Submit_btn.jpg','hint2_popup_image.jpg','question-selected_li.jpg'];
	IMGtymatrix = ['Facebook_btn.jpg','GetFirstLook_h2.jpg','MyTeamStanding_h3.jpg','ThankYouContainer_bg.jpg','FantasyFishing_btn.jpg','LearnMore2011Silverado_btn.jpg','New2011Silverado_h1.jpg','ThankYou_h2.jpg','FantasyFishing_logo.jpg','LearnMoreSilverado_btn.jpg','Submit_btn.gif'];
	io = new Image();
	for (i=0;i<IMGiomatrix.length;i++){
		iname = 'io' + IMGiomatrix[i].split('.')[0];
		io.src = '/ChevySilverado/images/io/'+IMGiomatrix[i];
	}
	for (i=0;i<IMGmatrix.length;i++){
		iname = 'io' + IMGmatrix[i].split('.')[0];
		io.src = '/ChevySilverado/images/'+IMGmatrix[i];
	}
	for (i=0;i<IMGtymatrix.length;i++){
		iname = 'io' + IMGmatrix[i].split('.')[0];
		io.src = '/ChevySilverado/images/ty/'+IMGtymatrix[i];
	}
}

/* Open the Chevy Silverado Promo (csp) Modal window */
function openModal(){
	var mId = '#regFormContainer';
	$('#modalContainer').css({'display':'block'});
	// Necessary for fixed position

// 	$(mId).css('top', '150px');
// 	$(mId).css('left', '150px');


//	$(mId).css('top', $(window).height()/2-$(mId).height()/2);
//	$(mId).css('left', $(window).width()/2-$(mId).width()/2);
	$(mId).show();

	if($('.csp_initialOffer_inlay').length>0) csp_tracking('viewIO');
}  

/* Flow Control - Loads each step in CSP process. Insert a close button */
fc = ['InitialOffer','Registration','Questionnaire','ThankYou'];
closebtn = '<div id="popclose">close</' + 'div>';
function csp_flowcontrol(idx){
	if($('input[name=formSubmitted]').val()==true && idx == 2){
		var params = {method: 'saveUserData', formFields: $('#CSPromo_form').serialize(), _ct: new Date().getTime()};
		$.ajax({
					type: "POST",
					url: "/ChevySilverado/ajax.cfm",
					data: params,
					dataType: "json",
					error: function(error_msg){
						alert("error");
						alert(error_msg);
					},
					failure: function() {
						alert("Error occured while attempting to save the user data.");
					},
					success: function(response)
					{
						
					}
		});
	}
	//Need to add tracking for form submission & questionaaire submission 
	// bUseHTML = $('#protocol').length;
	if(typeof(uid)=='undefined'){
		uid = 0;
	}
	$.get('/ChevySilverado/register_ajax.cfm',
		{method:fc[idx],protocol:'ajax',r:Math.floor(Math.random()*3431),uid:uid},
		function(data){
			$('#regFormWrapper').html(data);
			if(idx == 1) $('#regFormContainer').append(closebtn);
			if($('#popclose')) initPopClose();
			if(idx == 1) swapBG();
		}
	);
}

/* Call multiple functions from short-hand conditions (usually from onll */
function callfn(){
	if(!arguments.length) return false;
	for(i=0;i<arguments.length;i++){
		eval(arguments[i]);	
	}
}

/* Handle all trackable events */
function csp_tracking(e){

	track_method="trackevent";
	if(e.id){
		track_item = e.id;
	}else if($(e).attr("href")){
		track_item = $(e).attr("href");
	}else if(typeof(e)=="string"){
		track_item = e;
	} else {
		track_item = "unknown";
	}
	if(arguments.length>1){
		track_item = "adtracker=b%3D" + arguments[0] + "&z%3D" + arguments[1];
		track_method="adtracking";
	}
	
	params = {method: track_method, trackitem: track_item, _ct: new Date().getTime()};
	$.ajax({
		type: "POST",
		url: "/ChevySilverado/ajax.cfm",
		data: params,
		dataType: "json",
		error: function(error_msg){
			//alert("error");
			//alert(error_msg);
		},
		failure: function() {
			//alert("Error occured while attempting to save the user data.");
		},
		success: function(response) {
			
		}
	});

}


/* Handle all trackable events */
// function csp_tracking(e){
// 	strQry='';
// 	trackObj = new Object;
// 	if(arguments.length>1){
// 		strQry = '?adtracker=b%3D' + arguments[0] + '&z%3D' + arguments[1];
// 		trackObj.key = 'adtracking';
// 	}
// 	if(e.id){
// 		trackObj.key = e.id;
// 	}else if($(e).attr("href")){
// 		trackObj.key = $(e).attr("href");
// 	}else if(typeof(e)=='string'){
// 		trackObj.key = e;
// 	} else {
// 		trackObj.key = 'unknown';
// 	}
// 	$.post('/ChevySilverado/tracking.cfm',{		
// 		trackmethod:'trackevent',
// 		strQry: strQry,
// 		data:trackObj.key
// 		}
// 	);
// }


/* Swap out the Initial Offer background with the "form" background */
function swapBG(){
	if($('.csp_initialOffer_inlay').length){
		$('#regFormContainer').addClass('csp_regForm_bg').removeClass('csp_initialOffer_bg');
		$('#regFormWrapper').removeClass('csp_initialOffer_inlay');
	}
}

/* Enable the modal closeer */
function initPopClose(){
	$('#popclose').click(function(){
		$('#backdrop, .csp_window').hide();		
	})
}

/* Just checks for IE7 for now */
function browsertest(){
	arrbrowser = ['MSIE 7']
	for(i=0;i<arrbrowser.length;i++){
		if(navigator.userAgent.indexOf(arrbrowser[i]) != -1) return true;
	}
	return false;
}


/* Start the hint roll over events */
function initHints() {
	/* The overlay allows a mouseout event to close the hint winodw */
	$('.hint_overlay').each(function(){
		//hintid = '#'+this.id.split('-')[0]+'-'+this.id.split('-')[1];
		$(this).mouseout(function(){
			hintid = '#'+this.id.split('-')[0]+'-'+this.id.split('-')[1];
			$(hintid).hide().css({'width':'5px'});
			$(this).css({'width':'5px'});
		})
	})	


	/* The hint button activates the hint window and changes the size of the container & wrappers */
	$('.hint_btn').each(function(){
		$(this).mouseover(function(){
			e = $(this).attr('href');
			if(browsertest()){
				$('.hint_container').hide().css({'width':'5px'});
				z = e.split('#')[1];
				$('#'+z).css({'width':'570px'}).show();
				$('#'+z+'-overlay').css({'width':'570px'});
			}else{
				$('.hint_container').hide().css({'width':'5px'});
				$(e).css({'width':'570px'}).show();
				$(e+'-overlay').css({'width':'570px'});
			}
		});
	});

	/* Add click event to each answer & track the number of questions answered.  */
	$('.answer_options').each(function(idx,ele){
		$(this).children().each(function(idx2,ele2){
			$(ele2).click(function(){
				displayResult(ele2);
				$(ele2).addClass('selected');
				if($('.selected').length==3){
					$('#EnterNow_btn_img').attr({'src':'/chevySilverado/images/EnterNow-enabled_btn.jpg'});
				}

			});
		})
	});
}

/* Display correct & incorrect answers to a question */
function displayResult(e){
	qset = 'q'+e.id.substring(1,2);
	amatrix = {'q1':'a1-2','q2':'b2-1','q3':'c3-3'};
	$('#'+qset+'answer_options').children().removeClass('selected').addClass('red');
	$('#'+amatrix[qset]).addClass('green');
}


/* Youtube Video navigation */
yt = ['',
	'<object width="409" height="254" onclick="csp_tracking(this);"><param name="movie" value="htt'+'p://www.youtube.com/v/gRyi4ai4t1A&hl=en&fs=1&autoplay=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>	<embed src="htt'+'p://www.youtube.com/v/gRyi4ai4t1A&hl=en&fs=1&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="409" height="254" onclick=""></embed></object>',
	'<object width="409" height="254" onclick="csp_tracking(this);"><param name="movie" value="htt'+'p://www.youtube.com/v/-uZ2C0nGsFY&hl=en&fs=1&autoplay=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>	<embed src="htt'+'p://www.youtube.com/v/-uZ2C0nGsFY&hl=en&fs=1&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="409" height="254" onclick=""></embed></object>',
	'<object width="409" height="254" onclick="csp_tracking(this);"><param name="movie" value="htt'+'p://www.youtube.com/v/HAe5q4gGwrw&hl=en&fs=1&autoplay=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>	<embed src="htt'+'p://www.youtube.com/v/HAe5q4gGwrw&hl=en&fs=1&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="409" height="254" onclick=""></embed></object>',
	'<object width="409" height="254" onclick="csp_tracking(this);"><param name="movie" value="htt'+'p://www.youtube.com/v/fckqWn608SA&hl=en&fs=1&autoplay=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>	<embed src="htt'+'p://www.youtube.com/v/fckqWn608SA&hl=en&fs=1&autoplay=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="409" height="254" onclick=""></embed></object>'
	]
function initYoutube(){
	document.getElementById('videoplayer').innerHTML = yt[1];
//	$('#videoplayer').html(yt[0]);
}

function swapvideo() {
	vid = arguments[0].id.split('_')[1];
	$('#playlist .videobtn_container').children().removeClass('selected');
	$('#'+arguments[0].id).children().addClass('selected');
	document.getElementById('videoplayer').innerHTML = yt[vid];
//	$('#videoplayer').html(yt[vid]);
}

/* Old Questionaaire Logic */
//  			function displayResult(e){
// 				qset = 'q'+e.id.substring(1,2);
//  				amatrix = {'q1':'a1-2','q2':'b2-1','q3':'c3-3'};
//  				$('#'+qset+'answer_options').children().removeClass('selected').removeClass('green').removeClass('red');
// 				if(e.id == amatrix[qset]){
//  					$(e).addClass('green');
// 				} else {
// 					$('#'+amatrix[qset]).addClass('green');
// 					$(e).addClass('red');
// 				}
//  			}

/*
**********************************************************************
****************** Form Validation ************************************/

/*
Ultimate Age calculator script- By JavaScript Kit (http://www.javascriptkit.com)
Over 200+ free scripts here!
Credit must stay intact for use
*/

var one_day=1000*60*60*24
var one_month=1000*60*60*24*30
var one_year=1000*60*60*24*30*12

function displayage(yr, mon, day, unit, decimal, round){
	today=new Date()
	var pastdate=new Date(yr, mon-1, day)
	
	var countunit=unit
	var decimals=decimal
	var rounding=round
	
	finalunit=(countunit=="days")? one_day : (countunit=="months")? one_month : one_year
	decimals=(decimals<=0)? 1 : decimals*10
	
	if (unit!="years"){
	if (rounding=="rounddown")
	Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals+" "+countunit
	else
	Math.ceil((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals+" "+countunit
	}
	else{
	yearspast=today.getFullYear()-yr-1
	tail=(today.getMonth()>mon-1 || today.getMonth()==mon-1 && today.getDate()>=day)? 1 : 0
	pastdate.setFullYear(today.getFullYear())
	pastdate2=new Date(today.getFullYear()-1, mon-1, day)
	tail=(tail==1)? tail+Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals : Math.floor((today.getTime()-pastdate2.getTime())/(finalunit)*decimals)/decimals
	return(yearspast+tail);
	}
}


function emailCheck (emailStr) {
	var emailPat = /^(.+)@(.+)$/
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars = "\[^\\s" + specialChars + "\]"
	var quotedUser = "(\"[^\"]*\")"
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom = validChars + '+'
	var word = "(" + atom + "|" + quotedUser + ")"
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray = emailStr.match(emailPat)
	if (matchArray == null) {
		//return("* E-mail address seems incorrect (check @ and .'s)")
	   return false;
	}
	var user = matchArray[1]
	var domain = matchArray[2]
	
	if (user.match(userPat) == null) {
		//return("* The username portion of the e-mail address doesn't seem to be valid.")			
	   return false;
	}

	var IPArray = domain.match(ipDomainPat)
	if (IPArray != null) {
		  for (var i=1; i<=4; i++) {
		    if (IPArray[i]>255) {
				//return("* E-mail destination IP address is invalid!")
			   return false;
		    }
	    }
	    return true;
	}
	
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//return("* The domain name on your e-mail address doesn't seem to be valid.")
	   return false;

	}
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || 
	    domArr[domArr.length-1].length>3) {
	  // return("* E-mail address must end in a three-letter domain, or two letter country.")
  	   return false;

	}
	
	if (len<2) {
	   //return("* E-mail address is missing a hostname!")
	   return false;
	}
	return true;
}


function validateCSPform(){
	objForm = 
		{'start':function(){
			void(0);
		},'formElements':{
			'firstName':{'type':'text','message':'First name','vtype':'string'},
			'lastName':{'type':'text','message':'Last name','vtype':'string'},
			'email':{'type':'text','message':'Valid email address','vtype':'email'},
			'address':{'type':'text','message':'Mailing Address','vtype':'string'},
			'city':{'type':'text','message':'City','vtype':'string'},
			'state':{'type':'select','message':'State','vtype':'select'},
			'zip':{'type':'text','message':'Zip code','vtype':'string'},
			'phone1':{'type':'text','message':'Valid phone number','vtype':'phone'},
			'purchaseTimelineId':{'type':'select','message':'Expected purchase/lease timeframe','vtype':'select'},
			'dateOfBirthMonth':{'type':'select','message':'Birth month','vtype':'select'},
			'dateOfBirthDay':{'type':'select','message':'Birth day','vtype':'select'},
			'dateOfBirthYear':{'type':'select','message':'Birth year','vtype':'select'},
			'vehicle_1':{'type':'select','message':'1 or more vehicle choices','vtype':'minselect'},
			'dealerContact':{'type':'radio','message':'Contact from a Chevy Dealership','vtype':'boolean'},
			'isValidBirthDate':{'type':'','message':'Valid Birthdate.','vtype':'validDate'}
		},'validate':{
			'string':function(fe){
				if($('input[name='+fe+']').val().length==0){ return false }else{ return true }
			},
			'select':function(fe){
				if($('select[name='+fe+'] option:selected').val()!=''){ return true }else{ return false }
			},
			'email':function(fe){
				em = $('input[name='+fe+']').val();
				$('input[name='+fe+']').val(em.trim());
				return emailCheck(em.trim());
			},
			'phone':function(fe){
				ph = $('input[name='+fe+']').val().replace(/[\(\)\.\-\ ]/g, '');
				if(ph.length>9 && ph.length<12 && !isNaN(parseInt(ph))) { return true }else{ return false }
			},
			'boolean':function(fe){
				if($('input:radio[name='+fe+']:checked').val()!=undefined) { return true }else{ return false }
			},
			'minselect':function(fe){
				fld = fe.split('_')[0]+'_';idx = fe.split('_')[1];bloop = true;
				while(bloop){
					if($('select[name='+fld+idx+'] option:selected').val()!='') return true ;
					idx++;
					if(!$('select[name=' + fld + idx+']').length){
						bloop = false;
					}
				}
				return false;
			},
			'validDate':function(fe){
				if(!objForm.bPassed){ return true; } //Only check for a valid birthdate if the fields are selected.
				year = $('select[name=dateOfBirthYear] option:selected').val();
				month = $('select[name=dateOfBirthMonth] option:selected').val();
				date = $('select[name=dateOfBirthDay] option:selected').val();
				if ((month==4)||(month==6)||(month==9)||(month==11)) {
					if (date > 30) { return false; }
				}
				if (month==2) {
					if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { //leap year
						if (date > 29){ return false; }
					} else {
						if (date > 28) { return false;} 
					}
				}
				return true;
			}
		},'strError':'The following information is required:\n','bPassed':true
	}

	
	for (i in objForm.formElements){
		node = objForm.formElements[i];
		btmp = objForm.validate[node.vtype](i);
		if(!btmp) {
			objForm.strError += node.message + '\n'
			objForm.bPassed = false;
		}
	}

	if(parseInt(displayage($('select[name=dateOfBirthYear] option:selected').val(), $('select[name=dateOfBirthMonth] option:selected').val()-1, $('select[name=dateOfBirthDay] option:selected').val(), 'years', 0, 'rounddown'))<21){
		objForm.bPassed = false;
		objForm.strError = 'You must be at least 21 years old to participate'
	}
	
	if (!objForm.bPassed) alert(objForm.strError);
		return objForm.bPassed;
}

