// JavaScript Document
dojo.require("dojo.io.*");
dojo.require("dojo.io.IframeIO");
dojo.require("dojo.widget.ContentPane");
dojo.require("dojo.widget.FloatingPane")
dojo.require("dojo.widget.Editor2");;
dojo.require("dojo.widget.Tooltip");
dojo.require("dojo.lfx.html");
dojo.require("dojo.json");
dojo.require("dojo.dom");

function formPostBack ( formName, data ) {
  switch (formName) {
    case "x":
      //do y;
    break
    
  }
}

var abase;
var abaseObj;
dojo.addOnLoad( function() 
  { 
  abase = document.getElementById("placeholder");
  abaseObj = dojo.widget.byId( 'placeholder' );
  fillJSONContainer( document );
  }
);
	
function createTooltip(target_id, content, href, aclass) {
	//prepending 'tt_' to distinguish between target and tooltip id's
	var obj = document.getElementById('tt_'+target_id); 
 
	if(obj != null)
		obj.parentNode.removeChild(obj);
  
  if (content != null) {
	var tooltip = dojo.widget.createWidget('tooltip', 
		{ 
		caption: content, 
		connectId: target_id,
		toggle: "explode",
		toggleDuration: 20
		});
  } else {
    var tooltip = dojo.widget.createWidget('tooltip', 
		{ 
		href: href, 
		connectId: target_id,
		toggle: "explode",
		toggleDuration: 20
		});
  }
  
	tooltip.domNode.id = 'tt_'+target_id;
	tooltip.domNode.className = aclass;
	if(abase)
	abase.appendChild(tooltip.domNode);
}

function appendVar( aurl, key, value ) {
  var re = new RegExp(/\?/);
  delim = (re.exec( aurl )) ? "&" : "?";
  if (key == "date") {
  var d = new Date();
    return aurl + delim + "ts=" + d.getTime();
  } else {
    return aurl + delim + key + "=" + value;
  }
}

function flopUp( anid, title, form, href ) {
  //prepending 'tt_' to distinguish between target and tooltip id's
	var obj = dojo.widget.byId(  anid+'_floatingPane' ); 
  
  href = appendVar(href, "date");
	
	if (obj)
	obj.destroy();
	
  createFlopUpWidget( anid, title, form, href );
  
  toggle(anid+'_floatingPane');
}

function createFlopUpWidget( anid, title, form, href) {
  if (form)
    var theObject = dojo.widget.createWidget('floatingPane', 
  	{
  		id:anid+"_floatingPane",
  		toggle: "fade",
  		toggleDuration: 250,
  		executeScripts:true,
      scriptScope:true,
      hasShadow:true,
      displayMinimizeAction:true,
      resizable:true,
      cacheContent:false,
      refreshOnShow: true,
      title:title
  	});
  else
    var theObject = dojo.widget.createWidget('floatingPane', 
  	{
  		id:anid+"_floatingPane",
  		toggle: "fade",
  		toggleDuration: 250,
  		executeScripts:true,
      scriptScope:true,
      hasShadow:true,
      displayMinimizeAction:true,
      resizable:true,
      cacheContent:false,
      refreshOnShow: true,
      title:title
  	});
    
  abaseObj.addChild(theObject);
  
  if (form)
  drawFileForm( href, theObject, anid );
  else
  theObject.setUrl( href );
}


var loader='<div class="async_loader"><span class="async_image"><img src="/sensational/images/ajax-loader.gif" /></span><span class="async_message">loading...</span></div>';
var buttonLoader='<span class="enabled_button"><img src="/sensational/images/no-enabled-status.gif" border="0" /></span>';

var loadDefault = {
	show: function(event, object, message ){
		event.preventDefault();
		object.setContent( message );
	}
}
	
var loadMessage = {
	show: function(event, object ){
		event.preventDefault();
		object.setContent( loader );
	}
}

//
function toggle( anObject ) {
  var thisObject = dojo.widget.byId( anObject );
  
  if (thisObject.isShowing()) {
    thisObject.refresh();
  } else {
    thisObject.show();
  }
}

function toggleAdmin() {
  var display_status = document.getElementById("wtvr_control").style.display;
  display_status = (display_status == "") ? "none" : display_status;
  if (display_status == "none") {
  document.getElementById("wtvr_control").style.display="block";
  document.getElementById("wtvr_debug").style.display="block";
  } else {
  document.getElementById("wtvr_control").style.display="none";
  document.getElementById("wtvr_debug").style.display="none";
  }
}

function swap( anObject ) {
  var thisObject = dojo.widget.byId( anObject );
  
  if (thisObject.isShowing()) {
    thisObject.hide();
  } else {
    thisObject.show();
  }
}

function generate( anObject, url ) {
  var thisObject = dojo.widget.byId( anObject );
  
  if (thisObject.isShowing()) {
    setChildFormNodes( anObject, "hide" );
    thisObject.hide();
  } else {
    setChildFormNodes( anObject, "show" );
    thisObject.show();
  }
}

function setChildFormNodes( anObject, action ) {
  thisObject = document.getElementById( anObject );
  var inputs = thisObject.getElementsByTagName("input");
  for(i=0;i<inputs.length;i++) {
    thename = inputs[i].name;
    skipper = document.getElementById('vskip'+thename);
    skipper.innerHTML = (action == "hide") ? anObject : "false";
  }
  var selects = thisObject.getElementsByTagName("select");
  for(i=0;i<selects.length;i++) {
    thename = selects[i].name;
    skipper = document.getElementById('vskip'+thename);
    skipper.innerHTML = (action == "hide") ? anObject : "false";
  }
    
}

function stretchPage ( div, newwidth, newheight){
  
  var thisObject = dojo.widget.byId(div);
 
  var curheight = thisObject.getHeight();
  var curwidth = thisObject.getWidth();
  
  if (newwidth == null) {
    newwidth = curwidth;
  }
  
  if (newheight == null) {
    newheight = curheight;
  }
  
  //alert("resizing...");
  thisObject.resizeTo( curwidth, newheight );
  
  var innerdiv = document.getElementById(div + '_container');
  innerdiv.style.height = newheight - 54;
}

function setUrl( anObject, url, postback ) {
  
  var thisObject = dojo.widget.byId( anObject );
  
  thisObject.setUrl( url );
  thisObject.async = "false";
  
  if (thisObject.isShowing()) {
    thisObject.refresh();
  } else {
    thisObject.show();
  }
  
  return true;
}

function fillJSONContainer( data ) {
  container = data.getElementById("styro_container");
  if(container) { fillFragments ( container ); }
}

function formPostBack ( formName, data ) {
  
  fillJSONContainer( data );
  
  thefunction = formName + "_PostBack()";
  try {
    return eval(thefunction);
  } catch(err) {
    return false;
  }
}

function getURL( theURL ) {
   dojo.io.bind({
      url: theURL,
      async: false,
      load: function(type, data, evt){ 
        return data;
      },
      error: function(type, error){ 
        //alert("There was an error with dojo.io.bind flashURL");
        //alert(dojo.json.serialize(error)); 
       },
       mimetype: "text/plain"
  });
}

function flashURL( theURL ) {
   dojo.io.bind({
      url: theURL,
      load: function(type, data, evt){ 
        alert(data);
      },
      error: function(type, error){ 
        //alert("There was an error with dojo.io.bind flashURL");
        //alert(dojo.json.serialize(error)); 
       },
       mimetype: "text/plain"
  });
}

function hitURL( theURL ) {
   dojo.io.bind({
      url: theURL,
      async: false,
      load: function(type, data, evt){ 
        
      },
      error: function(type, error){ 
        //alert("There was an error with dojo.io.bind hitURL");
        //alert(dojo.json.serialize(error)); 
       },
       mimetype: "text/plain"
  });
}

function drawForm( theURL, dojoObject )
{
   dojo.io.bind({
      url: theURL,
      load: function(type, data, evt){ 
        dojoObject.setContent(data);
      },
      error: function(type, error){ 
        //alert("There was an error with dojo.io.bind drawForm");
        //alert(dojo.json.serialize(error)); 
       },
       mimetype: "text/plain"
  });
}

function drawFileForm( theURL, dojoObject, formname )
{
 dojoObject.setContent(loader);
 
 dojo.io.bind({
    url: theURL,
    load: function(type, data, evt){ 
      initFileForm( formname, dojoObject, data );
    },
    error: function(type, error){ 
      //alert("There was an error with dojo.io.bind drawFileForm");
      //alert(dojo.json.serialize(error)); 
     },
     mimetype: "text/plain"
  });
}

function initFileForm( formName, dojoObject, data, validate )
{
  if (validate == null) {
    validate = true;
  }
  
  dojoObject.setContent(data);
  
  var x = new dojo.io.FormBind({
      // reference your form
      formNode: formName,
      mimetype: "text/html",
			transport: "IframeTransport",
			load: function(load, data, e) {
			  if (data.getElementsByTagName("form")[0]) {
			    var result = data.getElementsByTagName("body")[0].innerHTML;
          initFileForm( formName, dojoObject, result, validate );
        } else if (data.getElementsByTagName("body")[0] != undefined) {
          var result = data.getElementsByTagName("body")[0].innerHTML;
          dojoObject.setContent(result);
        } else {
          alert("error reading data from post in "+formName);
        }
        formPostBack( formName, data );
      },
      error: function(type, error){ 
        //alert("There was an error fetching " + formName);
        //alert(dojo.json.serialize(error)); 
       }
    });
  
  
   if (validate) {
     x.onSubmit = function( form ) {
        if (checkForm( thisValidator, formName )) {
          //alert("Validated");
    		  return true; // need this, otherwise form won't get sent!
    		} else {
          //alert("Not Validated");
          return false;  // didn't validate, don't POST!
        }
  	 }
	 }
}

function initForm( formName, dojoObject, data )
{
  
  dojoObject.setContent(data);
  
  var x = new dojo.io.FormBind({
      // reference your form
      formNode: formName,
      load: function(load, data, e) {
        dojoObject.setContent(data);
        //genExec( 'log' );
      },
      error: function(type, error){ 
        //alert("There was an error!");
        //alert(dojo.json.serialize(error)); 
       },
       mimetype: "text/plain"
    });
  
  x.onSubmit = function( form ) {
    if (checkForm( thisValidator, formName )) {
		  return true; // need this, otherwise form won't get sent!
		} else {
      return false;  // didn't validate, don't POST!
    }
	}	
	
}

function genProps( props ) {
    var qs = props;var nv = qs.split('&');
    var theprops = new Object();
    for(o = 0; o < nv.length; o++)
    {
      eq = nv[o].indexOf('=');
      theprops[nv[o].substring(0,eq).toLowerCase()] = unescape(nv[o].substring(eq + 1));
    }
    return theprops;
}

setSelectOptions = function (thiselement, data) {  
  clearSelectOptions( thiselement ); 
  
  if (thiselement.options) {
	  
    for (i=0;i<data.length;i++)  {
      thiselement.options[i+1] = new Option(data[i][0],data[i][1]); 
    }
		
    thiselement.options[0] = new Option('select one','');
		//thiselement.appendChild(new Option('Other', 0));
	  thiselement.selectedIndex = 0;
 	}
}

clearSelectOptions = function ( thiselement ) {
  for (i=thiselement.options.length-1;i>=0;i--) { thiselement.options[i] = null; }
  thiselement.options[0] = new Option('select one','');
	thiselement.selectedIndex = 0;   
}

if(window.attachEvent) {
    window.attachEvent("onload",setListeners);
}

function setListeners(){
    inputList = document.getElementsByTagName("input");
    for(i=0;i<inputList.length;i++){
        inputList[i].attachEvent("onpropertychange",restoreStyles);
        inputList[i].style.backgroundColor = "";
    }
    selectList = document.getElementsByTagName("select");
    for(i=0;i<selectList.length;i++){
        selectList[i].attachEvent("onpropertychange",restoreStyles);
        selectList[i].style.backgroundColor = "";
    }
}

function restoreStyles(){
    if(event.srcElement.style.backgroundColor != "")
        event.srcElement.style.backgroundColor = "";
}

function centerDiv( div, constrain ) {
  thediv = document.getElementById(div+'_floatingPane');
  var divsize;
  if (thediv) {
    
    if ((div == 'forum') || (div == 'stores_detail') || (div == 'newsletter')){
      divsize = [680,0];
    } else if ((div == 'contact_us') || (div == 'contact') || (div == 'nocontact')) {
      divsize = [350,0];
    } else {
      divsize = getDevSizeXY( thediv );
    }
    var size = getPageSizeXY();
    var scroll = getScrollXY();
    
    if (divsize[0] > 0) {
      if (constrain) {
        size[0] = 850;
      }
      var leftpos = (size[0] /2 ) - (divsize[0] / 2);
      if ((div == 'stores_detail') || (div == 'flickr') || (div == 'ourfave') || (div == 'youtube')) {
        leftpos -= 230;
      }
      
      thediv.style.left = leftpos + 'px';
    }
    
    if (scroll[1] > 150) {
      if (constrain) {
        scroll[1] -= 210;
      }
      thediv.style.top = (scroll[1] + 50) + 'px';
    }
  }
}

function dropDiv ( div ) {
  thediv = document.getElementById(div+'_floatingPane');
  if (thediv) {
    var scroll = getScrollXY();
    if (scroll[1] > 150) {
      thediv.style.top = (scroll[1] - 50) + 'px';
    }
  }
}

function getPageSizeXY() {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return [ myWidth, myHeight ];
}

function getDevSizeXY( thediv ) {
  var myWidth = 0, myHeight = 0;
  myWidth = thediv.offsetWidth;
  myHeight = thediv.offsetHeight;
  return [ myWidth, myHeight ];
}

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

createFormElement = function ( url ) {
  var anelement = getURL("/services/util/formelement?name=modules_total&type=hidden&default=1");
  var newElement = document.createElement("div");
    
}

fillFragments = function( anelement ) {
  for (i=0;i<anelement.childNodes.length;i++) {
    var base = anelement.childNodes[i].id.split("_");
    var jsondata = anelement.childNodes[i].value;
    var aform = anelement.childNodes[i].form;
    var object = dojo.json.evalJson(jsondata);
    for (i=0;i<object["items"].length;i++){
      if (i > 0) { 
        uuid = duplicateFragment( base[1] );
        var toremove = base[1]+"_";
        var re = new RegExp(base[1]);
        uuid = uuid.replace(re,"");
      } else {
        uuid = "";
      }
      
      setFragment( aform.name, base[1], uuid, object["items"][i] );
    }
  }
}

setFragment = function ( formName, parentName, uuid, data ) {
  var parentID = parentName + uuid;
  for (key in data) {
    var formElement = document.getElementById(key + uuid);
    switch (formElement.type) {
      case "text":
        formElement.value = data[key];
      break;
      case "select-one":
        setSelect(formElement,data[key]);
      break;
     
    }
  }
}


setSelect = function (elementNode,aValue) {
  var nodeOptions = elementNode.options;
  for (j=0;j<nodeOptions.length;j++) {
    if (nodeOptions[j].value == aValue) {
      elementNode.selectedIndex = j;
    }
  }
}

duplicateFragment = function ( anid ) {
  var sourceFrag = document.getElementById( anid );
  var theform = sourceFrag.parentNode;
  var thistotal = theform.elements[ anid + '_total'];
  /* ie this is the first "insert" */
  /* create a form "count" element, and track our inserted objects */
  if (! thistotal) {
    var newElement = document.createElement("input");
    newElement.setAttribute("type","hidden");
    newElement.setAttribute("value",1);
    newElement.setAttribute("name",anid + "_total");
    theform.appendChild(newElement);
    var trackElement = document.createElement("div");
    trackElement.setAttribute("id",anid + "_track");
    trackElement.style.display = "none";
    trackElement.innerHTML = anid;
    theform.appendChild(trackElement);
  } else {
    trackElement = document.getElementById(anid + "_track");
  }
  
  var destFrag = document.createElement( "div" );
  var theUUID = dojo.dom.getUniqueId();
  var newID = anid + "_" + theUUID;
  destFrag.setAttribute("id", newID );
  destFrag.setAttribute("class", "row" );
  dojo.dom.copyChildren(sourceFrag, destFrag);
  inputs =  destFrag.getElementsByTagName("input");
  for(inp=0;inp<inputs.length;inp++) {
    the_id = inputs[inp].getAttribute("id");
    inputs[inp].setAttribute("id",the_id + "_" + theUUID);
  }
  inputs =  destFrag.getElementsByTagName("select");
  for(inp=0;inp<inputs.length;inp++) {
    the_id = inputs[inp].getAttribute("id");
    inputs[inp].setAttribute("id",the_id + "_" + theUUID);
  }
  
  theform.elements[anid + "_total"].value++;
  
  var removeWrapper = document.createElement("span");
  removeWrapper.setAttribute("class","remove");
  var removeButton = document.createElement("img");
  removeButton.setAttribute("class","submit_bottom_submitter");
  removeButton.setAttribute("border",0);
  removeButton.setAttribute("onclick","removeFragment('" + newID+ "')");
  removeButton.setAttribute("src","/images/Neu/16x16/actions/undo.png");
  removeWrapper.appendChild(removeButton)
  destFrag.appendChild(removeWrapper);
  
  trackString = trackElement.innerHTML;
  trackArray = trackString.split(",");
  placeFrag = document.getElementById(trackArray[trackArray.length - 1]);
  
  dojo.dom.insertAfter(destFrag, placeFrag);
  trackElement.innerHTML += "," + newID;
  return newID;
}

removeFragment = function ( anid ) {
  var sourceFrag = document.getElementById( anid );
  var theform = sourceFrag.parentNode;
  dojo.dom.destroyNode(sourceFrag);
  rootID = anid.split("_")[0];
  theform.elements[rootID + "_total"].value--;
  trackElement = document.getElementById(rootID + "_track");
  trackString = trackElement.innerHTML;
  var re = new RegExp("," + anid, 'g');
  trackString = trackString.replace(re,'');
  trackElement.innerHTML = trackString;
}

function traverseDOM(x, arr) {
        arr.push("<DL><DT>")
        arr.push(x);
        for (var i = 0; i < x.childNodes.length; i++) {
                arr.push("<DD>");
                traverseDOM(x.childNodes[i], arr);
        }
        arr.push("</DL>");
        return arr;
}

function printDOM(x) {
        arr = Array();
        arr = traverseDOM(x, arr);
        for (var i = 0; i < arr.length; i++) {
                document.write(arr[i]);
        }
}
