/**
 * Utility Class
 * @param {Object} url
 */
var Tori = {};
var Util = {
    loadJsonp: function(url){
		$("jsonUrl").value = url;
        var script = document.createElement("script");
        script.setAttribute("type", "text/javascript");
        script.setAttribute("src", url);
        document.body.appendChild(script);
    },
	COLORS: ['black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange','black','blue','red','purple','orange'],
	colorIndex:0,
	getColor: function () {
		return this.COLORS[this.colorIndex ++];
	},
	getAzimuthByLatLngs: function (posFrom, posTo) {
		posTo.latitude = parseFloat(posTo.latitude);
		posTo.longitude = parseFloat(posTo.longitude);
		var latitudeDelta = posTo.latitude - posFrom.latitude;
		var longitudeDelta = (posTo.longitude - posFrom.longitude) * Math.cos(Math.PI*posFrom.latitude/180.0);
		var degreeInRadian = Math.atan2(longitudeDelta, latitudeDelta);
		var azimuth = 180 * degreeInRadian / Math.PI;
		return azimuth;
	},
	formatDate: function (date, formatString) {
		return formatString
			.replace("yyyy",date.getFullYear())
			.replace("MM",this._fillZero(date.getMonth() + 1,2))
			.replace("DD",this._fillZero(date.getDate(),2))
			.replace("HH",this._fillZero(date.getHours(),2))
			.replace("mm",this._fillZero(date.getMinutes(),2))
			.replace("ss",this._fillZero(date.getSeconds(),2));
	},
	_REPLACEMENT :{
		N: new RegExp('N','g'),
		E: new RegExp('E','g'),
		W: new RegExp('W','g'),
		S: new RegExp('S','g')
	},
	getAzimuthString: function (str) {
		return str.replace(this._REPLACEMENT.N,Dict.N).replace(this._REPLACEMENT.W,Dict.W).replace(this._REPLACEMENT.S,Dict.S).replace(this._REPLACEMENT.E,Dict.E);
	},
	isTimeEqual: function (time0, time1) {
		return Math.abs(time0.getTime()-time1.getTime()) < 1000 * 60;
	},
	_fillZero: function (value, count) {
		var str = new String(value);
		var length = str.length;
		while (str.length<count) 
			str = '0'+str;
		return str;
	},
	parseDateAsGmt: function (dateString) {
		var date = this.parseDate(dateString);
		//-540
		date.setTime(date.getTime()-date.getTimezoneOffset() * 60 * 1000);
		return date;
	},
	_REGEXP_ZERO_INT: new RegExp("^0"),
	parseIntWithZero: function (str) {
		return parseInt(str.replace(Util._REGEXP_ZERO_INT,''));
	},
	parseDate: function (dateString) {
		if (dateString==null || dateString == '') return null;
		var time = new Date();
		var tokens = dateString.split(" ");
		var dateTokens = tokens[0].split("-");
		time.setFullYear(Util.parseIntWithZero(dateTokens[0]));
		time.setDate(1);
		time.setMonth(Util.parseIntWithZero(dateTokens[1])-1);
		time.setDate(dateTokens[2]);
		if (tokens.length >= 2) {
			var timeTokens = tokens[1].split(":");
			time.setHours(timeTokens[0]);
			time.setMinutes(timeTokens[1]);
			time.setSeconds(timeTokens[2]);
		}
		if (tokens.length >= 3) {
			var timezoneStr = tokens[2];
		}
		return time;
	},
	dateIsBefore: function (date, comparison) {
		//return true id "date" is before "comparison"
		return (date.getTime()<comparison.getTime() );
	},
	getMaxZIndex: function () {
		var elements = document.getElementsByTagName('*');
		var max = 0;
		for (var i=0, l=elements.length; i<l; i++) {
			if (elements[i].style.zIndex && elements[i].style.zIndex>max)
				max = elements[i].style.zIndex; 
		}
		return max;
	},
	getDivisionPoint: function (from, to, ratio) {
		var weightFrom = 1-ratio;
		var weightTo = ratio;
		return {
			latitude: weightFrom*from.latitude + weightTo*to.latitude,
			longitude: weightFrom*from.longitude + weightTo*to.longitude
		};
	},
	getWindowSize: function () {
    	var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    	var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
		return {width:width, height:height};
	},
	loadLocaleFile: function(){
		this.locale = '?';
		if (window.navigator.language){
		  this.locale = window.navigator.language.toLowerCase() ;
		} else if (window.navigator.userLanguage){
		  this.locale = window.navigator.userLanguage.toLowerCase() ;
		}
	}
}
