var selectedImage = null;
var timer = null;

var addthis_config = {
	data_track_linkback: false,
	data_track_clickback: true,
	services_compact: 'facebook,linkedin,hyves,twitter,mailto,more',
	username: 'arndbronkhorstfoto'
};



if (window.base_directory === undefined) window.base_directory = '../';
window.start_date = current_date_PHP_format ();
window.start_time = current_time_PHP_format ();

//! prototypes

String.prototype.trim = function() {
	a = this.replace(/^\s+/, '');
	return a.replace(/\s+$/, '');
};


function debug (m)
{
	if (window.console) window.console.log (m);
}

function go_to_location (loc)
{
	if (loc == '') loc = window.location.href;
	window.location = loc;
}

function go_to_location_on_confirmation (message, loc)
{
	if (!confirm(message)) return;
	go_to_location (loc)
}

function heartbeat ()
{
	var url = window.base_directory + 'library/heartbeat.php?url=' + escape (window.location.href);
	var t =  execute_on_server_async (url, '');
}

function page_unloaded (start_time, login_data_id, language_code)
{
	var end_date = current_date_PHP_format ();
	if (end_date != window.start_date) return;
	var url = window.base_directory + 'library/record_page_visit.php?url=' + escape (window.location.href)
		+ '&time_page_opened=' + start_time
		+ '&login_data_id=' + login_data_id
		+ '&language_code=' + language_code;
	var t =  execute_on_server_async (url, '');

}



function image_selected (e)
{
	if (selectedImage) {
		remove_class (selectedImage, 'selectedThumbnail');
		change_class (selectedImage, 'ratingOn', 'rating');
	}
	add_class (e, 'selectedThumbnail');
	change_class (e, 'rating', 'ratingOn');
	selectedImage = e;
	hide_item ('order_form');
	display_block ('detail');
}	

function image_viewed (bn, ui_language)
{
	var params = '{ ui_language: "' + ui_language + '", data_track_linkback: false }';
	addthis.toolbox('#addthis_toolbox', addthis_config, {url: 'http://www.arnd.nl/search/search.php?id=' + bn}); 
	addthis.button('#share_image', addthis_config, {url: 'http://www.arnd.nl/search/search.php?id=' + bn});
	twttr.widgets.load ();
	gapi.plusone.go ();
	FB.XFBML.parse();
	IN.parse(form_item ('linkedin_button'));
}



function get_session_variable (variable)
{
	var url = window.base_directory + 'library/get_session_variable.php?variable=' + variable;
	var result = execute_on_server (url, '');
	return result;
}


function resize_thumbnails_area() {
	hide_item ('loading1');
    var height = document.documentElement.clientHeight;
    if( (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/iPad/i))) height = 10000;
    var thumbnails = form_item ('thumbnails');
    var thumbnails_navigation = form_item ('thumbnails_navigation');
    if (!thumbnails) return;
   // alert (thumbnails.offsetTop)
    height -= thumbnails.offsetTop > 0 
    	? (thumbnails.offsetTop + 30) : 150;
   // height -= 125; 
    
    thumbnails.style.height = height +"px";
    thumbnails.style.display = 'block';
    var w = document.documentElement.clientWidth;
	var large_image = get_session_variable ('large_image');
    show_or_hide_item ('images_per_page', w > 1560 ||  (!large_image && w > 1200));
    show_or_hide_item ('navigation_popup', w > 1440 || (!large_image && w > 1100));
    show_item ('thumbnails_navigation');
    window.onresize = resize_thumbnails_area;
    window.onload = '';
    window.clearTimeout (timer);
}

function display_block (b)
{
    var f = form_item (b);
    if (f) f.style.display = 'block';
}

function hide_item (b)
{
    var f = form_item (b);
    if (f) f.style.display = 'none';
}

function show_item (b)
{
    var f = form_item (b);
    if (f) f.style.display = ''; 
}

function display_item (b)
{
    var f = form_item (b);
    if (f) f.style.visibility = 'visible'; 
}

function show_or_hide_item (b, show)
{
	if (show) {
		show_item (b);
	} else {
		hide_item (b);
	}
}

function enable_form_element (e, enabled)
{
	form_item(e).disabled = !enabled;	
}

function add_class(target, classValue)
{
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	if (!pattern.test(target.className))
	{
		if (target.className == "") {
		  	target.className = classValue;
		} else {
		  	target.className = classValue + " " + target.className;
		}
	}
}

function remove_class(target, classValue)
{
	var removedClass = target.className;
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	
	removedClass = removedClass.replace(pattern, "$1");
	removedClass = removedClass.replace(/ $/, "");
	
	target.className = removedClass;
}

function change_class (target, classFrom, ClassTo)
{
	target.className = target.className.replace (classFrom, ClassTo);
}

function add_to_lightbox (i, index)
{
	var e = form_item ("lightbox_" + i);
	e.className = 'lboxInList lboxInListCanDelete';
	e.onclick = function () {
		remove_from_lightbox (i, index); 
		load_from_server_into_element('search_details.php?index_beeldnummer=' + index + '&lb=remove', 'detail', '', false);
		load_from_server_into_element ('../library/menu.inc.php?ajax=yes', 'menu', '', false);
	}
	e.title = get_translation ('in_lightbox_tooltip');
//	alert (e.onclick)
}

function remove_from_lightbox (i, index)
{
	var e = form_item ("lightbox_" + i);
	e.className = 'lboxCanBeInList';
	e.onclick = function () {
		add_to_lightbox (i, index); 
		load_from_server_into_element('search_details.php?index_beeldnummer=' + index + '&lb=add', 'detail', '', false);
		load_from_server_into_element ('../library/menu.inc.php?ajax=yes', 'menu', '', false);
	}
	e.title = get_translation ('add_lightbox');
}


function current_date_PHP_format () 
{
	now = new Date
	y = now.getYear()
	if (y < 1900) y = y + 1900
	y = y.toString()
	m = now.getMonth()+1
	m = pad_string_left (m.toString(), 2, '0')
	d = now.getDate()
	d = pad_string_left (d.toString(), 2, '0')
	return y + "-" + m + "-" + d
}

function current_time_PHP_format () 
{
	now = new Date
	m = now.getHours()
	m = pad_string_left (m.toString(), 2, '0')
	d = now.getMinutes()
	d = pad_string_left (d.toString(), 2, '0')
	s = now.getSeconds()
	s = pad_string_left (s.toString(), 2, '0')
	return  m + ":" + d + ":" + s
}

function pad_string_left(st, len, pad) 
{
	while (st.length < len) {
		st = pad + st
	}
	return st
}




function form_item(e)
{
	return document.getElementById(e);
}

function get_form_item_value(e) 
{
	if (!form_item_exists(e)) {
		return null;
	}
	return form_item(e).value;
}

function get_form_item_inner_html(e) 
{
	if (!form_item_exists(e)) {
		return null;
	}
	return form_item(e).innerHTML;
}


function get_form_item_checked(e) 
{
	if (!form_item_exists(e)) {
		return false;
	}
	if (form_item(e).type == 'checkbox')
		return form_item(e).checked;
	return get_form_item_value(e) == '1';
}

function get_form_item_radio (e) 
{
   var oRadio = document.forms[0].elements[e];
 
   for(var i = 0; i < oRadio.length; i++)
   {
      if(oRadio[i].checked)
      {
         return oRadio[i].value;
      }
   }
 
   return '';
}

function set_form_item_value(e, v) 
{
	if (!form_item_exists(e)) {
		alert("Couldn't set_form_item_value(" + e + "," + v + ")");
		return;
	}
	form_item(e).value = v;
}

function set_form_item_inner_html(e, v) 
{
	if (!form_item_exists(e)) {
		alert("Couldn't set_form_item_inner_html(" + e + "," + v.substr(0,50) + ")");
	}
	form_item(e).innerHTML = v;
}

function form_item_error (field, m)
{
	var s = get_translation (m);
	set_form_item_inner_html (field + '_marker', '<br /><br />*** ' + s.replace (/\n/g, '<br />'));
	form_item (field).focus();
}

function form_item_OK (field)
{
	set_form_item_inner_html (field + '_marker', '');
}

function get_translation (field)
{
	var url = window.base_directory + 'library/get_translation.php?field=' + field;
	var t =  execute_on_server (url, '');
	return t;
}

function check_email (e) {
	var adds = get_form_item_value (e);
	adds = adds.trim ();
	adds = adds.replace(/\,\s/g,',');
	var ar = !adds || adds.length == 0 ?  new Array( ) : adds.split(',');
	for (var i = 0; i < ar.length; i++) {
		var v = ar[i];
		if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(v)) {
			form_item_error (e, 'invalid_email');
			return false;
		}
	}
	form_item_OK (e);
	return true;
}

function check_compulsary_field (field)
{
	if (get_form_item_value (field) == '') {
		form_item_error (field, 'compulsary_field');
		return false;
	}
	form_item_OK (field);
	return true;
}




function form_item_exists(e)
{
	if (form_item(e) == null) return false;
	return true;
}


function execute_on_server (url, script)
{
	var req = null;
	if (url.indexOf('?') > 0) url = url + "&random_parameter=" + new Date().getTime();
	if(window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
					req = false;
			}
		}
	}
	if(req) {
		req.open("GET", url, false);
		req.send(null);
        eval(script);
        return req.responseText;
	} else {
		alert ("no req!")
	}
}

function execute_on_server_async (url)
{
	var req = null;
	if (url.indexOf('?') > 0 )url = url + "&random_parameter=" + new Date().getTime();
	if(window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = false;
		}
	// branch for IE/Windows ActiveX version
	} else if(window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
					req = false;
			}
		}
	}
	if(req) {
		req.open("GET", url, true);
		req.send(null);
	} else {
		alert ("no req!")
	}
}

function load_from_server_into_element (url, id, script, value) {
	var v = execute_on_server (url, '');
	if (value) {
		set_form_item_value (id, v);
	} else {
		set_form_item_inner_html (id, v);
	}
	eval(script);
}



function focus_quicksearch ()
{
	form_item ('q').focus();
}


function clear_quick_form ()
{
	set_form_item_value ('q', '');
}

function check_quicksearch (loading)
{
	if (get_form_item_value ('q') == '') {
		alert (get_translation ('empty_search_not_allowed'));
		return false;
	}
	display_item (loading);
	disable_page ();
	return true;
}	


function disable_page ()
{
	var ar = document.getElementsByTagName("input");
	for (var i = 0; i < ar.length; i++) 
		if (ar[i].type == "button" || ar[i].type == "submit" ) ar[i].disabled = true;
	return true;
}


function select_tab_section_on_page (n, section, selected_class, cookie_name)
{
	var el = form_item(n);
	var ar = el.getElementsByTagName('li'); 
	if (ar) {
		for(var i = 0; i < ar.length; i++) {
			var id = ar[i].id.substr(4); 
			if (id != '') show_or_hide_item(id, id == section);
			ar[i].className = id == section ? selected_class : '';
		}
	}
	document.cookie = cookie_name+'='+section+'; path=/'; 
}

function validatePassword (pw, options) {
	// default options (allows any password)
	var o = {
		lower:    0,
		upper:    0,
		alpha:    0, /* lower + upper */
		numeric:  0,
		special:  0,
		length:   [0, Infinity],
		custom:   [ /* regexes and/or functions */ ],
		badWords: [],
		badSequenceLength: 0,
		noQwertySequences: false,
		noSequential:      false
	};
	
	if (pw == 'empty') return true;

	for (var property in options)
		o[property] = options[property];

	var	re = {
			lower:   /[a-z]/g,
			upper:   /[A-Z]/g,
			alpha:   /[A-Z]/gi,
			numeric: /[0-9]/g,
			special: /[\W_]/g
		},
		rule, i;

	// enforce min/max length
	if (pw.length < o.length[0] || pw.length > o.length[1])
		return false;

	// enforce lower/upper/alpha/numeric/special rules
	for (rule in re) {
		if ((pw.match(re[rule]) || []).length < o[rule])
			return false;
	}

	// enforce word ban (case insensitive)
	for (i = 0; i < o.badWords.length; i++) {
		if (pw.toLowerCase().indexOf(o.badWords[i].toLowerCase()) > -1)
			return false;
	}

	// enforce the no sequential, identical characters rule
	if (o.noSequential && /([\S\s])\1/.test(pw))
		return false;

	// enforce alphanumeric/qwerty sequence ban rules
	if (o.badSequenceLength) {
		var	lower   = "abcdefghijklmnopqrstuvwxyz",
			upper   = lower.toUpperCase(),
			numbers = "0123456789",
			qwerty  = "qwertyuiopasdfghjklzxcvbnm",
			start   = o.badSequenceLength - 1,
			seq     = "_" + pw.slice(0, start);
		for (i = start; i < pw.length; i++) {
			seq = seq.slice(1) + pw.charAt(i);
			if (
				lower.indexOf(seq)   > -1 ||
				upper.indexOf(seq)   > -1 ||
				numbers.indexOf(seq) > -1 ||
				(o.noQwertySequences && qwerty.indexOf(seq) > -1)
			) {
				return false;
			}
		}
	}

	// enforce custom regex/function rules
	for (i = 0; i < o.custom.length; i++) {
		rule = o.custom[i];
		if (rule instanceof RegExp) {
			if (!rule.test(pw))
				return false;
		} else if (rule instanceof Function) {
			if (!rule(pw))
				return false;
		}
	}

	// great success!
	return true;
}

function email_button ()
{
    var string0 = "mailto";
    var string1 = "info";
    var string2 = "@";
    var string3 = "arnd.nl";
	window.location = string0 + ':' + string1 + string2 + string3;
}

function new_advanced_search ()
{
	var url = window.base_directory + 'library/sessionvar.php?var=new_advanced_search&value=1';
	var t =  execute_on_server (url, '');
	go_to_location (window.base_directory + 'search/advanced.php');
}


