var web_server;
var website_id;
var worksite_group;
var employer_id;
var quoter;
var session_id;
var quote_ref_id;
var js_last_run;


//add a Bookmark
function CreateBookmarkLink(lang) {
    if (lang == 'generic'){
        var title = "Kanetix: Insurance Quotes Comparison Service"; 
    }else{
        var title = "Kanetix: Service de comparaison de soumissions d'assurance";
    }
    
    var os;
    if(document.all)
        os = "ie";
    
    var url = "http://www.kanetix.ca/bookmark";
    if (window.sidebar) { 
        window.sidebar.addPanel(title, url,"");
    } else if(window.external ){
        window.external.AddFavorite( url, title); }
    else if(window.opera && window.print) { 
        return true; }
 }

/* Event handler */
function addEvent(obj, evType, fn) {
	if (obj != null) {
        if (obj.addEventListener) {
		    obj.addEventListener(evType, fn, false);	// maybe set to true
    		return true; 
    	} else if (obj.attachEvent) {
	    	var r = obj.attachEvent("on"+evType, fn); 
		    return r; 
    	} else {
	    	return false; 
    	}
    }
}

function email_us() {
	var secure_url = web_server;
	secure_url = secure_url.replace("http:", "https:");
	window.open(secure_url + '/website/qb_templates/html_template.html?quoter=blank&page_name=email_us_questions.html&session_id=' + session_id,'email_us','scrollbars=yes,width=675,height=500');
}

function privacy_policy() {
	window.open('/privacy-policy','Privacy','scrollbars=yes,resizable=yes,toolbar=no,width=720,height=600');
}

function rr_signup() {
	var secure_url = web_server;
	secure_url = secure_url.replace("http:", "https:");
	window.open(secure_url +'/rr_signup','Subscribe','scrollbars=no,width=475,height=275');
}

function getElementsByClass(searchClass, node, tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

var errorStep;
function errorHandler(msg, source, quoter, line) {
	var eForm = document.createElement("form");
	eForm.setAttribute("action","/website/_template.html");
	eForm.setAttribute("method","POST");
	eForm.setAttribute("id","js_error_form");
	addHiddenInput(eForm,"page_name","js_error.html");


	addHiddenInput(eForm,"quoter",quoter);
	addHiddenInput(eForm,"session_id",session_id);
	addHiddenInput(eForm,"quote_ref_id",quote_ref_id);
	
//	if (!form.js_msg) {
		addHiddenInput(eForm, "js_msg", msg);
		addHiddenInput(eForm, "js_source", source);
		addHiddenInput(eForm, "js_last_run", line);
		addHiddenInput(eForm, "js_quoter", quoter);
		document.getElementById('page').appendChild(eForm);
		document.getElementById('js_error_form').submit();
//	}
}

function addHiddenInput(form,iName,iValue) {
	addField(form,"hidden",iName,iValue);
}
function addField(form, fieldType, fieldName, fieldValue) {
	var input = document.createElement('INPUT');
	input.setAttribute('type', fieldType);
	input.setAttribute('name', fieldName);
	input.setAttribute('value', fieldValue);
	form.appendChild(input);
}
function getField (form, fieldName) {
	if (!document.all)
		return form[fieldName];
	else  // IE has a bug not adding dynamically created field 
		// as named properties so we loop through the elements array 
		for (var e = 0; e < form.elements.length; e++)
			if (form.elements[e].name == fieldName)
				return form.elements[e];
	return null;
}
 
	
function modifyStep(quoter,step) {
	var myForm = document.createElement("form");
	myForm.setAttribute("action","/car-insurance");
	myForm.setAttribute("method","POST");
	myForm.setAttribute("id","switch_step_form");
	addHiddenInput(myForm,"AID","modify_"+step);
	addHiddenInput(myForm,"quoter",quoter);
	addHiddenInput(myForm,"session_id",session_id);
	addHiddenInput(myForm,"quote_ref_id",quote_ref_id);
	
	if (confirm("All changes to the current page will be lost.  Continue?")) {
		document.getElementById('page').appendChild(myForm);
		document.getElementById('switch_step_form').submit();
	}

	return false;
}

//Global functions to show and hide span/form elements
//makes an object disappear
function disappear(obj) {
	var elem = document.getElementById(obj);
	if (elem) {
		elem.style.display = "none";
	}
}
//makes an object appear
function appear(obj) {
	var elem = document.getElementById(obj);
	if (elem) {
		elem.style.display = "block";
	}
}

function invisible(obj) {
	var elem = document.getElementById(obj);
	if (elem) {
		elem.style.visibility = "hidden";
	}
}

function visible(obj) {
	var elem = document.getElementById(obj);
	if (elem) {
		elem.style.visibility = "visible";
	}
}
//checks if an object is hidden
function isDisappear(obj) {
	var elem = document.getElementById(obj);
	if (elem) {
		if (elem.style.display == "none") {
 			return true; 
		}
	}
	return false; 
}

// tabs to the next box
var last_auto_tab_value;
function auto_tab(p1, p2) {
	if (p1.value.length == p1.maxLength) {
		if (last_auto_tab_value != p1.name + "::" + p1.value) {
			last_auto_tab_value = p1.name + "::" + p1.value;
			p2.focus();
		}
	}
}

var format_prev_length;
function initFormatInputs(){
	var inputs = getElementsByClass("format_number", null, "input");
	var c = 0;
	for (c; c != inputs.length; c++){
		if(!inputs[c].format_number_enabled){
			addEvent(inputs[c], "keyup", handle_format_price);
			addEvent(inputs[c], "keydown", calc_length);		 
			//now deal with maxLength - have to increase it to accommodate commas
			var maxl = parseInt(inputs[c].getAttribute("maxLength"));
			if(!isNaN(maxl)){		 	
				var commas = 0;
				if(maxl % 3 == 0){
					commas = maxl/3-1 > 0 ? maxl/3-1 : 0;
				}else{
					commas = Math.floor(maxl/3);
				}
				inputs[c].setAttribute("maxLength", maxl+commas);
			}
			//format values in input boxes if present
			if(inputs[c].value != null){
				format_number_misc(inputs[c]);
			}
			inputs[c].format_number_enabled = true;
		}
	}
}
addEvent(window, 'load', initFormatInputs);

function handle_format_price(event){
	var element = (event.target) ? event.target : event.srcElement;
	format_number_misc(element, event);
}

function calc_length(event){
	var e = (event.target) ? event.target : event.srcElement;
	format_prev_length = e.value.toString().replace(/[^\d]/g,'').length;
}

//can also call it inside other functions - omit event parameter obviously
function format_number_misc(e, event) {
	var num = e.value.toString().replace(/[^\d]/g,'');
	var maxl = e.getAttribute("maxlength");
	if(event){
		if (event.keyCode >= 37 && event.keyCode <= 40)
 			return;
 		var pure_length = num.length;
 		//have to decrease length of the string if user was pressing a number key for a long time
 		var maxl = parseInt(e.getAttribute("maxLength"));
		if(!isNaN(maxl)){
 			var num_of_digits = maxl - Math.floor(maxl/4);
 			if(pure_length >= num_of_digits){
 				num = num.substr(0, num_of_digits);
 				pure_length = num.length;	
 			}
 		}
 		var length = e.value.toString().length;
		var pos = getCaretPosition(e);
		var bs_not_end = false;
		if(event.keyCode == 8 && pos < length)
			bs_not_end = true;				
	}
	
	//if we have lots of zeros wipe them all out except the first one
	if (num.length >= 2 && num.substring(0,num.length-1).match(/^0+/)) {
		num = num.substring(num.length-1, num.length);	
	}else{
		for (var i=0; i < Math.floor((num.length-(1+i))/3); i++){
			num = num.substring(0, num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
		}
	}	
	e.value = num;	
	if(event && (event.keyCode == 46 || bs_not_end || (pure_length - format_prev_length == 1) && pos < length)){ 
		if(((format_prev_length - pure_length) == 1) && pure_length % 3 == 0){
			//alert('//2 characters were deleted (comma and digit)- have to move cursor back');
			pos = pos - 1; //2 characters were deleted (comma and digit)- have to move cursor back
		}else if(event.keyCode == 46 && format_prev_length == pure_length){
			//alert('//skip comma; prev_length=' + format_prev_length + ' purel=' + pure_length);
			pos = pos + 1; //tried to delete comma - skip comma
		}else if((pure_length - format_prev_length == 1) && format_prev_length % 3 == 0){
			//alert('//2 chars were inserted - have to move cursor forward');
			pos = pos + 1; //2 chars were inserted - have to move cursor forward
		}
		setSelectionRange(e, pos, pos);
	}	
}

/*
This function sets selection in the text field.
If you want to specify cursor position, selectionStart and seceltionEnd should be the same
*/
function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.createTextRange) {
	    var range = input.createTextRange();
	    range.collapse(true);
	    range.moveEnd('character', selectionEnd);
	    range.moveStart('character', selectionStart);
	    range.select();
	}else if (input.setSelectionRange) {
	    input.focus();
	    input.setSelectionRange(selectionStart, selectionEnd);
	}
} 
 
function getCaretPosition (ctrl) {
	var CaretPos = 0;
	// IE Support
	if (document.selection) {
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
		CaretPos = ctrl.selectionStart;
	return (CaretPos);
}

function autoTab(field, length, value){
	if(value.length == length){
			field.focus();
	}
}

function srinkExpandArrowLink(link, params){
	link = $(link);
	var div = $(link.attr('divSel')); //get corresponding div
	if(typeof(params.time) == "undefined") params.time = 1000; //set defalt effect time
	if(params.hideAllSel)//check if we need to hide other elements first
		$(params.hideAllSel).each(function(){		srinkExpandArrowLink(this, {forceHide:1, time: params.time})	});	
	if(div.shown() || params.forceHide){
		div.slideUp(params.time);
		changeArrow('hide', link);
	}else{
		div.mySlideDown(params);
		changeArrow('show', link);
	}
}

function changeArrow(action, link){
	if(action == 'hide'){
		if(typeof(link.attr('imgSel')) != "undefined"){
			$(link.attr('imgSel')).attr('src', '/pics/arrow_right_blue.gif');
		}else{
			link.css({'background-image': "url(/pics/arrow_right_blue.gif)"});
		}
	}else{
		if(typeof(link.attr('imgSel')) != "undefined"){
			$(link.attr('imgSel')).attr('src', '/pics/arrow_down_blue.gif');
		}else{
			link.css({'background-image': "url(/pics/arrow_down_blue.gif)"});
		}
	}
}

function clear_bg_img(obj) {
	if (obj) {
		obj.style.backgroundImage = 'none';
	} else if (this) {
		this.style.backgroundImage = 'none';
	}
}

function restore_bg_img(obj) {
	if (obj && obj.value == "") {
		obj.style.backgroundImage = '';
	} else if (this && this.value == "") {
		this.style.backgroundImage = '';
	}
}

function log_js_event(real_quoter, site_location, quote_ref_id, lang){
	// logs event in qcp_logger and analytics
	var params = new Object();
	params.real_quoter = real_quoter;
	params.site_location = site_location;
	params.quote_ref_id = quote_ref_id;
	params.lang = lang;

	$.get('/quote-logger', params);

	try {
		pageTracker._trackPageview(real_quoter+'-'+site_location);
	} catch(e) {
	}
}