String.prototype.equalsIgnoreCase=MatchIgnoreCase;
function MatchIgnoreCase(strTerm)
{
	var strToSearch = this.toLowerCase();
	strTerm = strTerm.toLowerCase();
	
	return (strToSearch==strTerm);
}

String.prototype.stripLength=stripLengthFromString;
function stripLengthFromString()
{
	var length_items = new Array();
	length_items[length_items.length] = 'px';
	length_items[length_items.length] = 'pt';
	length_items[length_items.length] = 'pts';
	length_items[length_items.length] = 'mm';
	length_items[length_items.length] = 'cm';
	length_items[length_items.length] = 'pica';
	length_items[length_items.length] = 'inch';
	
	var search_string = this.toLowerCase();
	
	for (var i=0; i<length_items.length; i++)
	{
		search_string = search_string.replace(length_items[i], '');
	}
	
	return search_string;
}

String.prototype.htmlEntitiesToXml=htmlEntitiesToXml;
function htmlEntitiesToXml()
{
	var str_replace = this;
	
	str_replace = str_replace.replace(/&#38;/, "&");
	str_replace = str_replace.replace(/&#60;/, "<");
	str_replace = str_replace.replace(/&#62;/, ">");
	str_replace = str_replace.replace(/&#34;/, "\"");
	str_replace = str_replace.replace(/&#39;/, "'");
	
	return str_replace;
}

String.prototype.shortstrmid=shortstrmid;
function shortstrmid(maxlength)
{
	var str_original = this;
	
	if (str_original.length > maxlength)
	{
		var mid = parseInt(maxlength / 2);
		
		var part_one = str_original.substring(0, mid);
		var part_two = str_original.substring(str_original.length - mid, str_original.length);
		
		str_original = part_one + "..." + part_two;
	}
	
	return str_original;
}

function str_shortstrmid(str_original, maxlength)
{
	if (str_original.length > maxlength)
	{
		var mid = parseInt(maxlength / 2);
		
		var part_one = str_original.substring(0, mid);
		var part_two = str_original.substring(str_original.length - mid, str_original.length);
		
		str_original = part_one + "..." + part_two;
	}
	
	return str_original;
}

function str_shortstrleft(str_original, maxlength)
{
	if (str_original.length > maxlength)
	{
		var part_one = str_original.substring(0, maxlength-3);
		str_original = part_one + "...";
	}
	
	return str_original;
}

function getOptimalPopupPosition(the_width, the_height)
{
	var xpos = ((screen.width - the_width) * .5);
	var ypos = ((screen.height - the_height) * .5);
	
	// Item 'lijkt' pas in het midden te staan voor mensen als je het iets boven het midden positioneert...
	ypos = ypos - (screen.height / 15);
	
	return {x: xpos, y:ypos};
}

String.prototype.isEmailAddress=isEmailAddress;
function isEmailAddress()
{
	var mailCheck = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return mailCheck.test(this);
}

String.prototype.isMultipleEmailAddress=isMultipleEmailAddress;
function isMultipleEmailAddress(mutiple_email)
{
	var arr_mutiple_email = mutiple_email.split(";");
	var return_val = false;	
	for (var i=0, len=arr_mutiple_email.length; i<len; i++){
		var curr_email = arr_mutiple_email[i];
		var mailCheck = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		return_val = mailCheck.test(curr_email);
	}
	return return_val;
}

String.prototype.jsnl2br=jsnl2br;
function jsnl2br()
{ 
	return this.replace(/\n/ig, "<br />");
}

String.prototype.isNumeric=isNumeric;
function isNumeric()
{
	return isFinite(this);
}

Array.prototype.containsItem = containsItem;
function containsItem(str_item)
{
	for (var i=0, len=this.length; i<len; i++)
	{
		if (this[i] == str_item)
		{
			return true;
		}
	}
	
	return false;
}

function getHashKeys(hashObj)
{
	var array_keys = new Array();
	
	for (i in hashObj) if (hashObj.hasOwnProperty(i))
	{
		array_keys.push(i);
	}
	
	return array_keys;
}

function getHTMLObjPosition(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return {x:curleft, y:curtop};
}

function isEmpty(sText)
{
	return (sText.replace(/^\s*|\s*$/g,"").length==0);
}
			
function fixpngs(jqueryvar, blankImg) 
{
	// Manuele FIX, iepngfix werkt niet???
	if (typeof document.body.style.maxHeight == "undefined")
	{
		var array_elements = jqueryvar(".png");
				
		for (var i=0, len=array_elements.length; i<len; i++)
		{
			var element = array_elements[i];
			
			var dim = {
				width: element.offsetWidth,
				height: element.offsetHeight
			};
			
			if (element.src && element.src.indexOf("blank.gif") == -1)
			{
				element.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'" + element.src + "\');";
				element.src = blankImg;
				element.style.width = dim.width;
				element.style.height = dim.height;
			}
		}
	}
}

function parsexmlvaluestoobj(xmlnode)
{
	var returnobj;
	
	if (xmlnode == undefined)
	{
		return undefined;
	}
	
	// Type van xmlnode opvragen
	var xmlnode_type = xmlnode.getAttribute("type");
	
	////////////////////////////////////////////////////////////////////
	// Geen type -> gewone value!!!
	if (xmlnode_type == undefined || xmlnode_type == null)
	{
		// Geen Type -> gewoon value
		if (xmlnode.firstChild && xmlnode.firstChild.nodeValue)
		{
			returnobj = xmlnode.firstChild.nodeValue;
		}
		else
		{
			returnobj = "";
		}
	}
	////////////////////////////////////////////////////////////////////
	// Array -> Subitems overlopen
	else if (xmlnode_type.equalsIgnoreCase("Array"))
	{
		returnobj = new Array();
		
		for (var i=0, len=xmlnode.childNodes.length; i<len; i++)
		{
			returnobj[returnobj.length] = parsexmlvaluestoobj(xmlnode.childNodes[i]);
		}
	}
	////////////////////////////////////////////////////////////////////
	// Hash -> Subkeys overlopen
	else if (xmlnode_type.equalsIgnoreCase("Struct"))
	{
		returnobj = {};
		
		for (var i=0, len=xmlnode.childNodes.length; i<len; i++)
		{
			var xml_subnode = xmlnode.childNodes[i];
			var itemkey = xml_subnode.getAttribute("name");
			
			if (itemkey != undefined)
			{
				returnobj[itemkey] = parsexmlvaluestoobj(xml_subnode);
			}
		}
	}
			
	return returnobj;
}

function concatnodes(nodes) 
{
	var result = "";
	for (var i=0; i < nodes.childNodes.length; i++) 
	{
		var node = nodes.childNodes[i];
		if (node.nodeType == 3 || node.nodeType == 4) 
		{
			result+= node.nodeValue;
		}
		if (node.hasChildNodes()) 
		{
			listNodes(node);
		}
	}
	return result;
}

function deepCopy(originalobj) 
{
    var returnobj = new Object();
    
    if (typeof(originalobj) == 'object') 
    {
        if (typeof(originalobj.length) != 'undefined')
        {
            var returnobj = new Array();
            
	        for (var obj_index in originalobj)
	        {
	            if (typeof(originalobj[obj_index]) == 'object')
	            {
	                returnobj[obj_index] = deepCopy(originalobj[obj_index]);
	            }
	            else if (typeof(originalobj[obj_index]) == 'string')
	            {
	                returnobj[obj_index] = originalobj[obj_index];
	            }
	            else if (typeof(originalobj[obj_index]) == 'number')
	            {
	                returnobj[obj_index] = originalobj[obj_index];
	            }
	            else if (typeof(originalobj[obj_index]) == 'boolean')
	            {
	                ((originalobj[obj_index] == true) ? returnobj[obj_index] = true : returnobj[obj_index] = false);
	            }
	        }
		}
    }
    return returnobj;
}

function utf8_decode(utftext) 
{
	utftext = unescape(utftext);
	 var plaintext = ''; var i=0; var c=c1=c2=0;
	 // while-Schleife, weil einige Zeichen uebersprungen werden
	 while(i<utftext.length)
		 {
		 c = utftext.charCodeAt(i);
		 if (c<128) {
			 plaintext += String.fromCharCode(c);
			 i++;}
		 else if((c>191) && (c<224)) {
			 c2 = utftext.charCodeAt(i+1);
			 plaintext += String.fromCharCode(((c&31)<<6) | (c2&63));
			 i+=2;}
		 else {
			 c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2);
			 plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63));
			 i+=3;}
		 }
	 return plaintext;
}

function utf8_encode(argString) 
{
    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
    
    var utftext = "";
    var start, end;
    var stringl = 0;
    
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
        
        if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
    
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
    
    return utftext;
}

function newlinetobr(textstring)
{
	return textstring.replace(/\n/, "<br />");
}

function getarrayobjbyproperty(array_objs, propertyname, searchval)
{
	// Item binnen een array van hashen opzoeken adhv een bepaalde property en searchvalue
	var returnobj = undefined;
	
	for (var i=0, len=array_objs.length; i<len; i++)
	{
		var curobj = array_objs[i]
		
		if (curobj[propertyname] == searchval)
		{
			returnobj = curobj;
		}
	}
	
	return returnobj;
}

// Firefox 3.6 projectvit moet subpops focussen na mouseup.. Moet daarom enkele malen uitgevoerd worden..
function focusPopup(popobj, count)
{
	count = (count == undefined) ? 0 : count;
	
	if (count < 80)
	{
		setTimeout(function ()
		{
			popobj.focus();
			focusPopup(popobj, count + 1)
		}, 15);
	}
}

function urlencode(str)
{
	// string URLencoding op toepassen zodat deze kan worden via de GET querystring - niet nodig bij POST (duh)
	// Niet nodig voor alle karakters, enkel voor "probleemkarakters"
	
	str = str.replace("%", "%25");
	str = str.replace(" ", "%20");
	str = str.replace("#", "%23");
	str = str.replace("+", "%2b");
	str = str.replace("=", "%3d");
	str = str.replace("<", "%3c");
	str = str.replace(">", "%3e");
	str = str.replace("?", "%3f");
	str = str.replace("@", "%40");
	str = str.replace("\"", "%22");
	str = str.replace("'", "%27");
	
	return str;
}

function string_escape(str)
{
	str = str.replace("'", "\'");
	str = str.replace('"', '\"');
	
	return str
}

function cookie_set(name,value,days) 
{
	var expires = "";
	
	if (days) 
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = "; expires="+date.toGMTString();
	}
	
	document.cookie = name+"="+value+expires+"; path=/";
}

function cookie_value(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	
	for(var i=0;i < ca.length;i++) 
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	
	return undefined;
}

function cookie_erase(name)
{
	cookie_set(name,"",-1);
}

function getPosition(e)
{
	var left = 0;
	var top  = 0;

	while (e.offsetParent)
	{
		left += e.offsetLeft;
		top  += e.offsetTop - e.scrollTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function getBodyDimensions()
{
	if (self.innerHeight)
	{
		return {
			width: self.innerWidth,
			height: self.innerHeight
		};
	}
	else if (document.documentElement && document.documentElement.clientHeight)
	{
		return {
			width: document.documentElement.clientWidth,
			height: document.documentElement.clientHeight
		};
	}
	else if (document.body)
	{
		return {
			width: document.body.clientWidth,
			height: document.body.clientHeight
		};
	}
}

function getBodyScroll()
{
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) 
	{
		return {
			y: window.pageYOffset,
			x: window.pageXOffset
		};
	} 
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
	{
		return {
			y: document.body.scrollTop,
			x: document.body.scrollLeft
		};
	}
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
	{
		return {
			y: document.documentElement.scrollTop,
			x: document.documentElement.scrollLeft
		};
	}
	else
	{
		return {
			x: 0,
			y: 0
		}
	}
}

var adminpopup;
function call_adminpopup(url)
{
	if(adminpopup){ adminpopup.close(); }

	var poppos = getOptimalPopupPosition(1000,600);
	
	adminpopup = window.open(url, 'Vit2PrintAdmin', 'width=1000,height=600,top=' + poppos.y + ',left=' + poppos.x + ',statusbar=yes,scrollbars=yes,resizable=yes');
    adminpopup.focus();
}

function kill_adminpopup(){
	if(adminpopup){ adminpopup.close(); }
}

var userinfopopup;
function call_userinfopopup(enviromentvar)
{
	if(userinfopopup){ userinfopopup.close(); }

	var poppos = getOptimalPopupPosition(450,500);
	
	userinfopopup = window.open(enviromentvar + "/vit2print_userdata.pl", 'Vit2PrintUserInformation', 'width=450,height=500,top=' + poppos.y + ',left=' + poppos.x + ',statusbar=yes,scrollbars=yes,resizable=yes');
    userinfopopup.focus();
}

function kill_userinfopopup(){
	if(userinfopopup){ userinfopopup.close(); }
}
function getTimeStrFromUnixTime(time){
	var a = new Date(time * 1000);
	var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
    var year = a.getFullYear();
    var month = a.getMonth() +1;
    if (month < 10){
    	month = "0" + month;
    }
    //var month = months[a.getMonth()];
    var date = a.getDate();
    if (date < 10){
    	date = "0" + date;
    }
    var hour = a.getHours();
    if (hour < 10){
    	hour = "0" + hour;
    }
    var min = a.getMinutes();
    if (min < 10){
    	min = "0" + min;
    }
    var sec = a.getSeconds();
    if (sec < 10){
    	sec = "0" + sec;
    }
    var time = date+'/'+month+'/'+year+' '+hour+':'+min;
    return time;
}

function create_search_field(webtext, searchvalue){
	var search_fields_container = $("#vit2print_search_engine");
		
	$.each(search_fields_container, function(i, val){
		search_fields_container.append("<div class='vit2print_search_left'></div>");	
		search_fields_container.append("<input type='text' name='vit2print_txtSearch' id='vit2print_search' onkeyup='vit2print_serach_text_onkeyup(event)' class='vit2print_nicesearch' />");
		search_fields_container.append("<div class='vit2print_search_right'></div>");
				
		var current_vit2print_searchfield = $("#vit2print_search");
		if (searchvalue == ""){
			current_vit2print_searchfield.val(webtext);
			current_vit2print_searchfield.css("color","#999");
		}else {		
			current_vit2print_searchfield.val(searchvalue);
			current_vit2print_searchfield.css("color","#000000");
		}
		
		current_vit2print_searchfield.focus(function() {  		
	        if (this.value == webtext){  
	            this.value = '';  
	            
	        }  
	        if(this.value != webtext){  
	            this.select();  	            
	        }  
	        current_vit2print_searchfield.css("color","#000000");
	    }); 
	    
	    current_vit2print_searchfield.blur(function() { 
			//current_vit2print_searchfield.val(webtext);
			//current_vit2print_searchfield.css("color","#999");
		});
	});	
	
}

function create_dropdown(params, actions, callbackfunction)
{
	var id = params.id;
	var append_to = params.append_to;
	var imgpath = params.imgpath;
	var pass_to_function = params.pass_to_function;
	var dropdownclass = params.dropdownclass || "";
	var position = params.position || "topright";
	var customattributes = params.customattributes || "";
	var sortorder = params.sortorder;

	var dropdowncontent = "";
	init();

	function init()
	{
		var dropdowncontainer = "";
		if (position == "bottomright" || position == "bottomleft")
		{
			dropdowncontainer += "<img style=\"margin-top : -4px\" class=\"asset-pointer\" src=\""+imgpath+"/photovit/asset_pointer_up.png\"/>";
		}
		    dropdowncontainer  += "<div class=\"v2p-dropdown-menu button-dropdown-container-11px-ffffff "+dropdownclass+"\"  position=\""+position+"\" id=\""+id+"\" ";
			$.each(customattributes, function(index, attribute) {
			  	dropdowncontainer += ""+index+"=\""+attribute+"\" ";
			});
		dropdowncontainer += "></div>";
		if (position == "topright" || position == "topleft")
		{
			dropdowncontainer += "<img class=\"asset-pointer\" style=\"margin-top : -1px\" src=\""+imgpath+"/photovit/asset_pointer_down.png\"/>";
		}
		$(append_to).html(dropdowncontainer);

		getwebtexts();
	}

	function getwebtexts()
	{
		var webtextarray = new Array();
		$.each(actions, function(index, curaction) {
		  	webtextarray.push(curaction["name"]);
		});
		$.post("PV_webtexts_playground.pl", {

			"webtextstring": webtextarray.join(",")
		},
		function(xmldocument) {
			webtexts = parsexmlvaluestoobj(xmldocument.firstChild);
			webtextloaded(webtexts);
		});
	}

	function webtextloaded(webtexts)
	{
			
		for(var i in sortorder)
		{
			$.each(actions, function(index, action) 
			{
				if ( action.name == sortorder[i])
				{
			  		getitems(action, webtexts[index]);
			  	}
			});
		}
			build_menu();
	}

	function getitems(item, title)
	{
		if(item.value.match(/^y$/i))
		{
			this.item = item;
			var childid = (item.children != undefined) ? "child="+item.children.id : "";
				
				dropdowncontent += "<a id=\'menu_"+item.name+"\' class=\'button-dropdown-item-11px-ffffff menu_"+item.name+"\' "+childid+" href=\'javascript:menu_"+item.name+"({";
				
				var i = 0;
				$.each(params, function(index, param) {
				
				  	dropdowncontent += (i != 0) ? ", \""+index+"\" : \""+param+"\"" : "\""+index+"\" : \""+param+"\"";
				  	i++;
				});
	
				dropdowncontent += "})\'><span><img title=\'"+title+"\' src=\'"+imgpath+"/dropdownimages/"+item.name+".png\' class=\'png\' />"+title+"</span></a>";
			if (item.children != undefined)
			{
				var items = item.children.items;
				$.each(items, function (i, curitem)
				{
					getitems(curitem);
				});
			}
		}		
	}

	function build_menu()
	{
		$("#"+id).append(dropdowncontent);

		$(".dropdown-item").hover( function () 
		{
			if ( $(this).attr("child") != undefined)
			{
				var childid = $(this).attr("child");
				$("#"+childid).css({
					"position" : "absolute",
					"left" : $(this).offset().left + $(this).width() - 7,
					"top" : $(this).position().top
				}).show();
			}
			}, 
			function () 
			{
				if ( $(this).attr("child") != undefined)
			{
				var childid = $(this).attr("child");

				$("#"+childid).hide();
			}
		});

		if(typeof callbackfunction == 'function'){
		  callbackfunction.call();
		}
	}
}

function position_dropdown_elements(params)
{
		width = params.dropdownwidth;
		dropdownid = params.dropdownid;
		clickeditem = params.clickeditem;

		offsetleft = (params.offset != undefined && params.offset.leftoffset != undefined) ? params.offset.leftoffset : 0;
		offsetright = (params.offset != undefined && params.offset.rightoffset != undefined) ? params.offset.rightoffset : 0;
		offsettop = (params.offset != undefined && params.offset.topoffset != undefined) ? params.offset.topoffset : 0;
		offsetbottom = (params.offset != undefined && params.offset.bottomoffset != undefined) ? params.offset.bottomoffset : 0;
		

	if($("#"+dropdownid).height() == 0)
	{
		position_dropdown_elements(width, dropdownid, clickeditem);
	}
	position = $("#"+dropdownid).find('*[position]').attr("position");
	switch (position) {
		case "topright": //is ok
			$("#"+dropdownid).css({
				"width": width,
				"position" : "absolute",
				"top" : clickeditem.position().top - ($("#"+dropdownid).outerHeight() + 5) - offsettop + offsetbottom,
				"left" :  clickeditem.position().left - offsetleft + offsetright
			});
			$(".asset-pointer").css({
				"position" : "absolute",
				"left" :  (($(clickeditem).outerWidth()/2) + ($(".asset-pointer").width() /2)) - offsetleft + offsetright
			});
		break;
		case "topleft": // is ok
			$("#"+dropdownid).css({
				"width": width,
				"position" : "absolute",
				"top" : $(clickeditem).position().top - ($("#"+dropdownid).outerHeight() + 5) - offsettop + offsetbottom,
				"left" : $(clickeditem).position().left - width + $(clickeditem).outerWidth() - offsetleft + offsetright
			});
			$(".asset-pointer").css({
				"position" : "absolute",
				"left" :  width - (($(clickeditem).outerWidth()/2) + ($(".asset-pointer").width() /2)) + (offsetleft/2) +- offsetright
			});
		break;
		case "bottomleft":
			$("#"+dropdownid).css({
				"width": width,
				"position" : "absolute",
				"top" : clickeditem.position().top + (clickeditem.outerHeight() + 5) - offsettop + offsetbottom,
				"left" : clickeditem.position().left - width + clickeditem.outerWidth() - offsetleft + offsetright
			});
			$(".asset-pointer").css({
				"position" : "absolute",
				"left" :  $("#"+dropdownid).width() - (($(clickeditem).outerWidth()/2) + ($(".asset-pointer").width() /2)) - offsetleft + offsetright
			});
		break;
		case "bottomright":
				$("#"+dropdownid).css({
				"width": width,
				"position" : "absolute",
				"top" : clickeditem.position().top + (clickeditem.outerHeight() + 5) - offsettop + offsetbottom,
				"left" : clickeditem.position().left - offsetleft + offsetright
			}); 
			$(".asset-pointer").css({
				"position" : "absolute",
				"left" :  (($(clickeditem).outerWidth()/2) + ($(".asset-pointer").width() /2)) - offsetleft + offsetright
			});		
		break;
	}
}

function create_infopopup(params, custom_css)
{
	var width = params.width;
	var height = params.height;
	var item_to_wrap = params.item_to_wrap || "<p>Please append something to the lightbox</p>";
	var item_to_append_to = params.append_to || "body";
	var imagepath = params.imagepath;
	var draggable = params.draggable || false;
	var title = params.title || false;
	var closebtn = params.closebtn || false;
	var closelabel = params.closelabel || "none specified."
	var buttons = params.buttons;
	var id = params.id || "infopopup";
	var infoclass = params.infoclass;
	var custom_css = custom_css;

	var default_css = {	"width" : width,
			  		    "height" : height,
			            "margin-left" : -(width*.5)-20,
			            "margin-top" : -(height*.5)-20,
			            "position": "absolute",
			            "padding": "5px 20px 20px 20px",
			            "background-color": "white",
			            "top": "50%",
			            "left": "50%",
			            "-webkit-border-radius": "5px",
			            "-moz-border-radius": "5px",
			            "border-radius": "5px",
			            "-webkit-box-shadow": "3px 3px 3px rgba(0,0,0,.3)",
			            "-moz-box-shadow": "3px 3px 3px rgba(0,0,0,.3)",
			            "box-shadow": "3px 3px 3px rgba(0,0,0,.3)",
			            "background-image": "url(" + imagepath + "/photovit/lightbox-bg.png)",
			            "background-position": "bottom",
			            "background-repeat": "repeat-x",
			            "zIndex": 9998	            
					   };
	
	var css = $.extend(default_css, custom_css);

	if($("#infoOverlay").length < 1 && $("#lightboxOverlay").length < 1)
	{
		var myOverlay;
			myOverlay = new documentOverlay({id: "lightboxOverlay"});
			myOverlay.init();
	}
	
	var lightbox_html_out = "<div id=\""+id+"\" class=\"ui-widget-content ui-draggable lightbox "+infoclass+"\">";
	if(draggable == true)
	{
	    lightbox_html_out += "<div class=\'ui-widget-header\' id=\'draghandle\'><img id=\'handle_sub_item\' style=\'margin-left: 48%;\' src="+imagepath+"/icons/slider.png?nr=eaz\' /></div>";
	}
    lightbox_html_out += "<h3>"+title+"</h3>";
	lightbox_html_out += item_to_wrap;
	lightbox_html_out += "<div id=\"lightboxbuttons\" class=\"lightboxbuttons\">";
	
	if (closebtn == true)
	{
		lightbox_html_out += "<a id=\"btn-close-bottom\" class=\"button-normal-12px-ffffff\" href=\"#\"><span>"+closelabel+"</span></a>";
	}
	
	lightbox_html_out += "</div></div>";
	$(item_to_append_to).append(lightbox_html_out);
	
	if (buttons != undefined)
	{
		$.each(buttons, function (i, curbutton)
		{
			if (curbutton.image != undefined)
			{
				$("#lightboxbuttons").append("<a id=\""+curbutton.id+"\" class=\"btn-with-image-ffffff\" href=\""+curbutton.href+"\"><span><img class=\"popupbtnimg\" src="+curbutton.image+" />"+curbutton.label+"</span></a>");
			}
			else
			{
				$("#lightboxbuttons").append("<a id=\""+curbutton.id+"\" class=\"button-normal-12px-ffffff\" href=\""+curbutton.href+"\"><span>"+curbutton.label+"</span></a>");	
			}
		});
	}

	
	$(".lightbox").focus().css(css);
	
	$(".lightbox h3").css({"margin" : "0",
						   "margin-top" : (draggable == true) ? "0" : "10px"
		
	});
	$(".lightboxbuttons").css({"position" : "absolute",
							   "bottom" : "15",
							   "right" : "10"
							 });
	$(".lightbox #draghandle").css({"cursor": "move",
									"padding-bottom": "5px"});	            
	$(item_to_append_to).css("overflow", "hidden");
	
	$("#lightboxOverlay").bind("click", function () 
	{
		myOverlay.remove();
		$(".lightbox").remove();
		$(item_to_append_to).css("overflow", "auto");
	});

		$("#btn-close-bottom").bind("click", function () 
		{
			myOverlay.remove();
			$(".lightbox").remove();
			$(item_to_append_to).css("overflow", "auto");
		});
	
	
	if(draggable == true)
	{
		$(".lightbox").draggable(
		{ 
			handle: '#draghandle', 
		    containment: [0 + (width/2)+20, 
		    	     	  0 + (height/2)+20,
		    			  0 + $("#lightboxOverlay").width() - ((width/2)+20),
		    			  0 + $("#lightboxOverlay").height() - ((height/2)+20)],
		    helper: 'original',
		    opacity: 0.90
		});
	}
}

function create_infobox(append_to, id, imgpath, custom_css)
{
	var custom_css = custom_css;
	
	var default_css = {
		"left": ($(window).width()/2)-(($(".infobox").width()*.5)) - 20, 
		"top": ($(window).height()/2)-(($(".infobox").height()*.5))- 20,
		"padding": "10px",
		"z-index" : 9999
	};
	
	var css = $.extend(default_css, custom_css);
	
	if($("#infoOverlay").length < 1 && $("#lightboxOverlay").length < 1)
	{
		var myOverlay;
		myOverlay = new documentOverlay({id: "infoOverlay"});
		myOverlay.init();
	}
	var infobox_out = "<div class=\"infobox ui-widget-content ui-draggable\" id=\""+id+"\">";
		infobox_out += "<img class=\"spinner\" src=\""+imgpath+"/loading_small_darkbox_60x60_clockwise.gif\"";
		infobox_out += "</div>";

	$(append_to).append(infobox_out);
	
	$(".infobox").css(css).focus();
	
	
}

function update_infobox(params)
{
	var width = params.width;
	var height = params.height;
	var title = params.title;
	var item_to_wrap = params.item_to_wrap;
	var id = params.id;
	var imgpath = params.imgpath;
	var closebtn = params.closebtn || false;
	var closelabel = params.closelabel || "none specified.";
	var buttons = params.buttons;
	var draggable = params.draggable || false;
	var custom_css = params.custom_css;
	
	var default_css = {
		"left" : (($(window).width()/2)-$("#"+id).width()*.5)-10,
	  	"top" : (($(window).height()/2)-$("#"+id).height()*.5)-10
	};
	
	var css = $.extend(default_css, custom_css);

	$(".infobox").html("");
	var infobox_html_out = "<div style=\"display:none\"; class=\"infobox_container\">";
	if(draggable == true)
	{
		infobox_html_out += "<div class=\'ui-widget-header\' id=\'draghandle\'><img id=\'handle_sub_item\' style=\'margin-left: 48%;\' src="+imgpath+"/icons/slider.png?nr=eaz\' /></div>";
	}
	    infobox_html_out += "<h3>"+title+"</h3>";
		infobox_html_out += item_to_wrap;
		infobox_html_out += "<div id=\"infoboxbuttons\" class=\"infoboxbuttons\">";
		if (closebtn == true)
		{
			infobox_html_out += "<a id=\"btn-close-bottom\" class=\"button-normal-11-444444\" href=\"#\"><span>"+closelabel+"</span></a>";
		}
		infobox_html_out += "</div></div>";

	$("#"+id+" .spinner").remove();

	$("#"+id+".infobox").append(infobox_html_out)
			 .css(css)
			 .animate({ width: width,
				        height: height,
				        left: ($(window).width()/2)-(width*.5)-10,
				        top: ($(window).height()/2)-(height*.5)-10
				      	}, // what we are animating
				    	{
				    		easing: 'easeOutElastic', // the type of easing
				       	 	duration: '200000', // how fast we are animating
				       	 	complete: function() { // the callback
				        	$("#"+id+" .infobox_container").css("display","block");
				        }
				    });

	$(".infoboxbuttons").css({"position" : "absolute",
							   "bottom" : "10",
							   "right" : "10"
							 });
	
	if (buttons != undefined)
	{
		$.each(buttons, function (i, curbutton)
		{
			if (curbutton.image != undefined)
			{
				$("#infoboxbuttons").append("<a id=\""+curbutton.id+"\" class=\"btn-with-image-ffffff\" href=\""+curbutton.href+"\"><span><img src=\""+curbutton.image+"\" />"+curbutton.label+"</span></a>");
			}
			else
			{
				$("#infoboxbuttons").append("<a id=\""+curbutton.id+"\" class=\"button-normal-11-444444\" href=\""+curbutton.href+"\"><span>"+curbutton.label+"</span></a>");	
			}
			
			$("#infoboxbuttons").addClass(curbutton.buttonclass);
		});
	}

	if(draggable == true)
	{						 			    
		$(".infobox #draghandle").css({"cursor": "move"}); 
		$(".infobox").draggable({ handle: '#draghandle', 
								   containment: "parent",
								   helper: 'original',
								   opacity: 0.90});
	}
	  
	$("#infoOverlay").bind("click", function () {
		$("#infoOverlay").remove();
	  	$(".infobox").remove();
	});

	if (closebtn == true)
	{
		$("#infoOverlay, #btn-close-bottom").bind("click", function () {
			$("#infoOverlay").remove();
	  		$(".infobox").remove();
		});
	}
	  
	$(window).resize(function ()
	{
		$("#"+id).css(css);  			
	});  
}



function documentOverlay(params) {	
    // @version 0.12
    // @author James Padolsey
    // @info http://james.padolsey.com/javascript/the-perfect-document-overlay/
    
    // Shortcut to current instance of object:
    
    var instance = this,
    
    // Cached body height:
    bodyHeight = (function(){
        return getDocDim('Height','min');    
    })();
    
    // CSS helper function:
    function css(el,o) {
        for (var i in o) { el.style[i] = o[i]; }
        return el;
    };
    
    // Document height/width getter:
    function getDocDim(prop,m){
        m = m || 'max';
        return Math[m](
            Math[m](document.body["scroll" + prop], document.documentElement["scroll" + prop]),
            Math[m](document.body["offset" + prop], document.documentElement["offset" + prop]),
            Math[m](document.body["client" + prop], document.documentElement["client" + prop])
	);
    }
    
    // get window height: (viewport):
    function getWinHeight() {
        return window.innerHeight ||
                (document.compatMode == "CSS1Compat" && document.documentElement.clientHeight || document.body.clientHeight);
    }
    
    // Public properties:
    
    // Expose CSS helper, for public usage:
    this.css = function(o){
        css(instance.element, o);
        return instance;
    };
    
    // The default duration is infinity:
    this.duration = null;
    
    // Creates and styles new div element:
    this.element = (function(){
        return css(document.createElement('div'),{
            width: '100%',
            height: getDocDim('Height') + 'px',
            position: 'absolute', 
            zIndex: 990,
            left: 0, 
            top: 0,
            cursor: 'default',
            background: 'black',
            opacity: 0.6,
            filter: 'alpha(opacity=60)'
        });
    })();
    
    // Resize cover when window is resized:
    window.onresize = function(){
        
        // No need to do anything if document['body'] is taller than viewport
        if(bodyHeight>getWinHeight()) { return; }
        
        // We need to hide it before showing
        // it again, due to scrollbar issue.
        instance.css({display: 'none'});
        setTimeout(function(){
            instance.css({
                height: getDocDim('Height') + 'px',
                display: 'block'
            });
        }, 10);
        
    };
    
    // Remove the element:
    this.remove = function(){
        this.element.parentNode && this.element.parentNode.removeChild(instance.element);
    };
    
    // Show element:
    this.show = function(){};
    
    // Event handling helper:
    this.on = function(what,handler){
        what.toLowerCase() === 'show' ? (instance.show = handler)
        : instance.element['on'+what] = handler;
        return instance;
    };
    
    // Begin:
    this.init = function(duration){
    
        // Overwrite duration if parameter is supplied:
        instance.duration = duration || instance.duration;
        
        // Inject overlay element into DOM:
        if(params && params.appendto != undefined){
	      	document.getElementById(params.appendto).appendChild(instance.element);
      	}else{
      		document.getElementsByTagName('body')[0].appendChild(instance.element);
      	}
      	
        
        // OVERFLOW hidden!
        //document.getElementsByTagName('body')[0].setAttribute("style", "overflow: hidden;");
        
        // Run show() (by default, an empty function):
        instance.show.call(instance.element,instance);
        
        // If a duration is supplied then remove element after
        // the specified amount of time:
        instance.duration && setTimeout(function(){instance.remove();}, instance.duration);
        var append_id;
        if (params && params.id != undefined)  {
        	append_id = params.id;
        }
        else{
        	append_id = "myOverlay";
        }
        instance.element.setAttribute("id", append_id);
        // Return instance, for reference:
        return instance;
        
    };
    
    this.click = function(executeClick){
		executeClick();
    }
    
}

