// ************************************************************************************************
// FLASH REPLACE

// use express install to ensure desired version before load
function show_swf_version(num_v_maj, num_v_min, num_v_rev, str_id, fn_callback){
	
	// load detect script
	var obj_s = document.createElement('script');
	set_attribute(obj_s, 'type', 'text/javascript');
	set_attribute(obj_s, 'src', 'http://www.nationalpost.com/_assets/js/flash_install.js');
	document.getElementsByTagName('head')[0].appendChild(obj_s);
	
	// do stuff when loaded
	var int_load = setInterval(function(){
		if(typeof(DetectFlashVer) == 'function'){
			clearInterval(int_load);
			
			// user capable of install
			var bool_install = DetectFlashVer(6, 0, 65);
			
			// user not up to spec
			var bool_pass = DetectFlashVer(num_v_maj, num_v_min, num_v_rev);
			
			if(bool_pass){
				fn_callback();
			}else if(bool_install){
				document.title = document.title.slice(0, 47) + ' - Flash Player Installation';
				var MMdoctitle = document.title;
				var s_params = '{flashvars: \'' + 'MMredirectURL=' + window.location + '&MMplayerType=' + (isIE ? 'ActiveX' : 'PlugIn') + '&MMdoctitle=' + MMdoctitle + '\'}';
				show_swf('/_assets/swfs/player_install.swf', 964, 650, s_params, '', str_id);
			}else{
				alert('You need the latest Adobe Flash player to view some of the content on this page.');
			}
		}
	}, 10);
	
}

function show_swf(src, width, height, params, message, str_id){
	
	// create params
	var str_output = '';
	var obj_params = '';
	var embed_params = '';
	var id = '';
	
	if(params && params.length > 0){
		try{
			params = eval('(' + params + ')');
		}catch(e){}
		for(var key in params){
			if(/^id$/i.test(key)){
				id = ' id="' + params[key] + '"';
			}else{
				obj_params += '<param name="' + key + '" value="' + params[key] + '" />';
			}
			embed_params += key + '="' + params[key] + '" ';
		}
	}
	// write object
	if(window.ActiveXObject){ // IE
		str_output = '<object type="application/x-shockwave-flash"' + id + ' data="' + src + '" width="' + width + '" height="' + height + '"><param name="movie" value="' + src + '" />' + obj_params + message + '</object>';
	}else{ // Moz
		str_output = '<embed type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" src="' + src + '" width="' + width + '" height="' + height + '" ' + embed_params + ' />';
	}
	
	// output
	if(str_id && str_id.length > 0){
		try{
			document.getElementById(str_id).innerHTML += str_output;
		}catch(e){
			document.write(str_output);
		};
	}else{
		document.write(str_output);
	}
}

// ************************************************************************************************
// TABS

function tabs_init(str_id){
	
	var int_tab_init = setInterval(function(){
		if(document.getElementById(str_id)){
			clearInterval(int_tab_init);
			document.getElementById(str_id).getElementsByTagName('ul')[0].style.display = 'block';
		}
	}, 100);
}

function tabs_select(obj_a){
	
	// nav styling
	
	// get parent ul
	var obj_ul = obj_a;
	var limit = 20;
	var count = 0;
	while(!(/^ul$/i.test(obj_ul.nodeName))){
		obj_ul = obj_ul.parentNode;
		count++;
		if(count > limit){
			return;
		}
	}
	
	// reset tabs
	var arr_tab_ids = new Array();
	arr_li = obj_ul.getElementsByTagName('li');
	for(var x = 0; x < arr_li.length; x++){
		arr_li[x].className = '';
	}
	
	// set current nav tab style
	var obj_li = obj_a.parentNode;
	while(!(/^li$/i.test(obj_li.nodeName))){
		obj_li = obj_li.parentNode;
	}
	obj_li.className = 'tabs-selected';
	
	// tab content
	
	// hide current tab content
	var arr_a = obj_ul.getElementsByTagName('a');
	for(var x = 0; x < arr_a.length; x++){
		obj_tab = document.getElementById(arr_a[x].href.replace(/^.*?#(.*)$/, '$1'));
		if(!(/tabs-hide/i.test(obj_tab.className))){
			obj_tab.className = 'tabs-hide';
		}
	}
	
	// show content
	obj_tab = document.getElementById(obj_a.href.replace(/^.*?#(.*)$/, '$1'));
	if(trim(obj_tab.innerHTML) == ''){
		var obj_loader = document.createElement('div');
		obj_loader.className = 'tabs-loader';
		obj_tab.appendChild(obj_loader);
		int_progress = setInterval(function(){
			clearInterval(int_progress);
			obj_loader.innerHTML = '<p class="dim">Loading...</p><img src="http://www.nationalpost.com/_assets/images/loader.gif" alt="Loading..." class="loader" />';
		}, 1000);
		obj_tab_http = http_request('post', '/scripts/include.aspx?file=' + arguments[1] + '&applyincludes=true', tabs_loaded);
	}
	obj_tab.className = 'tabs-container';
	
	return false;
}

function tabs_loaded(){
	
	// abort unless loaded and okay
	if(!window.obj_tab_http || typeof(obj_tab_http) == 'undefined' || obj_tab_http.readyState != 4 || obj_tab_http.status != 200){
		return;
	}
	
	clearInterval(int_progress);
	
	str_output = obj_tab_http.responseText;
	str_output = str_output.replace(/document\.write\("(.*?)"\);?/gi, '$1');
	str_output = str_output.replace(/\\"/gi, '"');
	obj_tab.innerHTML = str_output;
	
	tabs_load_js(str_output);
	
	obj_tab_http = null;
}

function tabs_load_js(str_content){
	
	if(!(/javascript/i.test(str_content))){
		return;
	}
	
	var arr_src = new Array();
	do{
		result = /script.*?javascript.*?script>/gi.exec(str_content);
		
		if(result != null){
			arr_src.push(String(result).replace(/.*?src=['"]?(.*\.js).*?$/gi, '$1'));
			str_content = str_content.slice(result.lastIndex);
		}
	}while (result != null);
	
	// get scripts
	for(var x = 0; x < arr_src.length; x++){
		var obj_scr = document.createElement('script');
		obj_scr.type = 'text/javascript';
		obj_scr.src = arr_src[x];
		document.getElementsByTagName('head')[0].appendChild(obj_scr);
	}
}

// ************************************************************************************************
// COOKIES

function set_cookie(name, value, days){
	if(days){
		var date = new Date();
		date.setTime(date.getTime() + (days * 86400000));
		var expires = '; expires='+date.toGMTString();
	}else{
		var expires = '';
	}
	document.cookie = name + '=' + value + expires + '; path=/';
}

function get_cookie(name){
	var cookies = document.cookie.split(';');
	name += '=';
	for(var x = 0; x < cookies.length; x++){
		var cookie = cookies[x];
		while(cookie.charAt(0) == ' '){ //delete spaces
			cookie = cookie.substring(1, cookie.length);
		}
		if (cookie.indexOf(name) == 0){
			return cookie.substring(name.length, cookie.length);
		}
	}
	return false;
}

// ************************************************************************************************
// FORMS

// AUTO EMPTY/FILL INPUT (HINTING)
function autovalue(element, focused, string){
	
	// focus: clear field when no user input
	if(focused && element.value == string){
		element.value = '';
		
	// blur: insert value if field empty
	}else if(element.value.length <= 0){
		element.value = string;
	}
	return
}

// RADIO SELECTOR - FROM TEXT LINK
function radio_select(element){ // must be called from next sibling of input
	do {
		element = element.previousSibling;
	} while (element && element.nodeType != 1);
	element.checked = true;
	return false;
}

// CHECKBOX SELECTOR - FROM TEXT LINK
function cbox_select(element){ // must be called from next sibling of input
	do {
		element = element.previousSibling;
	} while (element && element.nodeType != 1);
	element.checked = !element.checked;
	return false;
}

// FORM ELEMENT FOCUS AND HOVER
function hilite(element, enable){ // call on focus/blur; change element border
	if(!document.all){ // non-IE
		// required to disable hilite on disabled elements
		if(element.parentNode.nodeName.toLowerCase() == "button"){
			element = element.parentNode;
		}else{
			return;
		}
	}
	/*
	if(/MSIE 6/.test(navigator.appVersion)){
		element = element.firstChild;
	}
	//*/
	if(enable){
		element.style.border = '#666 1px solid';
	}else{
		element.style.border = '#ccc 1px solid';
	}
}
function accent(element, enable){ // call on focus/blur; change element color (main search box)
	if(enable){
		element.style.color = '#000';
	}else{
		element.style.color = '#666';
	}
}

// add options to select box
function add_options(obj_select, arr_options, str_default){
	var option;
	
	// add default option
	if(str_default != null){
		option = document.createElement('option');
		option.value = str_default;
		option.appendChild(document.createTextNode(str_default));
		obj_select.appendChild(option);
	}
	// add remaining options
	for(var x = 0; x < arr_options.length; x++){
		option = document.createElement('option');
		option.value = arr_options[x].id;
		option.appendChild(document.createTextNode(arr_options[x].caption));
		obj_select.appendChild(option);
	}
}

// remove options from select box
function remove_options(obj_select){
	while(obj_select.options.length > 0){
		obj_select.removeChild(obj_select.childNodes[obj_select.options.length - 1]);
	}
}

// notify user of change (eg. select box option change)
function label_notify_changed(str_id){
	var label = document.getElementById(str_id);
	var count = 0;
	var label_class;
	var flash = setInterval(function(){
		if(count % 2 == 0){
			//label.style.color = '#ff0000';
			label_class = label.className.replace(' alert', '');
			label.className = label_class + ' alert';
		}else{
			//label.style.color = '#000000';
			label.className = label_class;
		}
		count++;
		if(count >= 6){
			clearInterval(flash);
		}
	}, 100);
}

// ************************************************************************************************
// AJAX

// send http request
function http_request(str_method, str_path, fn_callback){
	var obj_http = false;
	if(window.XMLHttpRequest){ // mozilla
		obj_http = new XMLHttpRequest();
	}else if(window.ActiveXObject){ // IE
		obj_http = new ActiveXObject('microsoft.xmlhttp');
	}
	if(obj_http){
		obj_http.onreadystatechange = fn_callback;
		obj_http.open(str_method, str_path, true);
		obj_http.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
		obj_http.send(str_path);
	}
	return obj_http;
}

// ************************************************************************************************
// DOM Manipulation

document.getElementsByClassName = function(str_class){
	var arr_results = [];
	var arr_elements = document.getElementsByTagName('*');
	for(var x = 0; x < arr_elements.length; x++){
		if(arr_elements[x].className.indexOf(' ') >= 0){
			var str_classes = arr_elements[x].className.split(' ');
			for(var y = 0; y < str_classes.length; y++){
				if(str_classes[y] == str_class){
					arr_results.push(arr_elements[x]);
				}
			}
		}else if(arr_elements[x].className == str_class){
			arr_results.push(arr_elements[x]);
		}
	}
	return arr_results;
}

function set_attribute(obj, str_name, str_value){
	if(window.ActiveXObject){
		if(/^on\w+$/.test(str_name)){
			obj[str_name] = new Function(str_value);
		}else if(/^class$/i.test(str_name)){
			obj.className = str_value;
		}else if(/^style$/i.test(str_name)){
			obj.style = str_value;
		}else{
			obj.setAttribute(str_name, str_value);
		}
	}else{
		return obj.setAttribute(str_name, str_value);
	}
}

function offset_top(obj){
	var num_offset = obj.offsetTop;
	var obj_parent = obj.offsetParent;
	do{
		try{
			num_offset += obj_parent.offsetTop;
			obj_parent = obj_parent.offsetParent;
		}catch(e){
			break;
		}
	}while(true);
	return num_offset;
}

function offset_left(obj){
	var num_offset = 0;
	var obj_parent;
	try{
		num_offset = obj.offsetLeft;
		obj_parent = obj.offsetParent;
	}catch(e){}
	do{
		try{
			num_offset += obj_parent.offsetLeft;
			obj_parent = obj_parent.offsetParent;
		}catch(e){
			break;
		}
	}while(true);
	return num_offset;
}

// ************************************************************************************************
// TEXT

// CHANGE STORY FONT SIZE
var story_cookie_name = 'NPfontsize';
var story_class = 'story-content';
var story_font_size_min = 6; // 
var story_font_size_default = 12; // 16px @ 1.333em
var story_font_size_max = 24; // 32px @ 1.333em
var story_regex = new RegExp('\\b' + story_class + '\\b');
function font_size(value){
	var story_font_size;
	if(!(story_font_size = parseInt(get_cookie(story_cookie_name)))){
		story_font_size = story_font_size_default;
	}
	story_font_size = Math.max(story_font_size_min, Math.min(story_font_size + value, story_font_size_max));
	var elements = document.body.getElementsByTagName('*');
	for(var x = 0; x < elements.length; x++){
		if(story_regex.test(elements[x].className)){
			elements[x].style.fontSize = story_font_size + 'px';
			if(story_font_size == story_font_size_default){
				set_cookie(story_cookie_name, null, -1); // default, no cookie
			}else{
				set_cookie(story_cookie_name, story_font_size, 30);
			}
			return false;
		}
	}
}

// trim whitespace
function trim(str){
	return str.replace(/^\s+|\s+$/g, '');
}

// DEV feedback
var bool_dev = false;
try{
	if(/(\?|&)dev/.test(top.document.location.search)){
		var bool_dev = true;
	}
}catch(e){};
function blurt(str){
	if(bool_dev){
		alert(str);
	}
}