// maximum cameras to compare
var MAX_CHECKED = 5;

// attempt to disable / display the cameras
var cameras  = {};
var filterdelay = null;

// id of the link, true to enable
function enableDisableLink(id, enable) {
	var d = document.getElementById(id);

	if(enable) {
		--MAX_CHECKED;
		/*d.onclick = function() { return true; };
		d.className = "";*/
	}
	else {
		++MAX_CHECKED;
		/*d.onclick = function() { return false; };
		d.className = "disabled";*/
	}

	// disable all other checkboxes
	if(MAX_CHECKED == 0) {
		enableDisableCheckboxes(true);
	}
	else {
		enableDisableCheckboxes(false);
	}
}

// disable checkboxes with an id starting with cb_
function enableDisableCheckboxes(disable) {
	var cbs = document.getElementsByTagName("input");

	for(var i = 0; i < cbs.length; i++) {
		// we only want checkboxes with an id that starts with cb_
		if(cbs[i].type == "checkbox" && /^cb_/.test(cbs[i].name)) {
			if(!cbs[i].checked) cbs[i].disabled = disable;
		}
	}
}

// force browser to not retain the state of the checkboxes
window.onload = function() {
	var cbs = document.getElementsByTagName("input");

	for(var i = 0; i < cbs.length; i++) {
		// we only want checkboxes with an id that starts with cb_
		if(cbs[i].type == "checkbox" && (/^cb_/.test(cbs[i].name) || /^cf_/.test(cbs[i].id))) {
			cbs[i].checked  = false;
			cbs[i].disabled = false;
		}
	}
	
	
	
	//setCookie("camera_view","all",1, '/shop/consumer/digital/');
	
	camera_view=getCookie('camera_view');
	if (camera_view==null || camera_view=="")
	{
		setCookie("camera_view","all",1, '/shop/consumer/digital/');
		camera_view ='all';
		
	}
	
	if (camera_view=='all')
		document.getElementById("cf_all_stock").checked =true;
	else if (camera_view=='new')
		document.getElementById("cf_new_stock").checked =true;	
	else if (camera_view=='refurb')
		document.getElementById("cf_refurb_stock").checked =true;
	
		
	
disableEnableCamera();

	
};

// returns the index position of an element or -1
Array.prototype.indexOf = function(item) {
	for(var i = 0; i < this.length; i++) {
		if(this[i] == item) return i;
	}
	return -1;
};

// does this array contain all elements of the supplied array?
Array.prototype.contains = function(arr) {
	var match = 0;

	for(var i = 0; i < arr.length; i++) {
		if(this.indexOf(arr[i]) != -1) match++;
	}

	return match == arr.length;
}




function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString()
)+";path=/shop/consumer/digital";
}

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}


/*function eraseCookie(name) {
	createCookie(name,"",-1);
}*/







// disable or enable the view of the cameras
function disableEnableCamera(itemname, itemchecked) {
	
	
	var checked = [];
	var fm      = document.forms["filter"];
	//alert( itemname);

	var camera_view = 'all'; 
	if(itemname == 'all_stock'){
	   
	   		if (document.getElementById("cf_all_stock").checked == true){	
				document.getElementById("cf_new_stock").checked =false;
				document.getElementById("cf_refurb_stock").checked =false;
				setPrices('new', 'on');
				setPrices('refurb', 'on');
				setPrices('instock', 'on');
				setCookie("camera_view","all",1, '/shop/consumer/digital/');
			}else
				document.getElementById("cf_all_stock").checked = true;
	

			
	}else if(itemname == 'new_stock'){
	   
	   		if (document.getElementById("cf_new_stock").checked == true){
				document.getElementById("cf_all_stock").checked =false;
				document.getElementById("cf_refurb_stock").checked =false;
				camera_view = 'new';
				setPrices('new', 'on');
				setPrices('refurb', 'off');
				setPrices('instock', 'off');
				setCookie("camera_view","new",1, '/shop/consumer/digital/');
			}else
				document.getElementById("cf_new_stock").checked = true;
			
	}else if(itemname == 'refurb_stock'){
	   
	   		if (document.getElementById("cf_refurb_stock").checked == true){
				document.getElementById("cf_all_stock").checked =false;
				document.getElementById("cf_new_stock").checked =false;			
				camera_view = 'refurb';
				setPrices('new', 'off');
				setPrices('refurb', 'on');
				setPrices('instock', 'off');
				setCookie("camera_view","refurb",1, '/shop/consumer/digital/');
			}else
				document.getElementById("cf_refurb_stock").checked = true		;
	}else if(itemname == 'shop_under_100' &&
	   document.getElementById("cf_shop_under_100").checked == true
	   ){// && document.getElementById(itemname).checked =true )}
			document.getElementById("cf_shop_between_100_200").checked =false;
			document.getElementById("cf_shop_over_200").checked =false;
			
	}else if(itemname == 'shop_between_100_200' &&
	  	 	document.getElementById("cf_shop_between_100_200").checked == true){
			document.getElementById("cf_shop_under_100").checked =false;
			document.getElementById("cf_shop_over_200").checked =false;
			
			
	}else if(itemname == 'shop_over_200' &&
		document.getElementById("cf_shop_over_200").checked == true){
				document.getElementById("cf_shop_under_100").checked =false;
				document.getElementById("cf_shop_between_100_200").checked =false;			
				//camera_view = 'refurb';
				//setCookie("camera_view","refurb",1, '/shop/consumer/digital/');
			
	}
	
	camera_view=getCookie('camera_view');
	if (camera_view==null || camera_view=="")
	{
		setCookie("camera_view","all",1, '/shop/consumer/digital/');
		camera_view ='all';
		setPrices('new', 'on');
		setPrices('refurb', 'on');	
		setPrices('instock', 'on');	
	}

//alert(camera_view);
	for(var i = 0; i < fm.elements.length; i++) {
		var elm = fm[i];

		if(elm.checked &&  elm.name == 'shop_under_100' && (camera_view =='refurb')){
			checked[checked.length] =  'shop_refurb_under_100';
		}else if(elm.checked &&  elm.name == 'shop_under_100' && (camera_view =='new')){
			checked[checked.length] =  'shop_new_under_100';
		}else if(elm.checked &&  elm.name == 'shop_under_100' && (camera_view =='all')){
			checked[checked.length] =  'shop_all_under_100';	
			//checked[checked.length] =  'shop_refurb_under_100';
	  	} else  if(elm.checked &&  elm.name == 'shop_between_100_200' && (camera_view =='refurb')){
			checked[checked.length] =  'shop_refurb_between_100_200';
		}else if(elm.checked &&  elm.name == 'shop_between_100_200' && (camera_view =='new')){
			checked[checked.length] =  'shop_new_between_100_200';
		}else if(elm.checked &&  elm.name == 'shop_between_100_200' && (camera_view =='all')){
			checked[checked.length] =  'shop_all_between_100_200';	
			//checked[checked.length] =  'shop_refurb_between_100_200';
	  	}else if(elm.checked &&  elm.name == 'shop_over_200' && (camera_view =='refurb')){
			checked[checked.length] =  'shop_refurb_over_200';
		}else if(elm.checked &&  elm.name == 'shop_over_200' && (camera_view =='new')){
			checked[checked.length] =  'shop_new_over_200';
		}else if(elm.checked &&  elm.name == 'shop_over_200' && (camera_view =='all')){
			checked[checked.length] =  'shop_all_over_200';	
			//checked[checked.length] =  'shop_refurb_over_200';
	 	}else	if(elm.checked) checked[checked.length] = elm.name;
	}
//alert(checked);

	var new_stock_array = ['new_stock'];
	var refurb_stock_array = ['refurb_stock'];

	for(var i in cameras) {
		var camera = cameras[i];
		var div    = document.getElementById(i);
		if(!div) continue;

		/*if (camera_view='all'){
			div.display =show;
		}else	if (camera_view='new'){
			div.class
			div.display =show;
		}else	if (camera_view='all'){
			div.display =show;
		}else
		*/
		
		
		
		
		
		if ( camera_view =='new' && !camera.contains(new_stock_array)){
			div.style.display='none';//div.style.border='1px solid red';//
			setPrices('new', 'on');
			setPrices('refurb', 'off');
			setPrices('instock', 'off');
		}else if ( camera_view =='refurb' && !camera.contains(refurb_stock_array)){
			div.style.display='none';//div.style.border='1px solid green';//
			setPrices('new', 'off');
			setPrices('refurb', 'on');
			setPrices('instock', 'off');
		}else{
			div.style.display='block';//div.style.border='none'; //
		//setElementOpacity(div, 0.4) with   and setElementOpacity(div, 1) with div.style.display='block'
		
			 if(!camera.contains(checked)) {
				setElementOpacity(div, 0.4);
				div.className = "disabled";
				storeAndDisableClick(div);
				//alert(checked);
			} else{
				setElementOpacity(div, 1);
				div.className = "";
				enableClick(div);
			}
		}
	}
}

function setPrices(type, action) {
	//
	// search and hide/show prices
	var visibility;
	for (var key in cameras) {
		if (document.getElementById(key) != null) {
			var wrappers = document.getElementById(key).childNodes;
			for (var i = 0; i < wrappers.length; i ++) {
				if (typeof(wrappers[i].className) != 'undefined' && wrappers[i].className == 'price-wrapper') {
					var containers = wrappers[i].childNodes;
					for (var j = 0; j < containers.length; j ++) {
						if (typeof(containers[j].className) != 'undefined' && containers[j].className == 'price-container') {
							kids = containers[j].childNodes;
							for (var k = 0; k < kids.length; k++) {
								if (typeof(kids[k].className) != 'undefined' && (kids[k].className.indexOf('price-type-' + type) != -1 || kids[k].className.indexOf('price-' + type) != -1)) {
									if (action == 'on') {
										visibility = 'visible';
									} else {
										visibility = 'hidden';
									}
									kids[k].style.visibility = visibility;
								}
							}
						}
					}					
				} else if (typeof(wrappers[i].className) != 'undefined' && wrappers[i].className == 'compare_camera_instock') {
					if (type == 'instock' && action == 'on') {
						visibility = 'visible';
					} else {
						visibility = 'hidden';
					}
					wrappers[i].style.visibility = visibility;
				}
			}
		}
	}	
}

// disable any onclick handlers of child elements, storing them for later
function storeAndDisableClick(elm) {
	var kids = (document.all) ? elm.all : elm.getElementsByTagName("*");

	for(var i = 0; i < kids.length; i++) {
		// give anchors a return true onclick - does nothing to the anchor but makes the code
		// work with disabled anchor tags
		if(kids[i].nodeName.toUpperCase() == "A" && kids[i].onclick == null) {
			kids[i].onclick = function() {
				return true;
			};
		}

		if(kids[i].onclick != null && kids[i].OLDCLICK==null) {
			kids[i].OLDCLICK = kids[i].onclick;
			kids[i].onclick  = function() {
				return false;
			};
		}
	}
}

// re-enable any stored 
function enableClick(elm) {
	var kids = (document.all) ? elm.all : elm.getElementsByTagName("*");

	for(var i = 0; i < kids.length; i++) {
		if(kids[i].OLDCLICK != null) {
			kids[i].onclick  = kids[i].OLDCLICK;
			kids[i].OLDCLICK = null;
		}
	}
}

// hide the element with the supplied id
function hideOverlay(id) {
	var div = document.getElementById(id);

	if(!div) return;

	div.style.visibility = "hidden";

	hideArrowImage();
}

function showFilter(event, id, offset) {
	if(filterdelay != null) {
		clearTimeout(filterdelay);	
		filterdelay=null;
	}
	filterdelay = setTimeout(function () { actualShowFilter(id, offset)},200);
}

function timerHideOverlay(id) {
	if(filterdelay != null) {
		clearTimeout(filterdelay);	
		filterdelay=null;
	}
	hideOverlay(id);
}


function actualShowFilter(id, offset) {

	var yadd = 0;
	if(document.all) {
		yadd += ((navigator.appVersion.indexOf("6.") > 0) ? 2 : 4)
	}

	if(!offset)
		offset = 20;

	var div = document.getElementById(id);
	var cb  = document.getElementById(id.replace('ol_', 'cf_'));
	
	var box = findObDimensions(cb);

	if(!div)
		return;

	//var top   = document.documentElement.scrollTop + cb.offsetTop + offset;
	var top = box[1];
	var right = 0;
	div.style.top        = (top - 120 - yadd) + "px";
	div.style.right      = right + "px";
	div.style.visibility = "visible"
	
	positionArrowImage(top-120-yadd, right+400, div.offsetWidth);
	
	// close the camera overlay, if it's open
	if(current && current != div) {
		current.style.visibility = 'hidden';
	//	current = null;
	}	
}



// show the element with the supplied id and position it around where the cursor is
function showOverlay(event, id, offset) {
	if(!offset) offset = 20;

	var div = document.getElementById(id);

	if(!div) return;
	if(!event) event = window.event;

	var top  = document.documentElement.scrollTop + event.clientY + offset;
	var left = event.clientX - (div.offsetWidth / 2);

	div.style.top        = top + "px";
	div.style.left       = left + "px";
	div.style.visibility = "visible";

	positionArrowImage(top, left, div.offsetWidth);

	// close the camera overlay, if it's open
	if(current && current != div) {
		current.style.visibility = 'hidden';
	//	current = null;
	}
}

// is one open?
var current = null;

// show or hide the camera overlay, depending on its state and hide any opened one
function showHideCamOverlay(event, id) {
	var elm = document.getElementById(id);

	if(!elm) return;

	if(elm.style.visibility == 'visible') {
		hideOverlay(id);
	}
	else {
		showOverlay(event, id, 40);
	}

	if(current && current != elm) {
		current.style.visibility = 'hidden';
	}

	current = elm;
}

// store it
var arrowImage = null;

// display the arrow image near the cursor and overlay
function positionArrowImage(top, left, width) {
	if(!arrowImage) arrowImage = document.getElementById("arrow_image");
	if(!arrowImage) return;

	arrowImage.style.visibility = "visible";
	arrowImage.style.top        = (top - arrowImage.offsetHeight + 2) + "px"; // make it sit just over the border
	arrowImage.style.left       = (left + (width / 3)) + "px";
}

// and hide it again
function hideArrowImage() {
	if(!arrowImage) arrowImage = document.getElementById("arrow_image");
	if(!arrowImage) return;

	arrowImage.style.visibility = "hidden";
}

// where we are in the gallery array
var currentIdx = 0;

// show or hide the large image on the design tab
function showHideGalleryOverlay(event, img) {
	var id  = 'gallery';
	var elm = document.getElementById(id);

	if(!elm) return;

	if(elm.style.visibility == 'visible') {
		hideGalleryOverlay();
	}
	else {
		// should the next / back buttons be displayed?
		var idx = galleryImages.indexOf(img);

		hideShowBackNext(idx);

		// sort out displaying the main image
		document.images['gallery_image'].src = img;
		showOverlay(event, id);

		elm.style.top  = "0px";
		elm.style.left = "0px";

		currentIdx = idx;
	}
}

// shift the gallery image to the next or previous
// if dir is greater than 0 it shifts it forwards
// else it shifts it back
function galleryShift(dir) {
	if(dir > 0) {
		currentIdx++;
	}
	else if(dir < 0) {
		currentIdx--;
	}

	if(currentIdx < 0) currentIdx = 0;
	if(currentIdx > galleryImages.length - 1) currentIdx = galleryImages.length - 1;

	document.images['gallery_image'].src = galleryImages[currentIdx];

	hideShowBackNext(currentIdx);
}

// hide or show the next / back images for the gallery
function hideShowBackNext(idx) {
	document.images['gallery_back'].style.visibility = (idx == 0) ? 'hidden' : 'visible';
	document.images['gallery_next'].style.visibility = (idx >= (galleryImages.length - 1)) ? 'hidden' : 'visible';
}

// for some reason hiding the main div doesn't hide the back / next images...
function hideGalleryOverlay() {
	hideOverlay('gallery');

	document.images['gallery_back'].style.visibility = 'hidden';
	document.images['gallery_next'].style.visibility = 'hidden';
}