/* Release: 1.3 2009-04-14 */

/*
 * Copyright (c) Andrée Hansson (peolanha AT gmail DOT com)
 * MIT License - http://www.opensource.org/licenses/mit-license.php
 * Idea loosely based on JASH, http://billyreisinger.com/jash/
 *
 * This JavaScript is JSLINT "validated". Settings:
 * - Recommended Options PLUS:
 * - Assume a browser
 * - Strict white space (2)
 * - Tolerate unfiltered for in
 * - And of course, "jQuery" as predefined
 * The "Bad Escapement" error is a false positive.
 *
 * Changelog:
 * - Shortcut commands added for toggling Gutters, Paragraph and Both.
 *   Usage: CTRL+ALT+Z for gutters,
 *          CTRL+ALT+X for paragraphs,
 *          CTRL+ALT+C for both
 * - An override variable has been added to allow the user to disable the setup
 *   window. With the added shortcut commands, this is great in a development
 *   environment.
 * - Refactored the namespace usage, it should be all self-contained now,
 *   relative to the Grid object instead of calling it's namespace. Column
 *   ength used is now based on 80, a few lines are a tad longer but most of the
 *   script complies with this now.
 * - Changes to the setVariable method, it now takes ONE or TWO
 *   arguments. One if it's an object and two if it's a "normal" call.
 *   Example:
 *   setVariable({ gColor : '#EFEFEF', pColor : '#000000' }); or 
 *   setVariable('gColor', '#EFEFEF');
 */
function Grid(){var c=this;c.settingsDef={urlBase:"http://960gridder.keep.se/releases/1.3/",gColor:"#EEEEEE",gColumns:12,gOpacity:0.35,gWidth:10,pColor:"#C0C0C0",pHeight:15,pOffset:0,pOpacity:0.55,center:true,gEnabled:true,pEnabled:true,size:960,fixFlash:true,setupEnabled:true,pressedKeys:[]};c.settings=(typeof(window.gOverride)==="undefined")?{}:window.gOverride;for(var a in c.settingsDef){if(typeof(c.settings[a])==="undefined"){c.settings[a]=c.settingsDef[a];}}if(typeof(window.jQuery)==="undefined"||jQuery().jquery.match(new RegExp("^1.3"))===null){window.jQuery=undefined;var b=document.createElement("script");b.type="text/javascript";b.src=c.settings.urlBase+"jquery.js";document.body.appendChild(b);}c.setupWindow=function(){jQuery('<style type"text/css">#g-setup *{margin:0!important;padding:0!important;font-family:Verdana,Geneva,sans-serif!important;font-size:12px!important;font-weight:normal!important;color:#58517c!important;z-index:2000!important;background:none!important;list-style-type:none!important;letter-spacing:normal!important;line-height:normal!important;border:0!important;text-indent:0!important;text-decoration:none!important;text-transform:none!important;}#g-setup{width:350px;background-color:#EEE;border:5px solid #CCC;position:absolute;top:0;left:50%;margin-left:-175px;z-index:2000;}#g-setup .grouphead{text-align:center!important;font-weight:bold!important;font-size:14px!important;border-bottom:1px dotted #CCC!important;margin-bottom:5px!important;}#g-setup .inputdesc,#g-setup input{font-size:10px!important;float:left!important;width:40%!important;display:block!important;}#g-setup input{padding:2px!important;background-color:#FFF!important;border:1px inset!important;}#g-setup .inputwrap{margin-bottom:3px!important;}#g-setup .inputdesc{text-align:right!important;line-height:1.7!important;padding-right:5px!important;}#g-setup-head{width:100%!important;list-style-type:none!important;}#g-setup-head li{padding:4px!important;}#g-setup-head .title{float:left!important;width:210px!important;text-align:right!important;font-weight:bold!important;}#g-setup-head .switch{float:right!important;width:50px!important;text-align:right!important;}#g-setup-content{border-top:5px solid #CCC!important;display:none;}#g-setup .g-setup-left-column,#g-setup .g-setup-right-column{width:165px!important;float:left!important;padding:4px!important;border-bottom:5px solid #CCC!important;}#g-setup .g-setup-left-column{border-right:4px solid #CCC!important;}#g-setup .input-check .inputdesc{padding-left:25px!important;width:220px!important;text-align:right!important;}#g-setup .input-check input{width:15px!important;height:15px!important;background:none!important;}.g-label{position:absolute;z-index:1000;}.g-label span{padding:4px;}.g-label .id{background-color:#069;color:#EEE;}.g-label .class{background-color:#0FF;color:#000;}#g-grid{left:0;position:absolute;z-index:500;top:0;}#g-grid .g-vertical,#g-grid .g-horizontal{position:absolute;z-index:1000;}*:first-child+html #g-grid .g-horizontal,*:first-child+html #g-grid .g-vertical{margin-left:-1px;}#g-grid .g-horizontal{min-height:1px;height:1px;font-size:0;line-height:0;}.clearfix:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0;}.clearfix{display:inline-block;}html[xmlns] .clearfix{display:block;}* html .clearfix{height:1%;}</style>').appendTo("head");c.settings.height=jQuery(document).height();if(c.settings.setupEnabled){jQuery('<div id="g-setup"><ul id="g-setup-head" class="clearfix"><li class="title">960 Gridder 1.3</li><li class="switch"><a href="javascript:void(0);">Show</a></li></ul><div id="g-setup-content" class="clearfix"><div class="clearfix"><div class="g-setup-left-column"><p class="grouphead">Gutter</p><div class="inputwrap clearfix"><p class="inputdesc">Color</p><input id="g-setup-gColor" /></div><div class="inputwrap clearfix"><p class="inputdesc">Opacity</p><input id="g-setup-gOpacity" /></div><div class="inputwrap clearfix"><p class="inputdesc">Width</p><input id="g-setup-gWidth" /></div><div class="inputwrap clearfix"><p class="inputdesc">Columns</p><input id="g-setup-gColumns" /></div></div><div class="g-setup-right-column"><p class="grouphead">Paragraph</p><div class="inputwrap clearfix"><p class="inputdesc">Color</p><input id="g-setup-pColor" /></div><div class="inputwrap clearfix"><p class="inputdesc">Opacity</p><input id="g-setup-pOpacity" /></div><div class="inputwrap clearfix"><p class="inputdesc">Height</p><input id="g-setup-pHeight" /></div><div class="inputwrap clearfix"><p class="inputdesc">Offset</p><input id="g-setup-pOffset" /></div></div></div><p class="grouphead">Miscellaneous</p><div class="input-wrap clearfix input-check"><p class="inputdesc">Center the Grid</p><input id="g-setup-center" type="checkbox" /></div><div class="input-wrap clearfix input-check"><p class="inputdesc">Enable gutters (vertical)</p><input id="g-setup-gEnabled" type="checkbox" /></div><div class="input-wrap clearfix input-check"><p class="inputdesc">Enable paragraphs (horizontal)</p><input id="g-setup-pEnabled" type="checkbox" /></div></div>').appendTo("body");for(var d in c.settings){if(jQuery("#g-setup-"+d).length!==0){if(jQuery("#g-setup-"+d).parent().is(".input-check")){jQuery("#g-setup-"+d).attr("checked","checked");}else{jQuery("#g-setup-"+d).val(c.settings[d]);}}}jQuery("#g-setup").css("top",jQuery(window).scrollTop());jQuery("#g-setup .switch a").click(function(){c.toggleSetupWindow();});jQuery("#g-setup input").keyup(function(){c.setVariable(jQuery(this).attr("id"),jQuery(this).val());});jQuery("#g-setup .input-check input").click(function(){c.setVariable(jQuery(this).attr("id"),jQuery(this).attr("checked"));});jQuery().keydown(function(f){if(jQuery.inArray(f.which,c.settings.pressedKeys)===-1){c.settings.pressedKeys.push(f.which);}});jQuery(window).scroll(function(){jQuery("#g-setup").css("top",jQuery().scrollTop());});}jQuery().keyup(function(g){if(jQuery.inArray(17,c.settings.pressedKeys)!==-1&&jQuery.inArray(18,c.settings.pressedKeys)!==-1){if(jQuery.inArray(90,c.settings.pressedKeys)!==-1){c.setVariable("gEnabled",!c.settings.gEnabled);}else{if(jQuery.inArray(88,c.settings.pressedKeys)!==-1){c.setVariable("pEnabled",!c.settings.pEnabled);}else{if(jQuery.inArray(67,c.settings.pressedKeys)!==-1){c.setVariable({gEnabled:!c.settings.gEnabled,pEnabled:!c.settings.pEnabled});}}}}var f=jQuery.inArray(g.which,c.settings.pressedKeys);c.settings.pressedKeys.splice(f,f);});};c.setVariable=function(){if(typeof(arguments[0])==="object"){for(var d in arguments[0]){c._setVariable(d,arguments[0][d]);}}else{c._setVariable(arguments[0],arguments[1]);}c.createGrid();};c._setVariable=function(d,e){d=d.replace(/g-setup-/,"");if(isNaN(parseInt(e,10))||parseInt(e,10)===0){c.settings[d]=e;}else{c.settings[d]=parseInt(e,10);}if(e===true){jQuery("#g-setup-"+d).attr("checked","checked");}else{if(e===false){jQuery("#g-setup-"+d).removeAttr("checked");}else{jQuery("#g-setup-"+d).val(e);}}};c.toggleSetupWindow=function(){if(jQuery("#g-setup-content").is(":visible")){jQuery("#g-setup .switch a").fadeOut("fast",function(){jQuery(this).text("Show").fadeIn("fast");});jQuery("#g-setup-content").slideUp();}else{jQuery("#g-setup .switch a").fadeOut("fast",function(){jQuery(this).text("Hide").fadeIn("fast");});jQuery("#g-setup-content").slideDown();}};c.createGrid=function(){jQuery("embed").each(function(){if(c.settings.fixFlash){jQuery(this).attr("wmode","transparent");}else{jQuery(this).removeAttr("wmode");}var e=jQuery(this).wrap("<div></div>").parent().html();jQuery(this).parent().replaceWith(e);jQuery(this).remove();});jQuery("#g-grid").remove();jQuery('<div id="g-grid"></div>').appendTo("body").css("width",c.settings.size);if(c.settings.center){jQuery("#g-grid").css({left:"50%",marginLeft:-((c.settings.size/2)+c.settings.gWidth)});}if(c.settings.gEnabled&&c.settings.gColumns>0){for(a=0;a<=c.settings.gColumns;a++){jQuery('<div class="g-vertical"></div>').appendTo("#g-grid").css({left:((c.settings.size/c.settings.gColumns)*a),height:c.settings.height,width:(c.settings.gWidth*2),backgroundColor:c.settings.gColor,opacity:c.settings.gOpacity});}}if(c.settings.pEnabled&&c.settings.pHeight>1){var d=((c.settings.height-c.settings.pOffset)/c.settings.pHeight);for(a=0;a<=d;a++){jQuery('<div class="g-horizontal">&nbsp;</div>').appendTo("#g-grid").css({top:((c.settings.height/d)*a)+c.settings.pOffset,left:"50%",marginLeft:-(c.settings.size/2),width:(c.settings.size+(c.settings.gWidth*2)),backgroundColor:c.settings.pColor,opacity:c.settings.pOpacity});}}};}var checkJQuery=function(){if(typeof(window.jQuery)==="undefined"){setTimeout(function(){checkJQuery();},10);}else{window.grid.setupWindow();window.grid.createGrid();}};if(typeof(window.grid)==="undefined"){window.grid=new Grid();checkJQuery();}else{window.grid.toggleSetupWindow();}