/****************************************
 *  Utilities
 *  **************************************/
var Swiff2 = new Class
({
	//Implements: Swiff,
	//Extends: Swiff,
	
	initialize: function()
	{
		this.contentStack = new Object();
	},
	
	/**
	* @param versionMajor int major player version 
	* 					|| array [ major, minor, revision ]
	* @param versionSwf string path to swf file for this major version
	* @return void
	*/
	setVersionContent: function( versionMajor, versionSwf )
	{
		var versionMinor = 0;
		var versionRev = 0;
		if( typeof versionMajor == 'object' ) {
			var v = versionMajor;
			versionMajor = v[0];
			versionMinor = v[1];
			versionRev = v[2];
		}
		this.contentStack['V'+versionMajor] = versionSwf;
		this.contentStack['r'+versionMajor] = versionRev;
		this.contentStack['m'+versionMajor] = versionMinor;
	},
	
	/**
	 * returns the optimal ( highest possible due to player requirement ) swf url matching client flash player version
	 * @return Object
	 */
	getOptimalContent: function()
	{
		var v = this.getVersionDetails();
		var thisMajor = v[0];
		var thisRev = v[2];
	
		var minDiff = 1000;
		for(var i in this.contentStack) {
			var n =  Number( i.substr(1, 3) );
			var tmpDiff = thisMajor - n;
			if(tmpDiff < minDiff && tmpDiff > -1)  {
				if( tmpDiff === 0 ) {
					if( this.contentStack['r'+thisMajor] <= thisRev ) {
						minDiff = tmpDiff;
					}
				}else{
					minDiff = tmpDiff;
				}
			}
		}
		
		if( tmpDiff <= 0 ) return { fname: this.contentStack['V'+n], version:n };
		return ( thisMajor - minDiff <= thisMajor ) ? { fname: this.contentStack['V'+(thisMajor - minDiff)].toString(), version: thisMajor} : null;
	},
	
	/**
	 * @return array or int 
	 * -1 : ie automation server error - flash might be installed though
	 * 0 : no flash installed
	 * [i,j,k ] major, minor, rev
	 */
	getVersionDetails: function()
	{
		var version = 0;
		if (navigator.plugins && navigator.mimeTypes.length) {
			version = navigator.plugins["Shockwave Flash"];
			if (version && version.description) {
				version = version.description;
				version = version.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".");
			}else{
				version = 0;
			}
		}
		else if (typeof window.ActiveXObject != "undefined") {
			try {
				var a = new ActiveXObject( "ShockwaveFlash.ShockwaveFlash" );
				
				if (a) { // a will return null when ActiveX is disabled
					var d = a.GetVariable("$version");
					if (d) {
						d = d.split(" ")[1].split(",");
						version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
					}
				}
			}
			catch(e) { version = -1}
		}
		return version;
	}
});
Swiff2.getMajor = function()
{
	return new Swiff2().getVersionDetails()[0];
}

var ImagePreloader = new Class
({
	initialize: function()
	{
		imagesToPreload.each( function( img ) {
			if( $chk(img) ) new Asset.image( REMOTE_LAYOUT_BASE + img );
		});
	}
});


var AlphaPng = new Class
({
	initialize: function(options) {
		if (Browser.Engine.trident4)
		{
			this.fixElements( this );
		}
	},
	fixElements: function( classRef )
	{
		if( classRef != this ) return;
		//var images = [ $("logo") ];
		var images = $$(".trans");
		for (var i = 0; i < images.length; i++ )
		{
			var img =  images[ i ].getStyle( "background-image" );
			var rgx = /^.*\//;
			var a = img.substring(img.lastIndexOf( rgx ),img.match(/\.png/i).length + 2)
			img = img.substring( img.indexOf(a) + 3,img.length);
			img = img.replace( "\(\"","");
			img = img.replace( "\"\)","");
			images[ i ].setStyle( "filter", 'progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=\'true\', src=\'' + img + '\', sizingMethod=\'crop\')' );
			images[ i ].setStyle( "background", "none" );
		}
	}
});


function getRequestParameter(param) 
{
	var q = document.location.search || document.location.hash;
	if(q) {
		var pairs = q.substring(1).split("&");
		for (var i=0; i < pairs.length; i++) {
			if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
				return pairs[i].substring((pairs[i].indexOf("=")+1));
			}
		}
	}
	return "";
}
function getRequestParametersArray()
{
	var q = document.location.search || document.location.hash;
	var res = {};
	if(q) {
		var pairs = q.substring(1).split("&");
		for (var i=0; i < pairs.length; i++) {
			res[ pairs[i].substring(0, pairs[i].indexOf("=")) ] = pairs[i].substring((pairs[i].indexOf("=")+1));
		}
	}
	return res;
}
function getCurrentSite()
{
	var loc = window.location;
	loc = loc.toString().replace( REMOTE_BASE, "" );
	loc = loc.toString().replace( /\.html?((\?|#)[^\/]*)?$/, "" );
	if( !$chk( loc ) ) loc = "index";
	return loc;
}


function debug( statement, useDump, nestLevel )
{
	if( $chk( window["console"] ) ) {
		if( useDump ) {
			console.log( dump( statement, nestLevel ) );
		}else{
			console.log( statement );
		}
	}
}



function dump( arr,level,traceFunctions ) 
{
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if( typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' => ( \n";
				dumped_text += dump(value,level+1,traceFunctions);
			} else {
				if( !traceFunctions && typeof( value ) == "function" ) {
					continue;
				}
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
