/**
 * @author Nivaria Innova Team
 */
var ncm = {
	version: "1.0.0"
}

ncm.loadedModules = new Array();
ncm.eventListeners = new Array();
ncm.loadedDialogs = new Array();

//Custom events constants
ncm.event_calendarClick = "ncmCalendarClick";
ncm.event_calendarQueryLoaded = "ncmCalendarQueryLoaded";

ncm.load = function(filePath) {
	if(ncm.loadedModules[filePath]) return false;
	var isLoaded = true;
	$jq.ajax({
		async: false,
		cache: false,
		type: "GET",
		url: filePath,
		dataType: "script",
		contentType: "text/javascript",
		error: function(request,msg,ex) {
		   isLoaded = false;		
           ncm.showError(msg,ex,request);
        }
	});
	ncm.loadedModules[filePath] = isLoaded;
	return isLoaded;
}

ncm.initProperties = function(object,options) {
	object.datatype = options.datatype?options.datatype:null;
	object.language = options.language?options.language:null;
	object.jsp_utils = options.jsp_utils?options.jsp_utils:null;
	object.pageUrl = options.pageUrl?options.pageUrl:null;
	object.channel = options.channel?options.channel:null;
	object.inPreview = options.inPreview?options.inPreview:false;
	object.issueId = options.issueId?options.issueId:null;
	object.skin = options.skin?options.skin:null;
	var params = new String("action=1");
	params += "&dataTypeName=";
	params += object.datatype?object.datatype:"";
	params += "&langName=";
	params += object.language?object.language:"";
	params += "&pageUrl=";
	params += object.pageUrl?object.pageUrl:"";
	$jq.ajax({
    	async: false,
        type: "POST",
        url: object.jsp_utils,
        data: params,
        dataType: "json",
        error: function(request,msg,ex) {
           ncm.showError(msg,ex,request);
        },
        success: function(json) {
			if(json.properties!=null) {
				for(var i=0;i<json.properties.length;i++) {
					object.properties[json.properties[i].name]=json.properties[i].value;
				}				
			}
        }
    });
}

ncm.initSimpleFields = function(manager,object) {
	var jspfile = manager.jsp_utils;
	if(jspfile==null)
		jspfile = manager.getProperty("utils_jsp");
	if(jspfile=="") jspfile= new String("components/components-utils.jsp");
	var params = new String("action=2");
	params += "&objId=";
	params += object.id;
	params += "&langName="
	params += manager.language?manager.language:"";
	params += "&pageUrl=";
	params += manager.pageUrl?manager.pageUrl:"";
	params += "&channel=";
	params += manager.channel?manager.channel:"";
	var Me = object;		
	$jq.ajax({
    	async: false,
       	type: "POST",
       	url: jspfile,
       	data: params,
       	dataType: "json",
       	error: function(request,msg,ex) {
       		ncm.showError(msg,ex,request);
       	},
       	success: function(json) {
			if(json.simplefields!=null) {
				for(var i=0;i<json.simplefields.length;i++) {
					Me.simplefields[json.simplefields[i].name]=json.simplefields[i].value;
				}				
			}
       	}
   	});
}

ncm.showError = function(msg,ex,request) {
	var m = msg + ":\n";
    if(ex) {
    	m += ex.message?ex.message+"\n":"";
        m += ex.fileName?"File: "+ex.fileName+"\n":"";
        m += ex.lineNumber?"Line: "+ex.lineNumber+"\n":"";
        m += ex.stack?"Stack: "+ex.stack+"\n":"";
    }
	if(request!=null) {
		m += request.status?request.status+"\n":"";
		m += request.statusText?request.statusText+"\n":"";
	}
    alert(m);
}

ncm.openWindow = function(url) {
    if ($jq.trim(url)!= "") {
		var w = open(url);
		if(w){
			w.focus();
		}
	}
}

ncm.addEventListener = function(eventName,selector) {
	if(ncm.eventListeners[eventName]) {
		if($jq.inArray(selector,ncm.eventListeners[eventName])==-1) {
			ncm.eventListeners[eventName][ncm.eventListeners[eventName].length]=selector;
		}
	} else {
		ncm.eventListeners[eventName] = new Array(selector);
	}
}

ncm.getEventListeners = function(eventName) {
	var res = null;
	if(ncm.eventListeners[eventName]) res = ncm.eventListeners[eventName];
	return res; 
}

ncm.getEventListenersSelector = function(eventName) {
	var res = "";
	var arr = ncm.getEventListeners(eventName);
	if(arr!=null) {
		res = arr.join(",");
	}
	return res;
}

ncm.triggerEvent = function(eventName,arrParams) {
	var selector = ncm.getEventListenersSelector(eventName);
	if(selector!="") {
		$jq(selector).trigger(eventName,arrParams);
	}
}

ncm.getParametersFromUrl = function() {
	var res = new Array();
	if(window.location.search) {
		var qparams = window.location.search.replace(/\?/,"");
		var initParams = qparams.split("&");
		if(initParams!=null && initParams.length>0) {
			for(var i=0;i<initParams.length;i++) {
				var pair = initParams[i];
				var arr = pair.split("=");
				if(arr!=null && arr.length>1) {
					res[arr[0]]=arr[1];
				}
			}			
		}	
	}
	return res;
}

ncm.getParametersFromUrlAsString = function(separator) {
	var res = "";
	if(window.location.search) {
		var qparams = window.location.search.replace(/\?/,"");
		var initParams = qparams.split("&");
		if(initParams!=null && initParams.length>0) {
			for(var i=0;i<initParams.length;i++) {
				var pair = initParams[i];
				var arr = pair.split("=");
				if(arr!=null && arr.length>1) {
					res+=(i==0?"":separator)+arr[0]+separator+arr[1];
				}
			}			
		}	
	}
	return res;
}

ncm.getParametersFromUrlAsObject = function() {
	var res = {};
	if(window.location.search) {
		var qparams = window.location.search.replace(/\?/,"");
		var initParams = qparams.split("&");
		if(initParams!=null && initParams.length>0) {
			for(var i=0;i<initParams.length;i++) {
				var pair = initParams[i];
				var arr = pair.split("=");
				if(arr!=null && arr.length>1) {
					res[arr[0]] = arr[1];
				}
			}			
		}	
	}
	return res;
},

ncm.gatcLinks = function(selector,pageName) {
	var m_selector = selector + " a";
	$jq(m_selector).click(function(){
		if(typeof(pageTracker)=="undefined") return;
		if(pageTracker==null) return;
		var virtPath = "/"+pageName;
		var href = this.getAttribute("href");
		if(href==null) return;
		var isFile = href?(href.indexOf(".doc")!=-1 || href.indexOf(".xsl")!=-1 || href.indexOf(".pdf")!=-1 || href.indexOf(".ppt")!=-1):false; 
		var targ = this.getAttribute("target");
		var isExt = targ?targ=="_blank":false;
		var title = this.getAttribute("title");
		virtPath += "/"+(isFile?"download":(isExt?"external_link":"internal_link"));
		virtPath += "/"+(title?title:href);
		pageTracker._trackPageview(virtPath);
	});
}

//Functions for cookies
ncm.createCookie = function(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

ncm.readCookie = function (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 null;
}

ncm.eraseCookie = function(name) {
	createCookie(name,"",-1);
}

//Dialogs (based on jQuery dialog plugin)
ncm.showDialog = function(objId,message,append) {
	var selector = "div#dialog";
	selector += objId;
	if(!ncm.loadedDialogs[""+objId]) {
		ncm.loadedDialogs[""+objId] = $jq(selector).html(message).dialog().parent().parent();	
	} else {
		if(append) {
			$jq(selector).append(message);
		} else {
			$jq(selector).html(message);	
		}
		ncm.loadedDialogs[""+objId].show();
	}
}

ncm.hideDialog = function(objId) {
	var selector = "div#dialog";
	selector += objId;
	$jq(selector).html("");
	if(ncm.loadedDialogs[""+objId]) {
		ncm.loadedDialogs[""+objId].hide();
	}
}

ncm.intval = function(v) {
	v = parseInt(v);
    return isNaN(v) ? 0 : v;
}

ncm.getRandomBanner = function(objectId,fieldName,pageUrl,jsp,selector) {
	var params = new String("objectId=");
	params += objectId;
	params += "&objectField=";
	params += fieldName;
	params += "&pageUrl=";
	params += pageUrl;
	$jq.ajax({
    	async: true,
        type: "POST",
        url: jsp,
        data: params,
        dataType: "json",
        error: function(request,msg,ex) {
           ncm.showError(msg,ex,request);
        },
        success: function(json) {
			if(json!=null && json.image!=null) {
				$jq(selector).css("background-image","url("+json.image+")");				
			}
        }
    });
}
