if (document.getElementById) {
	window.onerror = function(evt,a,b) {
		//console.log(evt,a,b);
		//return true;
	}
}
dojo.require("dojox.layout.FloatingPane"); 

dojo.require('dojo.data.ItemFileReadStore');
//dojo.require("com.widget.AddableFilteringSelect");

dojo.require('dijit.dijit');

dojo.require('dijit.form.Form');
dojo.require('dijit.form.TextBox');
dojo.require('dijit.form.Button');
dojo.require('dijit.form.CheckBox');
dojo.require('dijit.form.ComboBox');

dojo.require('dijit.Menu');
dojo.require('dijit.Dialog');
dojo.require('dijit.Tooltip');

dojo.require('dojo.parser');

dojo.require('dojox.fx.Shadow');
dojo.require('dojox.fx.style');
dojo.require('dojox.layout.ContentPane');



dojo.require('com.util.loader.PreLoader');
dojo.require('com.util.loader.FormLoader');
dojo.require('com.util.Stack');
dojo.require('com.util.Application');
dojo.require('com.util.MainMenu');
dojo.require('com.util.Error');

dojo.require("com.widget.SerialForm");

dojo.require('com.core.RAPIRequestFactory');
dojo.require('com.core.RAPIMultiRequestFactory');

dojo.require('com.widget.PersianCalendar');
dojo.require('com.widget.FilteringSelect');
dojo.require('com.widget.BorderedButton');
dojo.require('com.widget.BorderedDropDownButton');
dojo.require('com.widget.BorderedComboBox');
dojo.require('com.widget.LiteGrid');
dojo.require('com.widget.Dialog');
dojo.require('com.widget.FormToolbar');
dojo.require('com.widget.FormDialog');
dojo.require('com.widget.Form');
//dojo.require('com.widget.Tooltip');
//dojo.require('com.widget.HomePage');
dojo.require("com.widget.CustomButton");
dojo.require("com.widget.TinyWidgets");

dojo.require("com.manager.Form");
dojo.require("com.manager.Wizard");
dojo.require("com.manager.Request");
dojo.require("com.manager.SerialForm");
dojo.require("com.manager.Menu");
dojo.require("com.manager.HomePage");

dojo.require("com.system.LocalStorage");

var registry = null;
var global_formHistoryAlias = null;
var global_function = null;
var global_serialForm = null;

var tooltip = null;

(function($){

	function init(){
		//console.log(Date.today().addMinutes(75))
		/*
		new com.widget.UploadDialog({
			requestId: 2,
			taskId: 10,
			module: 'Users',
			onFinish: function(fileId) {
				console.log(fileId);
			}
		});
		*/
		
		

		dojo.extend(dijit._MasterTooltip, {
			templatePath: dojo.moduleUrl("com", "widget/templates/Tooltip2.html")
		});

		
		var app = new com.util.application();
		
		if (!checkBrowser()) {
			return;
		}

		app.addBodyClasses();
		
		// TODO : show login box here!
		if(isLogin()) {
			startApplication();
		} else {
			showLoginBox();
		}
	}
	
	function preLoad() {
		// TODO : executing preloader comes here!
		var preLoader = new com.util.loader.PreLoader();		
		preLoader.execute();
		delete preLoader;
		
		registry = new com.system.registry();
		
		dojo.connect(window, "onscroll", null, function(evt){
			//app.globalOverlay.layout();
		});
		dojo.connect(window, "onresize", null, function(){
			//app.globalOverlay.layout();
		})
	}
	
	function isLogin() {
		var reqManager = new com.manager.Request();
		reqManager.register({
			module: 'Users',
			method: 'isLogin',
			resName: 'isLogin'
		});
		reqManager.execute(true);
		return reqManager.isLogin;
	}
	
	function showLoginBox() {
		// Fade out wait message and show login form.
		dojo.fadeOut({
			node: "splashWait",
			duration: 700,
			delay: 1000,
			onEnd: function(){
				dojo.style("splashWait", "display", "none");
				dojo.style("splashHeader", "backgroundPosition", "0 0");
				dojo.addClass('splash', 'login');
				dojox.fx.toggleClass('splashHeader', "splashHeaderGray").play();
				dojo.style('loginLoading', {opacity:0});
				dojo.style('loginBox', {opacity:0});
				dojo.style('submitBtn', {opacity:0});
				dojo.addClass('loginBox', 'visible');
				dijit.focus(dojo.byId('username'));
				dojo.fadeIn({
					node: 'loginBox',
					delay: 500,
					onEnd: function(){
						dojo.fadeIn({
							node: 'submitBtn',
							onEnd: function(){
								document.loginForm.username.disabled = false;
								document.loginForm.password.disabled = false;
								document.loginForm.submitBtn.disabled = false;
								dojo.connect(dojo.byId('submitBtn'), 'onclick', function(e){
									doLogin();
									//isLogin();
								})
							}
						}).play();
					}
				}).play();
			}
		}).play();
	}
	
	
	var doLogin = function(){
		// summary :
		//		Proccess login form and do login.
		if (dojo.byId('username').value.length > 0 && dojo.byId('password').value.length > 0) {
			document.loginForm.username.disabled = true;
			document.loginForm.password.disabled = true;
			document.loginForm.submitBtn.disabled = true;
			dojo.addClass('submitBtn', 'loginBoxDisabled');
			
			dojo.fadeIn({
				node: 'loginLoading'
			}).play();
			
			var requestManager = new com.manager.Request();
			requestManager.register({
				module: 'Users',
				method: 'authentication',
				resName: 'loginData',
				postParams: {
					username: dojo.byId('username').value,
					password: dojo.byId('password').value
				}
			});
			
			requestManager.execute(true);

			if (requestManager.loginData.status == 'OK') {
				dojo.removeClass('splash', 'login');
				dojo.style("loginForm", "display", "none");
				dojo.fadeOut({
					node: 'loginBox',
					duration: 1000,
					onEnd: function(){
						//dojo.addClass('splash', 'loading');
						//dojo.toggleClass('loginBox', 'visible');
						dojo._setOpacity(dojo.byId('loadingBox'), '0.0');
						//dojo.addClass('loadingBox', 'visible');
						startApplication();

					}
				}).play();
			} else {
				dojo.addClass('splash', 'login');
				document.loginForm.username.disabled = false;
				document.loginForm.password.disabled = false;
				document.loginForm.submitBtn.disabled = false;
				dojo.removeClass('submitBtn', 'loginBoxDisabled');
				
				dojo.fadeOut({
					node: 'loginLoading'
				}).play();
				
				dojo.byId('loginMessage').innerHTML = requestManager.loginData.message;
				//dojo.style('loginMessage', {opacity:0});
				if(!dojo.hasClass('loginMessage', 'loginMessageShow')) {
					dojox.fx.toggleClass('loginMessage', "loginMessageShow").play();
				}
			}
		} else {
			dojo.byId('loginMessage').innerHTML = "لطفاْ تمام فیلدهای ضروری را تکمیل نمایید.";
			//dojo.style('loginMessage', {opacity:0});
			dojox.fx.toggleClass('loginMessage', "loginMessageShow").play();
		}
		
	}
	
	function startApplication(){
		preLoad();
		//dojo.style(dojo.byId('mainContainer'), "opacity", 0.5)
		// summary :
		//		Initialize page and hide splash.
		dojo.fadeOut({
			node: 'splashBox',
			onEnd: function(){
				dojo.style(dojo.byId('container'), 'display', 'block');
				dojo.removeClass('splash', 'loading');
				dojo.style(dojo.byId('splashBox'), 'display', 'none');
				dojo.fadeOut({
					node: 'splash',
					duration: 700,
					onEnd: function(){
						dojo.style(dojo.byId('splash'), 'display', 'none');
						initDesktop();
					}
				}).play();
			}
		}).play();
	}
	
	function initDesktop() {
		
		var app = new com.util.application();
		
		dojo.query('#splash, #splash_notFirefox').orphan();
		
		dojo.parser.parse();
		
		// if browser is IE, creates a shadow around mainContainer
		// this is because Firefox can't connect window on resize event.
		if(dojo.isIE) {
			app.createShadow('mainContainer');
		}
		
		//createToolbarMenu(json_toolbar, 'toolbarMenuHolder');

		//var mainMenu = new com.util.MainMenu('mainRight');

		//var listUsres = new com.util.loader.FormLoader('listUsers').get();
		//dijit.byId('contentHolder').attr('content', listUsres);
		
		
	
		/*
		var g = new com.manager.SerialForm({
			target: 'contentHolder',
			paneMethod: 'insert'
		});
		*/
		//dojo.global.formViewMode = "new"
		
		var reqManager = new com.manager.Request();
		
		var f = new com.util.loader.FormLoader({
			alias: 'flow01',
			resName: 'form1',
			requestManager: reqManager
		});
		
		reqManager.register({
			module: 'Menus',
			method: 'getMainMenu',
			resName: 'mainMenuData'
		});
		
		reqManager.register({
			module: 'Menus',
			method: 'getTopMenu',
			resName: 'topMenuData'
		});

		reqManager.register({
			module: 'Users',
			method: 'isLogin',
			resName: 'login'
		});
		
		reqManager.register({
			module: 'Users',
			method: 'getProfile',
			resName: 'userPrifile'
		});
		
		reqManager.register({
			module: 'Home',
			method: 'getHome',
			resName: 'homeData'
		});
		
		reqManager.register({
			module: 'InternalMails',
			method: 'getNumberOfNewMails',
			resName: 'newMails'
		});
		

		reqManager.execute(true);
		//dijit.byId('contentHolder').attr('content', f.get());

		var mainMneu = new com.manager.Menu({
			target: 'MAINMENU_CONTAINER',
			foldedTarget: 'MAINMENU_FOLDED_CONTAINER',
			type: 'mainmenu',
			menuData: reqManager.mainMenuData
		});
		
		var topMneu = new com.manager.Menu({
			target: 'toolbarMenuHolder',
			type: 'topmenu',
			menuData: reqManager.topMenuData,
			newMails: reqManager.newMails
		});

		var homePage = new com.manager.HomePage({
		});
		/*
		var homePage = new com.widget.HomePage({
			store: reqManager.homeData,
			target: 'HOME_CONTAINER'
		});
		
		//dijit.byId('contentHolder').attr('content', homePage.domNode);


		var st = new com.system.LocalStorage();
		var value = st.get('count', 0);
		alert(value);
		st.set('count', f.get());

		var mainMenu = new com.util.MainMenu({
			node: 'mainRight',
			menuData: registry.get('/preLoaded/mainMenu')
			//menuData: reqManager.menu
		});

		//dijit.byId('contentHolder').attr('content', f.get());

		var a = new com.widget.ConfirmDialog({
			bodyText: 'آیا مطمئن هستید برای پاک کردن؟',
			iconClass: 'dialog_caution_icon',
			onConfirm: function(flag) {

			}
		});
		*/
		
		/* form com.widget.TinyWidgets */
		
		
		var overlay = new com.widget.globalOverlay();
		
		var a  = new com.widget.Tniy.ServerTime({
			timeTarget: "toolbarTimeHolder",
			dateTarget: "toolbarDateHolder"
		});
		
		var b  = new com.widget.Tniy.UserInfoLink({
			target: "toolbarUserHolder",
			activeUser: reqManager.userPrifile.fullName
			
		});
		
		reqManager = null;
		
		/*
		var reqManager = new com.manager.Request();
		
		reqManager.register({
			module: 'InternalMails',
			method: 'getNumberOfNewMails',
			resName: 'newMails'
		});
		
		dojo.connect(reqManager, "onLoad", null, function(data) {
			
		})
		reqManager.execute(false);
		*/
		
		app = null;
	}
	
	
	function checkBrowser(){
		// Hide everything and display an error message,
		// and also a link to download firefox.
		if (dojo.isIE < 7) {
			showNotSupportedBrowser();
			return false;
		} else if ((!dojo.isFF && !dojo.isIE)) {
			//showNotSupportedBrowser();
			//return false;
		}
		
		return true;
	}
	
	dojo.addOnLoad(init);
	
	window.onerror = function(error) {
		new com.widget.globalOverlay().hide();
		console.error("A javascript error occured: %s", error);
		return true;		
	}

	
})(dojo.query);



function showNotSupportedBrowser(){
	//	summary:
	//		Hide everything on the page.
	dojo.addClass('splash', 'hidden');
	dojo.addClass('splash_notFirefox', 'visible');
}


function submitTEST(form) {
	var tmp = new com.core.RAPIRequestFactory(dojo.formToObject(form));
	if(document.forms[0].getParams.value) {
		eval("tmp.getParams = " + document.forms[0].getParams.value);
	}
	if(document.forms[0].postParams.value) {
		eval("tmp.postParams = " + document.forms[0].postParams.value);
	}
	tmp.onLoad = function(data) {
		dojo.byId('davoodReport').innerHTML = dojo.toJson(data);
	}
	tmp.onError = function(error) {
		dojo.byId('davoodReport').innerHTML = "<div style='color:red;'>" + dojo.toString(error) + "</div>";
	}
	tmp.send(true);
}


function submitTEST2(form) {
	var tmp = new com.core.RAPIRequestFactory(dojo.formToObject(form));
	if(document.forms[1].getParams.value) {
		eval("tmp.sql = " + document.forms[1].getParams.value);
	}
	if(document.forms[1].postParams.value) {
		eval("tmp.sql = " + document.forms[1].postParams.value);
	}
	tmp.onLoad = function(data) {
		dojo.byId('davoodReport').innerHTML = dojo.toJson(data);
	}
	tmp.onError = function(error) {
		dojo.byId('davoodReport').innerHTML = "<div style='color:red;'>" + dojo.toString(error) + "</div>";
	}
	tmp.send(true);
}

function showTest() {
	var reqManager = new com.manager.Request();
	
	var form = new com.util.loader.FormLoader({
		alias: 'forTest',
		resName: 'menuForm',
		requestManager: reqManager
	});
	
	reqManager.execute(true);
	dijit.byId('contentHolder').attr('content', form.get());
}


function loadForm() {
	var reqManager = new com.manager.Request();
	var f = new com.util.loader.FormLoader({
		alias: dojo.byId('tempxxx').value,
		resName: 'form1',
		requestManager: reqManager
	});
	reqManager.execute(true);
	
	dijit.byId('contentHolder').attr('content', f.get());
}

function loadMyForm() {
	var reqManager = new com.manager.Request();
	var app = new com.util.application();
	
	var form = new com.util.loader.FormLoader({
		alias: dojo.byId('myFormAlias').value,
		resName: 'loadMyForm',
		requestManager: reqManager,
		cacheable: false
	});
	
	reqManager.execute(true);
	
	app.setContent(dijit.byId('contentHolder'), form.get());
}


/*
var res = dojo._contentHandlers.text;

dojo._contentHandlers.text = (function(old){
  return function(xhr){
    var json = old(xhr);
	console.log(json)
    if(json.updated){
      processUpdatedObjects(json.updated);
      delete json.updated;
    }
    return json;
  }
})(res);
*/

function getID(ID){
	if(document.all) return document.all[ID]
	else return document.getElementById(ID)
}


function nl2br (str, is_xhtml) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Philip Peterson
    // +   improved by: Onno Marsman
    // +   improved by: Atli Þór
    // +   bugfixed by: Onno Marsman
    // *     example 1: nl2br('Kevin\nvan\nZonneveld');
    // *     returns 1: 'Kevin<br />\nvan<br />\nZonneveld'
    // *     example 2: nl2br("\nOne\nTwo\n\nThree\n", false);
    // *     returns 2: '<br>\nOne<br>\nTwo<br>\n<br>\nThree<br>\n'
    // *     example 3: nl2br("\nOne\nTwo\n\nThree\n", true);
    // *     returns 3: '<br />\nOne<br />\nTwo<br />\n<br />\nThree<br />\n'
 
    breakTag = '<br />';
    if (typeof is_xhtml != 'undefined' && !is_xhtml) {
        breakTag = '<br>';
    }
 
    return (str + '').replace(/([^>]?)\n/g, '$1'+ breakTag +'\n');
}

function parseScript(node){
	var node = dojo.byId(node);
	dojo.query("script", node).forEach(function(x){
		//as is in dojox.layout.ContentPane.evalInGlobal function
		appendNode = dojo.doc.body;
		var n = appendNode.ownerDocument.createElement('script');
		n.type = "text/javascript";
		appendNode.appendChild(n);
		n.text = x.innerHTML; 
	});
}

function ale() {
	console.log(window.innerHeight + window.scrollMaxY)
}

function cap(e)
        {
			var key = e.which||e.keyCode; 
			console.log(key)
                // look for window.event in case event isn't passed in
                if (window.event) { e = window.event; }
                if (e.keyCode == 13)
                {
                       console.log('dddd')
                }
        }

		
		
var jsontest = { identifier: 'name',
  label: 'name',
  items: [
	{ name:'Africa', type:'continent', children:[
		{ name:'Egypt', type:'country' }, 
		{ name:'Kenya', type:'country', children:[
			{ name:'Nairobi', type:'city' },
			{ name:'Mombasa', type:'city' } ]
		},
		{ name:'Sudan', type:'country', children:
			{ name:'Khartoum', type:'city' } 
		} ]
	},
	{ name:'Asia', type:'continent', children:[
		{ name:'China', type:'country' },
		{ name:'India', type:'country' },
		{ name:'Russia', type:'country' },
		{ name:'Mongolia', type:'country' } ]
	},
	{ name:'Australia', type:'continent', population:'21 million', children:
		{ name:'Commonwealth of Australia', type:'country', population:'21 million'}
	},
	{ name:'Europe', type:'continent', children:[
		{ name:'Germany', type:'country' },
		{ name:'France', type:'country' },
		{ name:'Spain', type:'country' },
		{ name:'Italy', type:'country' } ]
	},
	{ name:'North America', type:'continent', children:[
		{ name:'Mexico', type:'country',  population:'108 million', area:'1,972,550 sq km', children:[
			{ name:'Mexico City', type:'city', population:'19 million', timezone:'-6 UTC'},
			{ name:'Guadalajara', type:'city', population:'4 million', timezone:'-6 UTC' } ]
		},
		{ name:'Canada', type:'country',  population:'33 million', area:'9,984,670 sq km', children:[
			{ name:'Ottawa', type:'city', population:'0.9 million', timezone:'-5 UTC'},
			{ name:'Toronto', type:'city', population:'2.5 million', timezone:'-5 UTC' }]
		},
		{ name:'United States of America', type:'country' } ]
	},
	{ name:'South America', type:'continent', children:[
		{ name:'Brazil', type:'country', population:'186 million' },
		{ name:'Argentina', type:'country', population:'40 million' } ]
	} ]
}


function scrollToElement(theElement){
	var selectedPosX = 0;
	var selectedPosY = 0;
	          
	while(theElement != null){
		selectedPosX += theElement.offsetLeft;
		selectedPosY += theElement.offsetTop;
		theElement = theElement.offsetParent;
	}
	                    		      
	window.scrollTo(selectedPosX,selectedPosY);
}

