var head = document.getElementsByTagName('head')[0];
var codeBase = 'http://services.ssmleditor.com/PluginResources/';
//var codeBase = 'http://www.ssmleditor.com/PluginResources/';
//var codeBase = 'http://chupakabr.dyndns.org:8080/webssmleditor.bak/';
var jqueryPath = 'js/jquery-1.3.2.js';
var defaultTheme = 'css/productGridDefault.css';
var BROWSER_STRINGS = {
	'IE' : 'ie'
}
var defaultMaxAvailabilityCheckCount = 30;
var defaultMaxAvailabilityCheckInterval = 500;

var DependencyChecker = function() {
};

DependencyChecker.prototype = {
	loadedResources: [],
	toLoadResources: [],
	addResourcesToLoad: function(resources, isCss) {
		for (var i in resources)  {
			if (resources[i]['url'] && window['$']) {
				if (resources[i].browser == BROWSER_STRINGS.IE && $.browser.msie && Number($.browser.version) <= resources[i].maxVersion) {
					this.toLoadResources.push({'url': resources[i].url, 'isCss' : isCss});
				}
				continue;
			}
			this.toLoadResources.push({'url': resources[i], 'isCss' : isCss});
		}
	},
	addLoadedResource: function(resourceName) {
		for (var i in this.loadedResources) {
			if (this.loadedResources[i] == resourceName) return false;
		}
		this.loadedResources.push(resourceName);
		return true;
	}
};

if (!window['dependencyChecker'])  dependencyChecker = new DependencyChecker();

function formFullUrl(url) {
	if (url.match("^chrome:")) {
		 return url;
	} else {
		return codeBase + url;
	}
}
function appendJs(uri) {
	if (!uri || !dependencyChecker.addLoadedResource(uri)) return;
    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', formFullUrl(uri));
    head.appendChild(script);
}

function appendCss(cssElementId, uri) {
	if (!uri || !dependencyChecker.addLoadedResource(uri)) return;
	var opts = {type: 'text/css', href:  formFullUrl(uri), rel: 'stylesheet', media: 'screen'}
	if (cssElementId) {
		opts.id = cssElementId
	};

	var link = document.createElement('link');
	$(link).attr(opts);
	head.appendChild(link);
}

function initDependencies() {
	var theme = window['themeName'] ? window.themeName : defaultTheme;
	appendCss('themeCss', theme);
	for (var i in dependencyChecker.toLoadResources) {
		var dep = dependencyChecker.toLoadResources[i];
		if (dep.isCss) 
			appendCss(null, dep.url);
		else 
			appendJs(dep.url);
	}
}

if (!window['$']) 
	appendJs(jqueryPath);

function onMethodAvailable(parent, method, callback) {
	if (window['$'])
		if(/loaded|complete/.test(document.readyState)){
			_onMethodAvailable(parent, method, callback, 0);
		} else
			$(document).ready(function() {
				_onMethodAvailable(parent, method, callback, 0);
			});
	else 
		_onMethodAvailable(parent, method, callback, 0);
		
	var timeout;
	function _onMethodAvailable(parent, method, callback, callCount) {
		if (!parent) parent = window;
		if (parent[method]) {
			if (timeout) clearTimeout(timeout);
			callback();
			return;
		}

		if (callCount++ > defaultMaxAvailabilityCheckCount) {
			if (timeout) clearTimeout(timeout);
			return;
		}
		
		timeout = setTimeout(function() {_onMethodAvailable(parent, method, callback, callCount)}, defaultMaxAvailabilityCheckInterval);
	}	
}

function waitJqueryInit(callback) {
    onMethodAvailable(null, '$', callback);
}

if (window['additionalJsDependencies'])
	dependencyChecker.addResourcesToLoad(additionalJsDependencies, false);

waitJqueryInit(function() {
	if (window['additionalCssDependencies'])
		dependencyChecker.addResourcesToLoad(additionalCssDependencies, true);
	initDependencies();
});