//alert("--");
var FILE_REQUEST_KEY="protected";
var STUD_PROT_PREFIX="6pps";
var TEACH_PROT_PREFIX="6ppi";
var FILTER_PATH="seieditrice.com/filter";

var $g = jQuery;


$g(document).ready(function() {

	/** Global defs */
	var href;
	
	// All a DOM Elements
	var a_items = document.getElementsByTagName("a");
	
	// Class to setup for protected elements
	var protected_class = "";
	
	// Define regexp for protection
	var reg = ".*"+FILE_REQUEST_KEY+".*";
	var res_regexp;
	
	// Get all <a ..> element
	var type;
	
	function getResources() {
		//alert ("-");
		/* Try to retrieve hidden data */
		var b = document.getElementById("b_");
		var p = document.getElementById("p_");
		if (b==undefined) {
			//myAlert("Grant Manager error: b_ is not defined.");
			return;
		}
		if (p==undefined) {
			//myAlert("Grant Manager error: p_ is not defined.");
			return;
		}
		
		//myAlert("p.value: "+p.value);
		if (p.value=='Studente') {
			res_regexp = ".*"+STUD_PROT_PREFIX+".*";
			protected_class = "studenti";
		} else if (p.value=='Docente' || p.value=='Dipendente SEI' || p.value=='Amministratore' || p.value=='Agente' ) {
			res_regexp = ".*("+STUD_PROT_PREFIX+"|"+TEACH_PROT_PREFIX+").*";
			protected_class = "docenti";
		} else {
			res_regexp = /.*NO_MATCH.*/;
		}
		//myAlert("Reg: "+reg+", res_regexp: "+res_regexp);
		/* Resource Container: split into iContainer items grouped by 10 */
		var iContainer = new Array();
		var items = new Array();
		for (var i=0;i<a_items.length;i++) {
			href = new String(a_items[i].href);
			//className = new String(a_items[i].className);
			
			//myAlert("className = " + className);
			
			if (!href.match(b.value) || !href.match(".*("+STUD_PROT_PREFIX+"|"+TEACH_PROT_PREFIX+"|"+FILE_REQUEST_KEY+")")) {
				continue;
			}
			else
			{
				//myAlert(href);
			}
			
			/* Select only resource that matches user profile */
			//if (href.match(res_regexp) && className != "") {
			if (href.match(res_regexp)) {
				//myAlert("Matches res_regexp");
				href = href.substr(href.indexOf(b.value) + b.value.length + 1);
				//myAlert(href+" matches "+reg);
				if (href.match(reg)) {
					//myAlert(href+" matches "+reg);
					type = 'link';
					href = href.replace(FILE_REQUEST_KEY, "").substr(1);
				} else {
					type = 'page';					
				}
				if (href!="") {
					var index = href.indexOf('?');
					if (index!=-1) {
						href = href.substr(0, index);
					}
					items.push(type+"#"+href);
					if (i>0 && (items.length % 10 == 0)) {
						iContainer.push(items);
						items = new Array();
					}
				}
			}
			
		}
		if (items.length>0)
			iContainer.push(items);
		
		//myAlert(b.value);
		breakRequests(iContainer, b.value);
	}
	
	function breakRequests(iContainer, site) {
		//myAlert("N° of items: "+iContainer.length);
		while (iContainer.length>0) {
			gr_ajax(iContainer.shift(), site);
			breakRequests(iContainer, site);
		}
	}
	
	function gr_ajax(items, site) {
		myAlert("Ajaxing");
		/* Define json object to send to php script */
		var grant_set = '{ "b" : "'+site+'" ';

		/* Fill the json object */
		if (items.length>0) {
			grant_set += ' , "resources" : [ ';
		}
		var idata;
		for (var i=0;i<items.length;i++) {
			idata = items[i].split("#");
			grant_set += ' { "t" : "'+idata[0]+'" , "i" : "'+idata[1]+'", "grant" : 0 } ';
			if (i<items.length-1) grant_set += ' , ';
		}
		if (items.length>0) {
			grant_set += ' ] ';
		}
		grant_set += ' } ';
		//myAlert(grant_set);
		
		/* finally call ajax passing object */
		$.get("http://"+FILTER_PATH+"/grant_resource.php", { gset: escape(grant_set)},
			function(data){
				//myAlert("Raw" + unescape(data));
				console.log("Raw" + unescape(data));
				var gset = eval("(" + unescape(data) + ")");
				var tmp = new Array();
				var items = gset.resources;
				var current;
				for (var i=0;i<items.length;i++) {
					current = items[i];
					myAlert("current: " + current+", grant: "+current.grant+", current.i: "+current.i);
					if (current.grant=="" || !current.grant) {
						tmp[current.i] = "forbidden";
					}
					else{
						tmp[current.i] = "allowed";
					}
				}
				//myAlert("Res: " + gset);
				for (var i=0;i<a_items.length;i++) {
					href = new String(a_items[i].href);
					if (!href.match(site) || !href.match(".*("+STUD_PROT_PREFIX+"|"+TEACH_PROT_PREFIX+"|"+FILE_REQUEST_KEY+")")) {
						continue;
					}
					var index = href.indexOf('?');
					if (index!=-1) {
						href = href.substr(0, index);
					}
					if (href.match(reg)) {
						href = href.substr(href.indexOf(site) + site.length + 1).replace(FILE_REQUEST_KEY, "").substr(1);
					} else {
						href = href.substr(href.indexOf(site) + site.length + 1);
					}
					if (tmp[href]!=undefined) {
						if (tmp[href] == 'forbidden'){
							a_items[i].setAttribute(getRightClassAttribute(), protected_class);
							a_items[i].removeAttribute('rel');
						}
						
						if (tmp[href] == 'allowed' && (href.match(STUD_PROT_PREFIX) || href.match(TEACH_PROT_PREFIX))){
							a_items[i].setAttribute(getRightClassAttribute(), "unprotected_class");
							//a_items[i].setAttribute(getRightClassAttribute(), href);
						}
					}
					else{
						a_items[i].setAttribute(getRightClassAttribute(), 'unprotected_class');
					}
					
				}
		});				
	}
	
   	getResources();
});

/* mulp hack. Must choose right class attribute name based on
 * IE7, IE8, other. */
function getRightClassAttribute() {
	if (navigator.appName == "Microsoft Internet Explorer") {
		var ua = navigator.userAgent;
		var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
		if (re.exec(ua) != null)
			if (parseFloat( RegExp.$1 )>= 8.0) 
				return "class";
			else
				return "className";
	} else {
		return "class";
	}
}


function myAlert(msg, force)
{
	if(false) 
	alert(msg);
}


