﻿var loader_src = "/images/aloader.gif";
new Image().src = loader_src;
var ajaxloadermessage = 'Παρακαλώ περιμένετε';
var success_message = 'Η ενημέρωση ολοκληρώθηκε επιτυχώς';
var failure_message = 'Αποτυχία αποστολής δεδομένων';


function listInsert(sitename,listname,func_success,func_failure)
{
	listUpdate(sitename,listname,0,func_success,func_failure);
}


function listDelete(sitename,listname,item_id,func_success,func_failure)
{
	deleteListItem(sitename,listname,item_id,func_success,func_failure);
}


function listUpdate(sitename,listname,item_id,func_success,func_failure)
{
	var fields = [];
	var appndfields = [];
	$('[id]').filter( function() { return this.id.match( '^'+listname+':'+item_id+':.*$' ); } ).each(function()
	{
		var field = $(this).attr("id").split(':');
		field = field[ field.length-1 ];
		var val = $(this).val();
		if( field.search( /\+/ )>0 )
		{ 
			field = field.replace(/\+/,"");
			appndfields[appndfields.length] = field;
		}
		fields[field] = val;
	});

	if ( appndfields.length>0 && item_id>0 ) { 
		getItemById
		(
			sitename,listname,item_id,
			function(xml,items)
			{
				for(var i=0; i<appndfields.length; i++)
				{
					fields[appndfields[i]] = items[0][appndfields[i]] + fields[appndfields[i]];
				}
				updateListItem(sitename,listname,item_id,fields,func_success,func_failure);
			}
		);
		return;
	}

	if( item_id==0 ){ addListItem(sitename,listname,fields,func_success,func_failure); }
	else { updateListItem(sitename,listname,item_id,fields,func_success,func_failure); }
}


function updateListItem(sitename,listname,item_id,fields,func_success,func_failure)
{
	fields['ID'] = item_id; 
	_updateListItems(sitename,listname,fields,'Update',func_success,func_failure);
}


function deleteListItem(sitename,listname,item_id,func_success,func_failure)
{
	var fields = [];
	fields['ID'] = item_id;
	_updateListItems(sitename,listname,fields,'Delete',func_success,func_failure);
}


function addListItem(sitename,listname,fields,func_success,func_failure)
{
	_updateListItems(sitename,listname,fields,'New',func_success,func_failure);
}


function _updateListItems(sitename,listname,fields,cmd,func_success,func_failure)
{
	if( (sitename!=null || sitename!='') && (sitename.search("^.*\/$")<0) ){ sitename += '/'; }

	var soapEnv = "<?xml version='1.0' encoding='utf-8'?>\n" +
		"<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/'>" +
			"<soap:Body>" +
				"<UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>" +
					"<listName>" + escapeHTML(listname) + "</listName>" +
					"<updates>" +
						"<Batch OnError='Continue'>" +
							"<Method ID='1' Cmd='" + cmd + "'>" ;

	for(var i in fields)
	{
		/* XINHA stuff */
		//if( i != 'append' && i != 'contains' && i != 'isArray' && i != 'forEach' && i != 'indexOf' )
		if(typeof(fields[i])=='string')
		{
			soapEnv +=				"<Field Name='" + escapeHTML(i) + "'>" + escapeHTML(fields[i]) + "</Field>" ;
		}
		//else { alert ( i + "\n" + typeof(fields[i]) + "\n" + fields[i] ); }
	}

	soapEnv +=				"</Method>" +
						"</Batch>" +
					"</updates>" +
				"</UpdateListItems>" +
			"</soap:Body>" +
		"</soap:Envelope>";


	var procFunc = function (xData, status) 
	{
		var errorcode;
		if(status == 'success'){ errorcode = $(xData.responseXML).find("ErrorCode").text(); }
		if(errorcode == '0x00000000') 
		{ 
			if(typeof(func_success)=='function') { func_success(xData.responseXML,parseResults(xData.responseXML),sitename,listname); }
			else{ alert(success_message); }
			return 1;
		}
		if (typeof(func_failure)=='function') { func_failure(xData.responseXML,[],sitename,listname); }
		else { alert(failure_message); }
		return 0;
	}

	
	$.ajax({
		url: sitename+"_vti_bin/Lists.asmx",
		beforeSend: function(xhr) {
            xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
        },
		type: "POST",
		dataType: "xml",
		data: soapEnv,
		complete: procFunc,
		contentType: "text/xml; charset=\"utf-8\""
	});
}


function getListItems(sitename,listname,func_success,func_failure)
{
	_getListItems(sitename,listname,'',[],func_success,func_failure);
}


function getItemById(sitename,listname,item_id,func_success,func_failure)
{
	var query = "<Query><Where><Eq><FieldRef Name='ID'/><Value Type='Text'>"+item_id+"</Value></Eq></Where></Query>";
	_getListItems(sitename,listname,query,[],func_success,func_failure);
}


function getDDListFromListItems(sitename,listname,elementid,attributes,txtfield,valfield,query,is_lookup,func_success,func_failure)
{
	if( valfield == undefined || valfield == '' || valfield == null ) { valfield = txtfield; }
	_getListItems
	(
		sitename,listname,query,[txtfield,valfield,'ID'],
		function(xml,items)
		{
			var sel = "<select "+attributes+">";
			for (var i in items)
			{
				/* XINHA stuff */
				//if( i != 'append' && i != 'contains' && i != 'isArray' && i != 'forEach' && i != 'indexOf' )
				if(typeof(items[i])=='object')
				{
					var val = escapeHTML(items[i][valfield]);
					if(is_lookup) { val = items[i]['ID']+';#'+val; }
					var txt = escapeHTML(items[i][txtfield]);
					//if ( val && txt && val != 'undefined' && txt != 'undefined' )
					//{ 
					sel += "<option value=\"" + val + "\">" + txt + "</option>"; 
					//}
				}
			}
			sel += "</select>";
			var placement = document.getElementById(elementid);
			if(placement) { placement.innerHTML = sel; }
			if(typeof(func_success)=='function'){ func_success(xml,items); }
		},
		func_failure
	);
}


function _getListItems(sitename,listname,query,fields,func_success,func_failure)
{
	if( (sitename!=null || sitename!='') && (sitename.search("^.*\/$")<0) ){ sitename += '/'; }

	var soapEnv = "<?xml version='1.0' encoding='utf-8'?>\n" +
		"<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/'>" +
			"<soap:Body>" +
				"<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>" +
					"<listName>" + escapeHTML(listname) + "</listName>" +
					"<query>" + query + "</query>" +
					"<viewFields>" ;
	if(fields.length>0)
	{
		soapEnv +=		"<ViewFields>";
		for(var i in fields)
		{
			/* XINHA stuff */
			//if( i != 'append' && i != 'contains' && i != 'isArray' && i != 'forEach' && i != 'indexOf' )
			if(typeof(fields[i])=='string')
			{
				soapEnv +=		"<FieldRef Name='" + escapeHTML(fields[i]) + "'/>" ;
			}
		}
		soapEnv +=		"</ViewFields>";
	}

	soapEnv +=		"</viewFields>" +
				"</GetListItems>" +
			"</soap:Body>" +
		"</soap:Envelope>" ;


	var procFunc = function (xData, status)
	{
		if(status == 'success') 
		{ 
			if(typeof(func_success)=='function') { func_success(xData.responseXML,parseResults(xData.responseXML),sitename,listname); }
			return 1;
		}
		if (typeof(func_failure)=='function') { func_failure(xData.responseXML,[],sitename,listname); }
		return 0;
	}
	
	$.ajax
	({
		url: sitename+"_vti_bin/Lists.asmx",
		type: "POST",
		dataType: "xml",
		data: soapEnv,
		complete: procFunc,
		contentType: "text/xml; charset=\"utf-8\""
	});
}


function parseResults(xml)
{
	var items = _parseResults(xml,"z\\:row");
	if ( items.length < 1 ) { items = _parseResults(xml,"row"); }
	return items;
}

function _parseResults(xml,pattern)
{
	var items = [];
	var indx=0;
	$(xml).find(pattern).each(function()
	{
		var fields = {};
		for( var i= 0; i<this.attributes.length; i++ ) 
		{ 
			var f=this.attributes.item(i).name;
			fields[f.replace("ows_","")] = this.attributes.item(i).value;
		}
		items[indx++] = fields; 
	});
	return items;
}

function printFields(fields)
{
	var s = "";
	for (var i in fields){ s+= i+": "+fields[i] + "\r\n"; }
	alert(s);
}


function escapeHTML (str)
{
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
};


function toggleLoader(divid, callback)
{
	var pos = $("#"+divid).offset();
	var width = $("#"+divid).outerWidth();
	var height = $("#"+divid).outerHeight();
	var loader = "<div id='loader"+divid+"' style='" +
			"display:none; " +
			"z-index:999999; " +
			"position:absolute; " +
			"top: "+pos.top+"px; " +
			"left: "+pos.left+"px; " +
			"width: "+width+"; " +
			"height: "+height+"; " +
			"' >" +
		 "<div class='ajaxloader' style='" +
			"z-index:999999; " +
			"width: "+width+"; " +
			"height: "+height+"; " +
			"text-align:center; " +
			"vertical-align:middle; " +
			"opacity:0.8; " +
			"-moz-opacity:0.8; " +
			"filter:alpha(opacity=80); " +
		"' >&nbsp;</div>" +
		"<div style='" +
			"z-index:999999; " +
			"position:relative; " +
			"text-align:center; " +
			"top: -"+(height/2 + 72)+"px; " +
			"vertical-align:middle; " +
		"' >" +
			"<div class='ajaxloadermessage' style='" +
				"z-index:999999; " +
				"width:158; " +
				"padding-top:12px; " +
				"padding-bottom:24px; " +
				"margin-left:auto; " +
				"margin-right:auto; " +
			"' >" +
				"<div>"+ajaxloadermessage+"</div>" +
				"<img src='"+loader_src+"'/>" +
			"</div>" +
		"</div>" +
	"</div>";
	var c = function() { if(typeof(callback)=='function') { callback(); } }

	if( $("#loader"+divid).html() )
	{ 
		$("#loader"+divid).fadeOut("slow", function(){ $("#loader"+divid).remove(); c(); }); 
	}
	else
	{
		$("body").append(loader);
		$("#loader"+divid).fadeIn("slow",c);
	}
}


function addMultiListItem(sitename,listname,fields,func_success,func_failure)
{
	_updateMultiListItems(sitename,listname,fields,'New',func_success,func_failure);
}


function _updateMultiListItems(sitename,listname,fields,cmd,func_success,func_failure)
{
	if( (sitename!=null || sitename!='') && (sitename.search("^.*\/$")<0) ) { sitename += '/'; }

	var soapEnv = "<?xml version='1.0' encoding='utf-8'?>\n" +
		"<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/'>" +
			"<soap:Body>" +
				"<UpdateListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>" +
					"<listName>" + escapeHTML(listname) + "</listName>" +
					"<updates>" +
						"<Batch OnError='Continue'>" ;
						var k =0;
						for(var j in fields)
						{
							k = k +1;
							soapEnv += "<Method ID='"+k+"' Cmd='" + cmd + "'>" ;

							for(var i in fields[j])
							{
								/* XINHA stuff */
								//if( i != 'append' && i != 'contains' && i != 'isArray' && i != 'forEach' && i != 'indexOf' )
								if(typeof(fields[i])=='string')
								{
									soapEnv += "<Field Name='" + escapeHTML(i) + "'>" + escapeHTML(fields[j][i]) + "</Field>" ;
								}
							}
							soapEnv +=				"</Method>" ;
						}
						soapEnv += "</Batch>" +
					"</updates>" +
				"</UpdateListItems>" +
			"</soap:Body>" +
		"</soap:Envelope>";


	var procFunc = function (xData, status) 
	{
		if(status == 'success')
		{ 
			var errorfree = true;
			$(xData.responseXML).find("ErrorCode").each(function() 
			{
				if ($(this).text() != '0x00000000') { errorfree = false; }
			});

			if(errorfree)
			{ 
				if(typeof(func_success)=='function') { func_success(xData.responseXML,parseResults(xData.responseXML),sitename,listname); }
				else{ alert(success_message); }
				return 1;
			}
		}
		if (typeof(func_failure)=='function') { func_failure(xData.responseXML,[],sitename,listname); }
		else { alert(failure_message); }
		return 0;
	}

	
	$.ajax({
		url: sitename+"_vti_bin/Lists.asmx",
		beforeSend: function(xhr) {
            xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
        },
		type: "POST",
		dataType: "xml",
		data: soapEnv,
		complete: procFunc,
		contentType: "text/xml; charset=\"utf-8\""
	});
}


function reload() 
{ 
	var loc = window.location.href;
	if( loc.length > 0 && loc.substring(loc.length-1) == '#' ) { loc = loc.substring(0,loc.length-1); }
	window.location.href=loc;
}


