﻿var scriptVersion = "v1.1";
sObj = {};
function stepIndex(increment,id){	
	if(increment){
		sObj[id].currIndex++;
		sObj[id].nextIndex++;
		sObj[id].prevIndex=sObj[id].currIndex-1;

		if(sObj[id].currIndex>=sObj[id].idArr.length){
			sObj[id].currIndex=0;
		}
		if(sObj[id].nextIndex>=sObj[id].idArr.length){
			sObj[id].nextIndex=0;
		}
	}else{
		sObj[id].currIndex--;		
		sObj[id].prevIndex=sObj[id].currIndex;
		sObj[id].nextIndex=sObj[id].currIndex+1;
		
		if(sObj[id].currIndex<0){
			sObj[id].currIndex=sObj[id].idArr.length-1;
		}
		if(sObj[id].prevIndex<0){
			sObj[id].prevIndex=sObj[id].idArr.length-1;
		}		
		if(sObj[id].nextIndex>=sObj[id].idArr.length){
			sObj[id].nextIndex=0;
		}	
	}
}

function scrollMyDiv(next,id){
	var animIn,animOut,divCSS,currDiv;
	if(sObj[id].currIndex===undefined){
		sObj[id].currIndex=0;
		sObj[id].nextIndex=1;
		sObj[id].prevIndex=sObj[id].idArr.length-1;
	}else{
		stepIndex(true,id);
	}
	if(typeof(sObj[id].myTimer)==='number'){
		clearTimeout(sObj[id].myTimer);
	}
	switch(sObj[id].inDir){	
		case 'n':
			animIn = {top:"+="+sObj[id].containerHeight};
			divCSS = {position:'absolute',top:-sObj[id].containerHeight,left:0,display:'block'};
		break;
		case 'nv':
			animIn = {top:"+="+sObj[id].containerHeight,left:"+="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:-sObj[id].containerHeight,left:-(sObj[id].containerWidth+5),display:'block'};
		break;
		case 'ne':
			animIn = {top:"+="+sObj[id].containerHeight,left:"-="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:-sObj[id].containerHeight,left:(sObj[id].containerWidth+5),display:'block'};
		break;
		case 's':
			animIn = {top:"-="+sObj[id].containerHeight};
			divCSS = {position:'absolute',top:sObj[id].containerHeight,left:0,display:'block'};
		break;
		case 'sv':
			animIn = {top:"-="+sObj[id].containerHeight,left:"+="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:sObj[id].containerHeight,left:-(sObj[id].containerWidth+5),display:'block'};
		break;
		case 'se':
			animIn = {top:"-="+sObj[id].containerHeight,left:"-="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:sObj[id].containerHeight,left:(sObj[id].containerWidth+5),display:'block'};
		break;
		case 'v':
			animIn = {left:"+="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:0,left:-(sObj[id].containerWidth+5),display:'block'};
		break;
		case 'e':
			animIn = {left:"-="+(sObj[id].containerWidth+5)};
			divCSS = {position:'absolute',top:0,left:+(sObj[id].containerWidth+5),display:'block'};
		break;
	}	
	switch(sObj[id].outDir){
		case 'fade':
			animOut = 'fade';
		break;
		case 'n':
			animOut = {top:"-="+sObj[id].containerHeight};
		break;
		case 'nv':
			animOut = {top:"-="+sObj[id].containerHeight,left:"-="+sObj[id].containerWidth};
		break;
		case 'ne':
			animOut = {top:"-="+sObj[id].containerHeight,left:"+="+sObj[id].containerWidth};
		break;
		case 's':
			animOut = {top:"+="+sObj[id].containerHeight};
		break;
		case 'sv':
			animOut = {top:"+="+sObj[id].containerHeight,left:"-="+sObj[id].containerWidth};
		break;
		case 'se':
			animOut = {top:"+="+sObj[id].containerHeight,left:"+="+sObj[id].containerWidth};
		break;
		case 'v':
			animOut = {left:"-="+sObj[id].containerWidth};
		break;
		case 'e':
			animOut = {left:"+="+sObj[id].containerWidth};
		break;
	}
	$("#"+sObj[id].idArr[sObj[id].currIndex]).css(divCSS).animate(animIn,sObj[id].slideTime,function(){
		currDiv = $(this);
		sObj[id].myTimer = setTimeout(function(){
			if(sObj[id].stopScroll!==true){
				if(animOut==='fade'){
					currDiv.fadeOut(350);			
				}else{
					currDiv.animate(animOut,sObj[id].slideTime,function(){
						currDiv.hide();
					});
				}
				scrollMyDiv(true,id);
			}	
		},sObj[id].displayTime);
	});
}

function scroll_wrapSoapRequest(webserviceUrl,soapBody,successFunc){
	var xmlWrap = [];
		xmlWrap.push("<?xml version='1.0' encoding='utf-8'?>");
		xmlWrap.push("<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>");
		xmlWrap.push("<soap:Body>");
		xmlWrap.push(soapBody);
		xmlWrap.push("</soap:Body>");
		xmlWrap.push("</soap:Envelope>");
		xmlWrap = xmlWrap.join('');
	$.ajax({
		async:false,
		type:"POST",
		url:webserviceUrl,
		contentType:"text/xml; charset=utf-8",
		processData:false,
		data:xmlWrap,
		dataType:"xml",
		success:successFunc
	});
}

function customGetListFields(listName){
var xmlStr,returnObj,fin,type,format;
	xmlStr = [];
	xmlStr.push('<GetList xmlns="http://schemas.microsoft.com/sharepoint/soap/">');
	xmlStr.push('<listName>' + listName + '</listName>');
	xmlStr.push('</GetList>');
	xmlStr = xmlStr.join('');
	returnObj = {ok:false};
	scroll_wrapSoapRequest(L_Menu_BaseUrl + '/_vti_bin/lists.asmx',xmlStr, function(data){
		if($(data).find('ErrorText').length>0){
			return false;
		}else{
			returnObj.ok=true;
			var serverTemplate = $(data).find('List').attr('ServerTemplate');
			$(data).find('Field').each(function(){			
				fin = $(this).attr('Name');
				type = $(this).attr('Type');
				format = $(this).attr('Format');
					returnObj[fin]={fin:fin,type:type,format:format,serverTemplate:serverTemplate};
			});			
		}
	});
	return returnObj;
}

function buildQueryContentByViewName(listName, viewName, viewFields, pagingInfo){
	var result = [];
	result.push('<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">');
	result.push('<listName>' + listName + '</listName>');
	result.push('<viewName>' + viewName + '</viewName>');
	if(viewFields!==null&&viewFields.length>0){
		result.push('<viewFields><ViewFields xmlns="">');
		$.each(viewFields, function(idx, field){
			result.push('<FieldRef Name="'+field+'"/>');
		});
		result.push('</ViewFields></viewFields>');
	}
	result.push('<queryOptions><QueryOptions xmlns=""><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>');
	if(pagingInfo!==undefined && pagingInfo!==null&&pagingInfo!==''){
		result.push('<Paging ListItemCollectionPositionNext="'+pagingInfo.replace(/&/g,'&amp;')+'" />');
	}
	result.push('</QueryOptions></queryOptions>');
	result.push('</GetListItems>');
	return result.join('');
}

function queryItemsByViewName(listName, viewName, viewFields, pagingInfo){
	var content = buildQueryContentByViewName(listName, viewName, viewFields, pagingInfo);
	var result = {count:-1, nextPagingInfo:'', items:[]};
	scroll_wrapSoapRequest(wsBaseUrl + 'lists.asmx',content,function(data){
		result.count = $(data).find("[nodeName='rs:data']").attr('ItemCount');
		result.nextPagingInfo = $(data).find("[nodeName='rs:data']").attr('ListItemCollectionPositionNext');
		$(data).find("[nodeName='z:row']").each(function(idx, itemData){
			var fieldValObj = {};
			$.each(viewFields,function(i,field){
				var value = $(itemData).attr('ows_' + field);
				if(value===undefined){
					value = null;
				}
				fieldValObj[field]=value;
			});
			result.items.push(fieldValObj);
		});
	});
	return result;
}

function stopScroll(stop,id){
	if(stop){
		if(sObj[id].panelWidth===undefined){
			var pWidth = $("#"+id).parent().outerWidth();
			var cWidth = $("#"+id).outerWidth();
			if(cWidth===pWidth){
				pWidth = pWidth-2;
			}
			sObj[id].panelWidth = pWidth;
		}
		$("#"+id+"_nav").stop(true,true).css({position:'absolute',width:sObj[id].panelWidth,zIndex:1001}).fadeTo(350,0.8);
		sObj[id].stopScroll=true;
		if(sObj[id].readMoreLink){
			$("#"+id+"_readmore").click(function(){
				location.href=sObj[id].urlArr[sObj[id].currIndex];
			});
		}
		if(sObj[id].addNewLink){
			$("#"+id+"_addnew").click(function(){
				location.href=sObj[id].newItemLink;
			});
		}
		if(typeof(sObj[id].myTimer)==='number'){
			clearTimeout(sObj[id].myTimer);
		}
	}else{
		$("#"+id+"_nav").stop(true,true).fadeTo(250,0,function(){
			$(this).hide();
		});	
		sObj[id].stopScroll=false;
		$.each(sObj[id].idArr,function(i,id){
			$("#"+id).fadeOut(250);
		});
		scrollMyDiv(true,id);	
	}
}

function fillScrollableDiv(id){
	var oBuffer,fieldsObj,res,path,pathRaw,iBuffer,style,thisVal,thisValArr,thisValBuffer,imgHeight,split,isImgLib,imgUrl,imgStyle;
	sObj[id].idArr = [];
	sObj[id].urlArr = [];
	fieldsObj = customGetListFields(sObj[id].listGuid);
	if(!fieldsObj.ok){
		$("#"+id).html("<div style='font-size:16px'>An error occured!</div>Check the \"listGuid\" parameter.<br /><strong>The GUID: </strong>"+sObj[id].listGuid+"<br />does not appear to exist in your site collection.");
		return;
	}
	isImgLib = (fieldsObj.ID.serverTemplate==='109')?true:false;
	wsBaseUrl = sObj[id].listBaseUrl + '/_vti_bin/';
	// Query the list for items
	if(isImgLib){
		if($.inArray('FileRef',sObj[id].viewFields)===-1){
			sObj[id].viewFields.push('FileRef');
		}
	}
	res = queryItemsByViewName(sObj[id].listGuid,sObj[id].listViewGuid,sObj[id].viewFields.concat('ID','FileDirRef'));
	if(res.count===-1){
		$("#"+id).html("<div style='font-size:16px'>An error occured!</div>Check the \"listViewGuid\" and \"listBaseUrl\" parameter.<br /><br /><strong>listViewGuid:</strong> "+sObj[id].listViewGuid+"<br /><strong>listBaseUrl:</strong> "+sObj[id].listBaseUrl+".");
		return;
	}else if(res.count===0){
		$("#"+id).html(sObj[id].emptyCaution);
	}else{
		path = '';
		$.each(res.items,function(i,item){
			iBuffer = [];
			if(path===''){
				pathRaw = item.FileDirRef;
				path = "/"+pathRaw.split(';#')[1];
				if(isImgLib){
					path = path+"/Forms";
					$("#"+id+"_addnew").remove();
				}				
			}
			$.each(sObj[id].viewFields,function(idx,fin){	
				if(fieldsObj[fin]===undefined){
					alert("There are no fields with FieldInternalName \""+fin+"\".\n\nCheck the parameter \"viewFields\" in the slideshow setup.");
					sObj[id].viewFields.splice($.inArray(fin,sObj[id].viewFields),1);
					return;
				}			
				if(isImgLib&&fin==='FileRef'){
					imgUrl = item[fin].split(';#')[1];
					imgHeight = (sObj[id].imageMax.height!==null)?parseInt(sObj[id].imageMax.height,10):"";
					imgWidth = (sObj[id].imageMax.width!==null)?parseInt(sObj[id].imageMax.width,10):"";
					imgStyle = [];
					if(imgHeight!==''){
						imgStyle.push("max-height:"+imgHeight+"px;height:expression(this.height>"+imgHeight+"?\""+imgHeight+"px\":true)");
					}
					if(imgWidth!==''){
						imgStyle.push("max-width:"+imgWidth+"px;width:expression(this.height>"+imgWidth+"?\""+imgWidth+"px\":true)");
					}
					thisVal = "<img src='/"+imgUrl+"' border='0' style='"+imgStyle.join(';')+"'>";
				}else{
					style = '';
					thisVal = (item[fin]===null)?'':item[fin];
					if(fieldsObj[fin].type==='URL' && thisVal!==''){
						if(fieldsObj[fin].format==='Image'){
							imgHeight = (sObj[id].imageMax.height!==null)?parseInt(sObj[id].imageMax.height,10):"";
							imgWidth = (sObj[id].imageMax.width!==null)?parseInt(sObj[id].imageMax.width,10):"";
							imgStyle = [];
							if(imgHeight!==''){
								imgStyle.push("max-height:"+imgHeight+"px;height:expression(this.height>"+imgHeight+"?\""+imgHeight+"px\":true)");
							}
							if(imgWidth!==''){
								imgStyle.push("max-width:"+imgWidth+"px;width:expression(this.height>"+imgWidth+"?\""+imgWidth+"px\":true)");
							}
							split = thisVal.split(', ');
							thisVal = "<div><img alt='"+split[1]+"' src='"+split[0]+"' border='0' style='"+imgStyle.join(';')+"'></div>";
						}else if(fieldsObj[fin].format==='Hyperlink'){
							split = thisVal.split(', ');
							thisVal = "<a title='"+split[1]+"' href='"+split[0]+"' target='_blank'>"+split[1]+"</a>";
						}
					}
					switch(fieldsObj[fin].type){
						case 'Calculated':
						case 'Lookup':
							thisVal = thisVal.split(';#')[1];
						break;
						case 'User':
							thisValArr = thisVal.split(';#');
							thisVal = "<a href='"+L_Menu_BaseUrl+"/_layouts/userdisp.aspx?Force=True&ID="+	thisValArr[0]+"' target='_blank'>"+	thisValArr[1]+"</a>";
						break;
						case 'UserMulti':
							thisValArr = thisVal.split(';#');
							thisValBuffer = [];
							$.each(thisValArr,function(i,val){
								if(i%2===0){
									thisValBuffer.push("<a href='"+L_Menu_BaseUrl+"/_layouts/userdisp.aspx?Force=True&ID="+val+"' target='_blank'>"+thisValArr[i+1]+"</a>");								
								}					
							});							
							thisVal = thisValBuffer.join('; ');
						break;
						case 'MultiChoice':
							thisValArr = thisVal.split(';#');
							thisValBuffer = [];
							$.each(thisValArr,function(i,val){
								if(val!==''){
									thisValBuffer.push(val);								
								}					
							});
							thisVal = thisValBuffer.join('; ');
						break;
						case 'LookupMulti':
							thisValArr = thisVal.split(';#');
							thisValBuffer = [];
							$.each(thisValArr,function(i,val){
								if(i%2!==0){
									thisValBuffer.push(val);								
								}					
							});							
							thisVal = thisValBuffer.join('; ');
						break;
						default:
							// No change
					}
					if(sObj[id].viewFieldsStyle[idx]!==undefined){
						style = " style='"+sObj[id].viewFieldsStyle[idx]+"'";
					}
				}
				iBuffer.push("<tr><td"+style+">"+thisVal+"</td></tr>");
			});
			oBuffer=[];
			var dispFormUrl = path+"/DispForm.aspx?ID="+item.ID+"&Source="+location.href;
			if(sObj[id].newItemLink===undefined){
				sObj[id].newItemLink = path+"/NewForm.aspx?Source="+location.href;
			}
			oBuffer.push("<div style='height:"+(sObj[id].containerHeight)+";overflow:hidden;display:none' ");
			oBuffer.push("id='"+id+"_item_"+i+"'>");
			oBuffer.push("<table width='"+(sObj[id].containerWidth)+"px' cellspacing='0' cellpadding='0'>"+iBuffer.join('')+"</table>");
			oBuffer.push("</div>");
			$("#"+id).append(oBuffer.join(''));		
			sObj[id].idArr.push(id+"_item_"+i);
			sObj[id].urlArr.push(dispFormUrl);
		});
	}
	$("#"+id+"_parent").mouseenter(function(){
		sObj[id].enterTimer = new Date();
		if(sObj[id].stopScroll!==true){
			stopScroll(true,id);		
		}
	}).mouseleave(function(e){
		var now = new Date();
			if((now-sObj[id].enterTimer)>500){
			stopScroll(false,id);
		}
	});
	scrollMyDiv(false,id);
}

function init_fillScrollableDiv(obj){
	var id,buffer,percent,width;
	sObj[obj.containerID]=obj;
	id = sObj[obj.containerID].containerID;
	buffer = [];
	buffer.push("<div id='"+id+"_parent' style='visibility:hidden;width:100%;");
	if(sObj[id].containerBorderStyle!==''){
		buffer.push(sObj[id].containerBorderStyle);
	}else{
		buffer.push("border:1px transparent solid");
	}
	buffer.push("'></div>");
	document.write(buffer.join(''));
	$(document).ready(function(){
		sObj[id].containerHeight = parseInt(sObj[id].containerHeight,10);
		width = $("#"+id+"_parent").outerWidth();
		if(sObj[id].containerWidth.toString().match('%')!==null){
			percent = parseInt(sObj[id].containerWidth,10);			
			if(percent<100){
				width = (percent/100)*width;
			}
			sObj[id].containerWidth = width;
		}else{
			sObj[id].containerWidth = parseInt(sObj[id].containerWidth,10);
		}
		$("#"+id+"_parent").css({'width':sObj[id].containerWidth+'px','visibility':'visible'});
		buffer = [];
				buffer.push("<div style='position:relative;vertical-align:top;overflow:hidden;cursor:default;");
				buffer.push("height:"+sObj[id].containerHeight+"px;width:100%;");
				if(sObj[id].containerBgColor!==''){
					buffer.push("background-color:"+sObj[id].containerBgColor+";");
				}
				if(sObj[id].containerBgImg!==''){
					buffer.push("background-image:url("+sObj[id].containerBgImg+");");
				}
				buffer.push("'>");
				buffer.push("<div style='width:"+sObj[id].containerWidth+"px;height:"+sObj[id].containerHeight+"px' id='"+id+"'></div>");
				buffer.push("</div>");	
					buffer.push("<div id='"+id+"_nav' style='display:none;text-align:center;border:1px gray solid;background-color:#f0f0f0'>");
					buffer.push("<div style='text-align:center'>");
						buffer.push("<table width='100%' cellpadding='0' cellspacing='0'>");
							buffer.push("<tr>");
							buffer.push("<td style='text-align:left;width:10%;padding-left:5px'>");
							buffer.push("");
							buffer.push("</td>");
							buffer.push("<td style='text-align:center;vertical-align:middle;width:20%;'>");
							if(sObj[id].addNewLink){
								buffer.push("<span id='"+id+"_addnew' style='font-size:10px;cursor:pointer'>"+sObj[id].addNewText+"</span>");
							}
							buffer.push("</td>");
							buffer.push("<td style='text-align:center;width:30%;'>");
							buffer.push("<img title='Previous' style='cursor:pointer;vertical-align:middle' src='/_layouts/images/plprev1.gif' onclick='manualScroll(false,\""+id+"\")' border='0'>");
							buffer.push("<img title='Next' style='cursor:pointer;vertical-align:middle' src='/_layouts/images/plnext1.gif' onclick='manualScroll(true,\""+id+"\")' border='0'>");
							buffer.push("</td>");
							buffer.push("<td style='text-align:center;vertical-align:middle;width:20%;'>");						
							if(sObj[id].readMoreLink){
								buffer.push("<span id='"+id+"_readmore' style='font-size:10px;cursor:pointer'>"+sObj[id].readMoreText+"</span>");
							}
							buffer.push("</td>");
							buffer.push("<td style='text-align:right;width:10%;padding-right:5px'>");
							buffer.push("<a title='"+" RSS"+"' style='text-decoration:none;color:gray' href='http://www.navertica.com/_layouts/listfeed.aspx?List=%7B0DEF5962%2DFFFE%2D499F%2D944A%2D017CD5DDB176%7D&Source=http%3A%2F%2Fwww%2Enavertica%2Ecom%2FLists%2FNovinky%2FAllItems%2Easpx' target='_blank'>");
buffer.push("<img title='RSS' style='cursor:pointer;vertical-align:middle' src='/_layouts/images/rss.gif' border='0'>");
							buffer.push("</a>");
							buffer.push("</td>");
							buffer.push("</tr>");
						buffer.push("</table>");
					buffer.push("</div>");				
			buffer.push("</div>");	
		$("#"+id+"_parent").html(buffer.join(''));	
		fillScrollableDiv(id);
	});
}

function manualScroll(next,id){
	if(sObj[id].stopScroll!==true){
		stopScroll(true,id);
	}
	if(typeof(sObj[id].myTimer)==='number'){
		clearTimeout(sObj[id].myTimer);
	}
	$.each(sObj[id].idArr,function(i,id){
		$("#"+id).hide();
	});	
	if(next){
		$("#"+sObj[id].idArr[sObj[id].nextIndex]).css({top:0,left:0}).fadeIn(350);	
		stepIndex(true,id);	
	}else{
		stepIndex(false,id);	
		$("#"+sObj[id].idArr[sObj[id].prevIndex]).css({top:0,left:0}).fadeIn(350);		
	}	
}

