var sys = new function(){

	var _self = this;

	// pregQuote
	this.pregQuote = function(str){
		var quote_chars = ["\\", ".", "+", "*", "?", "[", "^", "]", "$", "(", ")", "{", "}", "=", "!", "<", ">", "|", ":"];
    	var return_val = new String(str);

    	for(var i=0;i<quote_chars.length;i++){
        	eval("var pattern = /\\"+quote_chars[i]+"/gi");
        	return_val = return_val.replace(pattern, String.fromCharCode(92)+quote_chars[i]);
    	}
    	return return_val;
	}

	this.loadJS = function(uri, callback){
		document.write("<script language='javascript' src='"+uri+"' type='text/javascript'></script>");
	}

	this.loadCSS = function(uri, callback){
		document.write('<link rel="stylesheet" type="text/css" href="'+uri+'" />');
	}

	this.setValue = function(_var,_value){

		if(!window[_var]){
			window[_var] = _value;
		} else {

			for(var p in _value){
				window[_var][p] = _value[p];
			}

		}
	}

	this.parseJSON = function sys_parseJSON(str){
		return eval("(%)".replace('%',str));
	}

	this.formToObject = function sys_formToObject($form){
		var data = {};
		$('input, select, textarea',$form).each(function(){
			var el = $(this);
			switch(this.type){
				case "hidden":
				case "text":
				case "select-one":
				case "select-multiple":
				case "textarea":
					var name = this.name.match(/(.+)\[([^\]]*)\]$/);
					if(name){
						if(name[2]){
							if(data[name[1]]==null) data[name[1]]={};
							data[name[1]][name[2]] = el.val();
						}else{
							if(data[name[1]]==null) data[name[1]]=[];
							data[name[1]].push(el.val());
						}
					}else{
						data[this.name] = el.val();
					}
					break;
				case "checkbox":
//					var name = this.name.match(/(.+)\[([^\]]+)\]$/);
//					console.log(name)
//					if(data[this.name]==null) data[this.name]=[];
//					if(this.checked) data[this.name].push(el.val());
//					break;
				case "radio":
					var name = this.name.match(/(.+)\[([^\]]+)\]$/);
					if(name){
						if(data[name[1]]==null) data[name[1]]={};
						if(this.checked) data[name[1]][name[2]] = el.val();
					}else{
						if(this.checked) data[this.name] = el.val();
					}
					break;
			}
		});

		return data;
	}

    this.parseQuery = function(queryString, asArray){
        var t = [];
        var m = {};
        queryString = queryString.substring(queryString.indexOf('?')+1);
        var q = queryString.split('&');
        for(i=0;i<q.length;i++){
            var s = q[i].split('=');
            var k = s[0];
            var v = decodeURIComponent(s[1])
            t.push({key:k,value:v})
            if(m[k]){
                if(m[k].constructor != Array){
                    m[k] = [m[k]];
                }
                m[k].push(v);
            }else{
                m[k] = v;
            }
        }
        if(asArray){
            return t;
        }else{
            return m;
        }
    }

	this.setCookie =  function(name,value,expire,path,domain,secure){
		var cookie_string = name + "=" + escape ( value );

	  	if ( expire ){
		    var expires = new Date ( expire );
		    cookie_string += "; expires=" + expires.toGMTString();
		}

	  	if ( path ){
	        cookie_string += "; path=" + escape ( path );
		}

	  	if ( domain ){
	        cookie_string += "; domain=" + escape ( domain );
	  	}

	  	if ( secure ){
	        cookie_string += "; secure";
	  	}
	  	document.cookie = cookie_string;
	}

	this.wordWrap = function(selector){

	    var larg_total;
		var larg_carac;
		var quant_quebra;
		var pos_quebra;
	    var elementos;
		var quem;
		var caracs;
		var texto;
		var display_orig;

	    if(!selector){
	    	elementos = $("p.word-wrap").get();
	    } else {
	    	elementos = $(selector).get();
	    }

	    for(var i=0; i<elementos.length;i++){

	            quem = elementos[i];

	            quem.innerHTML = String(quem.innerHTML).replace(/ /g,"^"); //"�"
	            texto = String(quem.innerHTML);

	            quem.innerHTML = " ";

	            display_orig = quem.style.display;
	            quem.style.display="block";
	            larg_oficial = quem.offsetWidth;

				if(!document.all) {quem.style.display="table";}

	            quem.innerHTML = texto;
	            larg_total = quem.offsetWidth;

	            pos_quebra = 0;
	            caracs = texto.length;
	            texto = texto.replace(/\^/g," ");
	            larg_carac = larg_total / caracs;
	            if(larg_total > larg_oficial){
	                quant_quebra = parseInt(larg_oficial / larg_carac);
	                quant_quebra = quant_quebra - (parseInt(quant_quebra / 6)); //quanto menor o num, maior a garantia;
	                quem.innerHTML = "";
	                while(pos_quebra <= caracs){
	                    quem.innerHTML = quem.innerHTML + texto.substring(pos_quebra,pos_quebra + quant_quebra) + " ";
	                    pos_quebra = pos_quebra + quant_quebra;
	                }
	            }else{
	                quem.innerHTML = texto;
	            }//end if do larg_total>larg_oficial
	            quem.style.display = display_orig;

	    }//end for loop dos elementos
	}

	/**
	 *
	 * @param {Object} inputSelector
	 * @param {Object} charsLeftSelector - optional
	 */
	this.maxChars = function(inputSelector,charsLeftSelector){

		if( charsLeftSelector ){
			$cl 	= $(charsLeftSelector);
		}

		var $input  = $(inputSelector);

		var maxChars = 0;

		if( charsLeftSelector ){
			maxChars = parseInt ( $cl.html() );
			$input.attr('maxlength',maxChars);
		} else {
			maxChars = $input.attr('maxlength');
		}

		$input.data('_maxlength', maxChars );

		function check( obj ){
			var txt = $(obj).val();
			var cc = txt.length;

			if( cc > $(obj).data('_maxlength') ) {
				$(obj).val(txt.substr(0, $(obj).data('_maxlength') ) );
				return false;
			} else {
				return cc;
			}
		}

		function update( obj ){
			var len;
			if( len = check( this ) ){
				var v = String( $(this).data('_maxlength') - len );

				if( charsLeftSelector ){
					$cl.html( v );
				}
			}

		}

		$input.keydown(update).change(update).blur(update);
	}

	this.showConfirmation = function(confirmSelector,showTime,callback){
		var _showTime = showTime ? showTime : 5000;
		var _callback = callback ? callback : function(){};
		$msg = $(confirmSelector);
		$msg.slideToggle('fast',function(){window.setTimeout(function(){$msg.slideToggle('fast',callback);},_showTime);});
	}

	this.getSWF = function(movieName) {
	    if (navigator.appName.indexOf("Microsoft") != -1) {
	        return window[movieName]
	    }
	    else {
	        return document[movieName]
	    }
	}

	var __trimDefaultCharsList = "\\s";

	this.stringLeftTrim = function(string,chars){
		if(!chars){
			var chars = __trimDefaultCharsList;
		}
		var exp = new RegExp("^("+chars+")+","g");
		try {
			return string.replace(exp,'');
		} catch( e ) {
			return '';
		}
	}

	this.stringRightTrim = function(string,chars){
		if(!chars){
			var chars = __trimDefaultCharsList;
		}
		var exp = new RegExp("("+chars+")+$","g");
		try {
			return string.replace(exp,'');
		} catch( e ){
			return '';
		}
	}

	this.stringTrim = function(string,chars){
		if(!chars){
			var chars = __trimDefaultCharsList;
		}
		return _self.stringRightTrim(_self.stringLeftTrim(string,chars),chars);
	}

	this.imageReloader = function( src ){

		if( $.browser.mozilla ){
			var $iframe = $("<iframe/>").css({position:'absolute',left:-1000, top:-1000});

			$('body').append($iframe);

				function removeIframe(){
					if( $iframe.get(0).contentWindow.location.href == src ){
						$iframe.replaceWith('');
					}
				}

				if(self.attachEvent){
					$iframe.get(0).attachEvent('onload', removeIframe);
			    } else {
					$iframe.get(0).addEventListener('load', removeIframe, false);
			    }

			$iframe.get(0).contentWindow.location.href=src;
			$iframe.get(0).location.reload( true );
		} else {
			top.location.reload( true );
		}
	}

	this.redirNoFollow = function( pth, uid, conversionTagId ) {
		// cloack the link, so google cannot guess this is a link [STYLR-771]
		var prefixUrl = '';

		_self.generateConversionTag( conversionTagId );

		pth = Base64.decode(uid);
		if( !pth ) {
			location.href='';
		} else {
			location.href= pth;
		}
	}

	this.openNewWindow = function( path, uid, conversionTagId ){
		// cloack the link, so google cannot guess this is a link [STYLR-771]
		var prefixUrl = '';

		_self.generateConversionTag( conversionTagId );

        path = Base64.decode(uid);
		var $hiddenForm = $("<form action='"+path+"' target='_blank'></form>");
		$('body').append($hiddenForm.hide());
		$hiddenForm.submit();
		$hiddenForm.replaceWith('');
	}

	this.generateConversionTag = function( tagId ) {
		tagId = parseInt( tagId );
		switch( tagId ) {
			case 0:
				return false;
			case 1:		// default
				var conversionTag = "googleStylrAdWordsCampaign.html";
				break;
			case 2:		// zalando
				var conversionTag = "googleStylrAdWordsCampaignZalando.html";
				break;
		}

		// call GAdWords campaign conversion
		setTimeout( function klicktracking() {
			document.getElementById('trackingpixel').innerHTML
				= '<iframe src="/'+conversionTag+'" style="border:none;width:1px;height:1px;" marginheight="0" marginwidth="0" frameborder="0"></iframe>';
			}, 2000 );
		return true;
	}

}

$.fn.prepareImgLazyLoad = function( srcAttr ){
	var srcAttr = srcAttr || 'ill';

	return this.each( function( index, element ) {
		var $imgs = $('img', $(element));
		if( $imgs.size() > 0 ){
			$imgs.each(function(){
				var $img = $(this);
				$img.attr( srcAttr, $img.attr( 'src' ) );
				$img.attr( 'src', MEDIA_DOMAIN+"/addons/common/pics/dummy.gif" );
			});
		}
	} );
}

$.fn.imgLazyLoad = function( srcAttr, onload ) {
	var srcAttr = srcAttr || 'ill';

	return this.each( function( index, element ) {
		var $imgs = $('img', $(element));
		if( $imgs.size() > 0 ) {
			$imgs.each(function(){
				var $img = $(this);
				if( $img.attr( srcAttr ) ){
					if( onload ){
                        $img.bind('load error',function(){
                            onload.apply(this, arguments );
                        });
					}

					$img.attr( 'src', $img.attr( srcAttr ) );
					$img.attr( srcAttr, '' );
				} else {
                    if( onload ){
                        onload.apply(this,[]);
                    }
                }
			});
		}
	} );
}

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};


$().ready( function() {
	$('.jQhiddableSwitcher').click( function() {
		$(this).parent().next().toggle();
	} );

	//setTimeout( $('.mfo16').empty() , 12000 );

	$('.jQ_SingleSubmit').each(function(idx,obj){
		$(obj.form).submit(function() {
			$(obj).attr('disabled', 'true');
		});
	});
});
