﻿var gbApp;
(function () {
	 "use strict";
  gbApp = angular.module('gbApp', ['ngRoute', 'uiSwitch', 'searchApp', 'ngCompanyApp', 'ngNewApp', 'ngHomeApp', 'ngFundApp', 'ngScreenerApp', 'toolsApp', 'investmentTutorialsApp','gccIndicatorsModel',
		'gbFilters', 'gbdirectives', 'ui.bootstrap', 'angular.filter', 'angucomplete-alt', 'ngNotify', 'ngPriceApp', 'ngAdminApp', 'ngCookies', 'ngShared', 'companyAnalytics', 'ui-rangeSlider', 'doubleScrollBars', 'angular-inview'])
				 .config(['$httpProvider', '$routeProvider', '$locationProvider'
						 , function ($httpProvider, $routeProvider, $locationProvider) {
							 //$httpProvider.interceptors.push('interceptors');
							 $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';
							 
			}])
		.factory('resourceService',['$http', function ($http) {
							var cache = {};
							var url = siteRoot + "home/getlabels";
							var service = {
								getData: function (id, callback) {
									var deffered = $q.defer();
									if (cache[id]) {
										deffered.resolve(cache[id])
									} else {
										$http.get('data.json').then(function (res) {
											cache[id] = res.data;
											deffered.resolve(cache[id])
										})
									}
									return deffered.promise.then(callback)
								}
							}

							return service
						}])
		.factory('$global', ['$window','$http','$timeout','$q','$log',function ($window,$http,$timeout,$q,$log) {
						var self = this;
						
						return {
							getResources: function (input) {
								var cache = $window.cache === undefined ? [] : $window.cache;
								var UrlCache = [];
								function detailsFilter(input) {                 
									if (cache[input]) {
										return cache[input];
									}else{
										var request = new XMLHttpRequest();
										request.open('GET',siteRoot+ 'common/getlabels', false); 
										request.send(null);
										if (request.status === 200) {
											$window.cache = JSON.parse(request.responseText);
											cache = JSON.parse(request.responseText);                      
										}
										return cache[input];
									 }               
								}               
							 return detailsFilter(input) !== undefined ? detailsFilter(input) : input;
							},
							getAllResources: function () {                                
								function detailsFilter() {
									var cache = $window.cache === undefined ? null : $window.cache;
									
									if (cache!==null) {                    
										return cache;
									}else{
										var request = new XMLHttpRequest();
										request.open('GET', siteRoot + 'common/getlabels', false);
										request.send(null);
										if (request.status === 200) {
											$window.cache = JSON.parse(request.responseText);
											return JSON.parse(request.responseText);
										}
									}
								}
							 
								return detailsFilter();
							},
							getURL: function (input) {
								function detailsFilter(input) {
									var data= JSON.stringify({url:input});
									if (UrlCache[input]) {
										return UrlCache[input];
									} else {
										var request = new XMLHttpRequest();
										request.open('POST', siteRoot + 'common/geturl', false);
										request.setRequestHeader("Content-type", "application/json; charset=utf-8");
										//request.setRequestHeader("Content-length", data.length);
										request.send(data);
										if (request.status === 200) {
											UrlCache[input] = JSON.parse(request.responseText);
										}
										return UrlCache[input];
									}
								}
								return detailsFilter(input) !== undefined ? detailsFilter(input) : input;
							},
							get: function (url, callback) {
								function getData(url) {
									var data = {};
									var http = new XMLHttpRequest();
									http.open("GET", url, false);
									http.setRequestHeader("Content-type", "application/json; charset=utf-8");
									http.onreadystatechange = function () {
										if (http.readyState == 4 && http.status == 200) {

											return callback(JSON.parse(request.responseText));
										}
									}
								}
								return getData(url);
							},
							checkAuth: function () {                
								//function detailsFilter() {                                
								//    var request = new XMLHttpRequest();
								//    request.open('POST', 'common/checkAuth', true);
								//    request.setRequestHeader("Content-type", "application/json; charset=utf-8");
								//    request.send(null);
								//    if (request.status === 200) {
								//      return JSON.parse(request.responseText);
								//    }
								//    return undefined;
								//  }
								function detailsFilter() {
									var deferred = $q.defer();
									$http.post('/common/checkAuth')
										.success(function(data) { 
											deferred.resolve({
												data: data
											});
										}).error(function(msg, code) {
											deferred.reject(msg);
										});
									return deferred.promise;
								}
															 
								return detailsFilter();
							},
							post: function (params) {
								function getData(input) {
								var data = {};
								var http = new XMLHttpRequest();             
								http.open("POST", params.url, true);
								http.setRequestHeader("Content-type", "application/json; charset=utf-8");
								http.setRequestHeader("Content-length", params.data.length);
								http.setRequestHeader("Connection", "close");
								http.send(params.data);
								http.onreadystatechange = function () {
									if (http.readyState == 4 && http.status == 200) {
										data = JSON.parse(request.responseText);
									}
								}                  
								return data;
							}
							return getData(url);
						}
						}           
					}])
					.run(['$rootScope','$global', function ($rootScope,$global) {             
						//$global.checkAuth().then(function (res) {
						//    console.log(res);
						//});
						 
					}]);
		
})();
