$(document).ready(function(){
	//alert('drin');
	//document.write('<script type="text/javascript" src="http://test.galeria-hochzeit.de/app/files/api/json2.js">' + '</scr' + 'ipt>');
	gsApi.init();
});

gsApi = {
	lastResponse: null,
	lastError: null,

	callback: null,
	
	options: {
		url: 'http://www.galeria-hochzeit.de/app/app/api/'
	},
	init: function(){
		this.initSession(); // SESSION INIT FOR PHP API
	},
	initSession: function(){
		if(this.getCookie('gsApiToken') == null) {
			this.callback = function(data){
				if(data.errCode == 0) {
					gsApi.setCookie(data.response.userSession);
				}
			};
			this.request('User/getSession');
		}
	},
	// LOGIN
	login: function(userData, callback){
		this.callback = callback;
		this.request('login', userData);
	},
	logout: function(callback){
		this.callback = callback;
		this.request('logout');
	},
	getGuestLogin: function(callback) {
		this.callback = callback;
		this.request('Login/getGuestLogin');
	},
	setGuestLogin: function(data, callback) {
		this.callback = callback;
		this.request('Login/setGuestLogin', data);
	},
	setCustomerLogin: function(data, callback) {
		this.callback = callback;
		this.request('Login/setCustomerLogin', data);
	},
	setChangeLoginStatus: function(data, callback){
		this.callback = callback;
		this.request('Login/setChangeLoginStatus', data);
	},
	// LANGUAGE 
	getLanguage: function(callback) {
		this.callback = callback;
		this.request('language');
	},
	setLanguage: function(language, callback) {
		if(language == undefined) {
			var data = '';
		} else {
			var data = {lang: language};
		}
		
		this.callback = callback;
		this.request('language/setLanguage', data);
	},
	// USER
	getUser: function(callback) {
		this.callback = callback;
		this.request('User');
	},
	// PRIVATE METHODS
	request: function(action, params){
		if(params == undefined) {
			var params = '';
		}
		
		// Required for IE
		var sTokenStr = '';
		if(this.getCookie('gsApiToken') != null) {
			sTokenStr = '?sToken=' + this.getCookie('gsApiToken');
		}
		
		$.ajax({
			type: "GET",
			url: gsApi.options.url + action + '/' + sTokenStr,
			async: false,
			cache: false,
			crossDomain: true,
			dataType: "jsonp",
			jsonp: 'jsonp_callback',
			data: params,
			success: function(data, textStatus, jqXHR){
				gsApi.onSuccess(data, textStatus, jqXHR, action);
			},
			error: function(jqXHR, textStatus, errorThrown) {
				gsApi.onError(jqXHR, textStatus, errorThrown);
			},
			complete: function(jqXHR, textStatus) {
				gsApi.onComplete(jqXHR, textStatus);
			}
		});
		
		return;
	},
	onSuccess: function(data, textStatus, jqXHR, action){
		//console.log('onSuccess::');console.log(data);
		this.lastResponse = data;
		this.lastError = null;
		
		if(action == 'login') {
			gsApi.onLogin(data);
		}
		
		if(action == 'logout') {
			gsApi.onLogout(data);
		}
		
		if (this.callback !== null) { 
			//this.callback(JSON.parse(this.lastResponse, function(){}), this.lastError);
			this.callback(this.lastResponse, this.lastError);
			this.callback = null;
		}
	},
	onError: function(jqXHR, textStatus, errorThrown){
		//console.log('onError::');console.log(jqXHR);
		this.lastResponse = false;
		this.lastError = jqXHR;
		
		console.log(jqXHR);
		console.log(textStatus);
		console.log(errorThrown);
		
		if (this.callback !== null) { 
			this.callback(this.lastResponse, this.lastError);
			this.callback = null;
		}
	},
	onComplete: function(){
		//console.log('onComplete::');console.log(jqXHR);
	},
	onLogin: function(data) {
		if(data.errCode == 0) {
			gsApi.setCookie(data.response.userSession);
		}
	},
	onLogout: function(data) {
		if(data.errCode == 0) {
			gsApi.setCookie('');
		}
	},
	setCookie: function(value /*c_name,value,exdays*/) {
		//SOURCE: http://techpatterns.com/downloads/javascript_cookies.php
		var c_name = 'gsApiToken';
		var exdays = 1;
		
		var exdate=new Date();
		exdate.setDate(exdate.getDate() + exdays);
		
		//var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
		var c_value=escape(value);
		document.cookie=c_name + "=" + c_value + "; path=/"; //; expires=0
	},
	getCookie: function( name ) {
		//SOURCE: http://techpatterns.com/downloads/javascript_cookies.php
		var start = document.cookie.indexOf( name + "=" );
		var len = start + name.length + 1;
		if ( ( !start ) &&
		( name != document.cookie.substring( 0, name.length ) ) )
		{
		return null;
		}
		if ( start == -1 ) return null;
		var end = document.cookie.indexOf( ";", len );
		if ( end == -1 ) end = document.cookie.length;
		return unescape( document.cookie.substring( len, end ) );
	}
};
